2012-02-11 75 views
5

Tôi có 2 bảng, UserEmployee. 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?

+0

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). –

Trả lời

20

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 UserEmployee, 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.

2

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.

Các vấn đề liên quan