Нормализация базы данных - две таблицы с одним и тем же первичным ключом?

Я немного борюсь здесь.

В основном у меня есть такое отношение:

  • Персонал (Email персонала, Staff-FName, Staff-LName, Staff-Qualification)

Важно отметить, что Staff-Qualification является многозначным атрибутом.

Следовательно, это должно идти в отдельной таблице, как эта?

  • Staff_Qual (Электронная почта персонала, Квалификация персонала)

Потому что он многозначный или может оставаться в таблице Staff.

Однако проблема их разделения заключается в том, что обе таблицы будут иметь один и тот же первичный ключ. Я действительно борюсь с тем, что делать. Может ли это случиться? Нужно ли где-то добавить ограничение?

Любая помощь могла бы быть полезна!


person KieranLowe    schedule 28.12.2015    source источник
comment
Это классическое отношение «один ко многим». Ключ квалификационной таблицы — это внешний ключ, относящийся к основной таблице. Почитайте об отношениях «один ко многим» и внешних ключах.   -  person Duston    schedule 28.12.2015
comment
@Duston Но разве ключ таблицы квалификаций не является также основным, как это было бы (электронная почта персонала, квалификация персонала), поэтому он был бы и основным, и иностранным?   -  person KieranLowe    schedule 29.12.2015


Ответы (2)


Они помещаются в отдельную таблицу, но PRIMARY KEY в этой таблице не (Staff-EMail), а (Staff-Email, Staff-Qualification). У вас будет отдельный FOREIGN KEY на (Staff-EMail), REFERENCES на PRIMARY KEY в Staff.

person Larry Lustig    schedule 28.12.2015
comment
Я изменил, что моим первичным ключом в таблице Staff_Qual является и Staff-Email, и Staff-Qualification). Однако я действительно не понимаю, что вы подразумеваете под: У вас будет отдельный ВНЕШНИЙ КЛЮЧ на (Staff-EMail), который ССЫЛЯЕТСЯ на ПЕРВИЧНЫЙ КЛЮЧ в Staff. Я сделал следующее: - СОЗДАТЬ ТАБЛИЦА Staff_Qualifications ( Staff-Email VARCHAR(25) NOT NULL, Staff-Qualification VARCHAR(20) ОГРАНИЧЕНИЕ TestPK PRIMARY KEY (Staff-Email, Staff-Qualification) ОГРАНИЧЕНИЕ TestFK FOREIGN KEY (Staff-Email, Staff-Qualification) ССЫЛКИ Staff(Staff-Qualification) -Эл. адрес) ); Будет ли это правильно? - person KieranLowe; 29.12.2015
comment
Пожалуйста, отредактируйте свой код в своем вопросе, а не помещайте его в комментарий. - person philipxy; 30.12.2015

Что такое набор столбцов UNIQUE NOT NULL (возможно, объявленный через PRIMARY KEY) в таблице и что такое набор столбцов FOREIGN KEY в таблице, не имеет ничего общего с тем, что другие столбцы находятся в этой таблице или других таблицах, за исключением того, что FOREIGN KEY должен ссылаться на UNIQUE NOT NULL.

Из этого недавнего ответа:

Просто объявите, что верно для ваших отношений/таблиц:

  • объявление PK или UNIQUE NOT NULL говорит, что каждое значение подстроки в наборе столбцов уникально. Т.е. набор столбцов является суперключом. (PK — это просто выдающийся UNIQUE NOT NULL.)
  • объявление FK говорит, что значение подстроки списка столбцов в ссылочных столбцах также должно быть в ссылочных столбцах суперключа.

PS Да, вы должны удалить «многозначный» столбец из своей таблицы и добавить новую таблицу, используя какой-то набор столбцов UNIQUE NOT NULL (например, PRIMARY KEY) из исходного плюс столбец для нескольких значений, которые будут связаны с каждым значением этих столбцы. Объявите скопированные столбцы оригинала в новой таблице как FOREIGN KEY для оригинала. ПЕРВИЧНЫЙ КЛЮЧ нового — это те столбцы плюс новый столбец.

PPS (как прокомментировал Майк Шеррилл "Cat Recall") "MySQL не требует, чтобы столбцы, на которые ссылаются, были УНИКАЛЬНЫМИ или быть объявлено NOT NULL." Несмотря на то, что «рекомендуется использовать внешние ключи, которые ссылаются только на УНИКАЛЬНЫЕ (включая ПЕРВИЧНЫЕ) и НЕ НУЛЕВЫЕ ключи». («Кроме того, MySQL требует, чтобы указанные столбцы были проиндексированы по соображениям производительности».)

person philipxy    schedule 30.12.2015
comment
Ваш совет верен, но в MySQL ограничение внешнего ключа может ссылаться на неуникальные столбцы и столбцы, допускающие значение NULL. Хотел бы я, чтобы я это выдумывал. Кроме того, MySQL требует, чтобы указанные столбцы были проиндексированы по соображениям производительности. Однако система не требует, чтобы столбцы, на которые делается ссылка, были UNIQUE или были объявлены NOT NULL. Источник - person Mike Sherrill 'Cat Recall'; 31.12.2015
comment
@MikeSherrill'CatRecall' Я изо всех сил стараюсь не говорить ничего, кроме правды, даже когда не говорю всей правды! Я включил ваш комментарий и сказал, что FK должен быть UNIQUE NOT NULL. - person philipxy; 31.12.2015
comment
Я знаю. Я указал на это только потому, что вопрос помечен как MySQL. MySQL действительно раздражает людей, которые серьезно относятся к стандартам SQL. - person Mike Sherrill 'Cat Recall'; 31.12.2015