Как я могу указать отношение к существующим ссылкам на таблицы, на которые есть ссылки? - PullRequest
1 голос
/ 06 августа 2020

Вероятно, это недостаток дизайна, и, вероятно, есть лучший способ достичь того, чего я хочу, но.

У меня есть три таблицы: менеджеры, сотрудники и 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 до Сотрудников в отношении отношения Сотрудников к Менеджерам.

Опять же, я уверен, что есть лучший способ сделать это, о котором я сейчас не могу придумать.

1 Ответ

0 голосов
/ 12 августа 2020
-- Manager MNG exists.
--
manager {MNG}
     PK {MNG}
-- Employee EMP is managed by manger MNG.
--
employee {EMP, MNG}
      PK {EMP}
      SK {EMP, MNG}

FK {MNG} REFERENCES manager {MNG}
-- Manager MNG assigned employee EMP as a deputy,
-- in charge when the manager is not available.
--
deputy {MNG, EMP}
    PK {MNG}

FK {EMP, MNG} REFERENCES employee {EMP, MNG}

Примечание:

All attributes (columns) NOT NULL

PK = Primary Key
FK = Foreign Key
SK = Proper Superkey (Unique)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...