Если между двумя таблицами существует взаимно-однозначное отношение, то первичным ключом таблицы сведений также является внешний ключ.
master detail (1 : 1)
+----------+ 1:1 +-------------+
| PK id |<---o| PK FK id |
+----------+ +-------------+
| col1 | | col1 |
| col2 | | col2 |
| etc. | | etc. |
+----------+ +-------------+
Если у вас есть отношение m-to-n, в таблице соединений есть столбцы, относящиеся к двум первичным ключам m и n-таблиц. Эти столбцы являются первичными и внешними ключами одновременно.
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. |
+----------+ +----------+
Обратите внимание, что при такой конструкции запись одной таблицы может быть связана только с определенной записью другой таблицы только один раз, поскольку каждый составной первичный ключ соединительной таблицы должен быть уникальным. Если вы хотите разрешить неуникальные пары, определите отдельный первичный ключ в таблице соединений:
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. |
+----------+ +----------+
В этом случае ограничения первичного ключа и внешнего ключа устанавливаются для разных столбцов. В качестве альтернативы вы также можете создать первичный ключ с двумя внешними ключами плюс один числитель или другой различающий атрибут.
В вашем случае, если существует отношение один к одному или один к нулю или один между User
и Employee
, тогда да, User_ID
в таблице Employee
может быть внешним ключом (FK) и первичным ключом (PK) одновременно. Словом, это будет означать: пользователь также может быть сотрудником, и в этом случае данные сотрудника будут привязаны к пользователю. Если он не является сотрудником (он может быть внешним экспертом), запись о сотруднике не прилагается. Если User_ID
- это FK и PK в Employee
, к каждому пользователю может быть прикреплена не более одной записи сотрудника. Если User_ID
был только FK, но не PK в таблице Employee
, то у пользователя может быть несколько связанных записей о сотрудниках.