Quan hệ 1-1 trong mysql

Ví dụ chúng ta tạo ra hai bảng UserUserProfile trong đó mỗi user có duy nhất một profile. Và mỗi profile thì thuộc về một user nào đó.

  • Ta gọi bảng User có mối quan hệ hasOne với bảng UserProfile.
  • Bảng UserProfile có mối quan hệ belongTo với bảng User.

Thiết kế bảng

Chúng ta thiết kế bảng UserUserProfile như sau:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS user_profiles;

CREATE TABLE users [
  id INTEGER PRIMARY KEY AUTOINCREMENT, -- SQLite 
  -- id INT AUTO_INCREMENT PRIMARY KEY, -- MySQL 
  -- id SERIAL PRIMARY KEY,  -- PostgreSQL
  name VARCHAR[255]
];

CREATE TABLE user_profiles [
  id INTEGER PRIMARY KEY AUTOINCREMENT, -- SQLite 
  -- id INT AUTO_INCREMENT PRIMARY KEY, -- MySQL 
  -- id SERIAL PRIMARY KEY,  -- PostgreSQL
  user_id INTEGER,
  email VARCHAR[255],
  age INTEGER
];

INSERT INTO users [id, name] VALUES 
  [1, 'Nguyễn Ngọc Tuấn'],
  [2, 'Phan Thanh Bình'];

INSERT INTO user_profiles [user_id, email, age] VALUES 
  [1, '', 15],
  [2, '', 15];

Để ý là bảng user_profiles chứa id của bảng users. Tuy nhiên bảng users không chứa id của bảng user_profiles.

Truy vấn dữ liệu

Câu truy vấn dữ liệu trong hai bảng quan hệ 1-1 như sau:

1
2
3
4
SELECT users.id, users.name, user_profiles.email, user_profiles.age
  FROM users
  INNER JOIN user_profiles
  ON users.id = user_profiles.user_id;

Giá trị sẽ in ra:

+----+------------------------+--------------------+------+
| id | name                   | email              | age  |
+----+------------------------+--------------------+------+
|  1 | Nguyễn Ngọc Tuấn       |  |   15 |
|  2 | Phan Thanh Bình        |  |   15 |
+----+------------------------+--------------------+------+

Chủ Đề