Tôi có 2 bảng, User
và Employee
. Mỗi người dùng được cung cấp User_ID
và đó là khóa chính trong bảng User
và khóa ngoại trong bảng Employee
. Thuộc tính đó trong bảng Employee
cũng có phải là khóa chính không?Thuộc tính cơ sở dữ liệu có thể là khóa chính và khóa ngoài không?
Trả lời
Nếu bạn có mối quan hệ một-một giữa hai bảng, thì khóa chính của bảng chi tiết cũng là khóa ngoại.
master detail (1 : 1)
+----------+ 1:1 +-------------+
| PK id |<---o| PK FK id |
+----------+ +-------------+
| col1 | | col1 |
| col2 | | col2 |
| etc. | | etc. |
+----------+ +-------------+
Nếu bạn có một mối quan hệ m-to-n, bảng ngã ba có cột liên quan đến hai từ khóa chính của m và n-bảng. Các cột này là khóa chính và khóa ngoài cùng một lúc.
m : n
m_table junction
+----------+ 1:m +------------+ n_table
| PK id1 |<---o| PK FK1 id1 | n:1 +----------+
+----------+ | PK FK2 id2 |o--->| PK id2 |
| col1 | +------------+ +----------+
| col2 | | | | col1 |
| etc. | +------------+ | etc. |
+----------+ +----------+
Lưu ý rằng với xây dựng này, một kỷ lục của một bảng chỉ có thể được liên kết với một kỷ lục đặc biệt của bảng khác một lần, vì mỗi khóa chính tổng hợp của bảng ngã ba phải là duy nhất. Nếu bạn muốn cho phép ghép nối không phải duy nhất, hãy xác định khóa chính riêng biệt trong bảng giao diện:
m : n
junction
+---------+
m_table | PK id |
+----------+ 1:m +---------+ n_table
| PK id1 |<---o| FK1 id1 | n:1 +----------+
+----------+ | FK2 id2 |o--->| PK id2 |
| col1 | | | +----------+
| col2 | +---------+ | col1 |
| etc. | | etc. |
+----------+ +----------+
Trong trường hợp này, khóa chính và khóa ngoài được đặt trên các cột khác nhau. Ngoài ra, bạn cũng có thể xây dựng khóa chính với hai khóa ngoại cộng với một tử số hoặc một thuộc tính sành điệu khác.
Trong trường hợp của bạn, nếu có một one-to-one hoặc một one-to-zero-hay-một mối quan hệ giữa User
và Employee
, sau đó có, User_ID
trong bảng Employee
có thể chính nước ngoài (FK) và khóa chính (PK) cùng một lúc. Nói cách khác, điều này có nghĩa là: Một người dùng cũng có thể là một nhân viên, trong trường hợp đó dữ liệu nhân viên sẽ được gắn vào người dùng. Nếu anh ta không phải là một nhân viên (anh ta có thể là một chuyên gia bên ngoài), thì không có hồ sơ nhân viên nào được đính kèm. Nếu User_ID
là FK và PK trong Employee
, mỗi người dùng có thể có tối đa một bản ghi nhân viên kèm theo. Nếu User_ID
chỉ là FK nhưng không phải là PK trong bảng Employee
thì người dùng có thể có một số hồ sơ nhân viên liên quan.
Có. Bạn sẽ làm điều này chẳng hạn nếu bạn muốn thực thi rằng tất cả nhân viên là người dùng và một số người dùng có thể là nhân viên. Điều này sẽ là (không hoặc một) cho một mối quan hệ.
Nếu không, bạn thường không có khóa chính giống như khóa ngoại, mặc dù nó có thể chứa khóa ngoại, như trong trường hợp bảng nối cho mối quan hệ nhiều đến nhiều.
- 1. Đặt khóa chính trong cơ sở dữ liệu rất lớn
- 2. RestKit thuộc tính khóa chính
- 3. Entity Framework Khóa ngoài là Mã khóa chính Đầu tiên
- 4. Xoá mục nhập trùng lặp trong Cơ sở dữ liệu MySQL mà không có khóa chính
- 5. OperationalError: cơ sở dữ liệu bị khóa
- 6. Lỗi mua lại khóa cơ sở dữ liệu và hsqldb
- 7. Tệp cơ sở dữ liệu bị khóa
- 8. java.sql.SQLException: cơ sở dữ liệu bị khóa
- 9. Nếu bảng cơ sở dữ liệu luôn có khóa chính không?
- 10. ScalaQuery nhiều khóa chính và khóa ngoài
- 11. Thuộc tính "dữ liệu-url" và "khóa dữ liệu" của thẻ <a> là gì?
- 12. khóa chính/khóa ngoài trong uml
- 13. Lỗi khi tách cơ sở dữ liệu SQLite - cơ sở dữ liệu bị khóa
- 14. Làm thế nào để đặt khóa chính và khóa ngoài trong dữ liệu lõi?
- 15. dữ liệu cốt lõi - id khóa chính của một hàng trong cơ sở dữ liệu
- 16. Có tốt không khi có khóa ngoại là khóa chính?
- 17. Có thể mở cơ sở dữ liệu sqlite bị khóa ở chế độ chỉ đọc không?
- 18. django quản trị dữ liệu trường ngoài khóa chính thêm
- 19. Khóa cơ sở dữ liệu máy chủ SQL với PHP
- 20. Thiết kế cơ sở dữ liệu và việc sử dụng các khóa chính không phải là số
- 21. Bật khóa ngoài bằng Kiểm tra dữ liệu hiện có
- 22. khóa ngoài có thể tham chiếu đến khóa chính trong cùng một bảng không?
- 23. Tránh cơ sở dữ liệu sqlite3 bị khóa
- 24. cơ sở dữ liệu đầu tiên - EntityType xxx không có khóa được xác định. Xác định khóa cho EntityType
- 25. Khôi phục cơ sở dữ liệu máy chủ SQL - Khóa chính không mở
- 26. Có thể cùng một cột có khóa chính và khóa ngoài có ràng buộc với cột khác không
- 27. Có thể dựa vào khóa chính tăng tự động trong cơ sở dữ liệu của bạn không?
- 28. Thiết kế SQL xung quanh thiếu tham chiếu khóa ngoài cơ sở dữ liệu chéo
- 29. Chèn dữ liệu và đặt khóa ngoài bằng Postgres
- 30. Tôi có thể tạo khóa ngoại trên cơ sở dữ liệu không?
Khóa chính trong bảng nhân viên là gì? Chỉ cho phép một Khóa chính trong mỗi bảng. Bạn có thể làm khóa chính kết hợp (nhiều hơn một cột). –