Составной ключ ограничение MySQL - PullRequest
0 голосов
/ 13 марта 2019

Если бы я хотел написать mySQL для этой базы данных, которая уже была нормализована, как бы я добавил ограничение для составного ключа (Branch_ID, Employee_ID)?

Таблица филиала

Идентификатор филиала Название филиала Адрес Почтовый индекс Город Каунти

Таблица сотрудников филиала

Код филиала СотрудникИдентификатор

Таблица сотрудников

Идентификатор сотрудника Имя сотрудника Фамилия сотрудника Номер сотрудника NI №

Я сделал первичные ключи лысыми.Я знаю, как сделать первичные ключи идентификатора филиала и идентификатора сотрудника с помощью ограничения, но должен ли я также сделать Employee_ID в таблице «Сотрудник филиала» внешним ключом, поскольку я использую его в другой таблице?

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Чтобы добавить составной ключ в существующую таблицу, используйте код:

ALTER TABLE `Branch Employee`
ADD PRIMARY KEY (BranchID,Employee ID)

Вы правы, что каждый столбец в таблице Сотрудник филиала должен быть внешним ключом, так как значения используются в других таблицах,Без внешнего ключа можно было бы ввести сотрудников и филиалы, которые не существуют, в соответствующих таблицах

Создать внешние ключи следующим образом

ALTER TABLE `Branch Employee`
ADD FOREIGN KEY (EmployeeID_FK) REFERENCES Employee(EmployeeID);

ALTER TABLE `Branch Employee`
ADD FOREIGN KEY (BranchID_FK) REFERENCES Branch(BranchID);

Отредактировано с учетомКомментарий Раймонда:

Порядок столбцов в составном ключе имеет значение, поскольку кластеризованный индекс будет создан с первичным ключом.Наиболее селективный (наиболее запрашиваемый) столбец из двух должен идти первым, а затем менее селективным вторым.Правильный или неправильный порядок будет зависеть от запросов, выполняемых к таблице

0 голосов
/ 13 марта 2019

ПЕРВИЧНЫЙ КЛЮЧ - это идентификатор для каждой таблицы.

FOREIGN KEY означает, что на значение в таблице ссылается PRIMARY KEY в другой таблице.

В этом случае вам необходимо установить идентификатор филиала ID сотрудника, PRIMARY KEY и FOREIGN KEY; FOREIGN KEY - потому что на них ссылается другая таблица. ПЕРВИЧНЫЙ КЛЮЧ - потому что вы не хотите, чтобы «сотрудник а» был дважды в «филиале а».

Внимание: у вас все еще может быть «сотрудник a» как в «филиале a», так и в «филиале b».

Чтобы избежать этого, лучше, чтобы таблица Employee содержала идентификатор ветви вызова параметра и стала его внешним ключом.

Надеюсь, это поможет

...