Вероятно, это недостаток дизайна, и, вероятно, есть лучший способ достичь того, чего я хочу, но.
У меня есть три таблицы: менеджеры, сотрудники и C. Менеджеры и сотрудники имеют отношение «один ко многим» как таковое:
CREATE TABLE Managers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE Employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
manager_id INT,
FOREIGN KEY (manager_id) references Managers(id)
);
Листинг:
Table Managers:
id | name
-----------
1 | Eve
2 | Amber
Table Employees:
id | name | manager_id
-------------------
1 | George | 1
2 | Cecilia | 1
3 | Steve | 2
4 | Martin | 2
Теперь я хотел бы иметь таблицу C (не могу придумать имени, которое имеет смысл в этом конкретном примере c) со ссылкой на сотрудников, так что для каждой записи в C есть один сотрудник на менеджера. Это может выглядеть так:
Table C:
id | name | employee_id
--------------------------
1 | John | 1
2 | Debora | 3
Добавление еще одной записи в C со ссылкой на сотрудника, который использует того же менеджера, не должно быть возможным. Например, добавление VALUES (Sheryl, 2)
в C не должно быть разрешено, поскольку сотрудник с идентификатором 2 использует тех же менеджеров, что и сотрудник с идентификатором 1, который уже упоминается в C.
Как многие-к-одному от C до Сотрудников в отношении отношения Сотрудников к Менеджерам.
Опять же, я уверен, что есть лучший способ сделать это, о котором я сейчас не могу придумать.