Нормализовать таблицу до 3-й нормальной формы
этот вопрос явно домашку. Я не понимаю своего профессора и понятия не имею, что он говорил во время выборов. Мне нужно сделать пошаговые инструкции для нормализации следующей таблицы сначала в 1NF, затем 2NF, затем 3NF.
Я ценю любую помощь и инструкции.
4 ответов
хорошо, я надеюсь, что я помню их все правильно, давайте начнем...
правила
чтобы сделать их очень короткими (и не очень точные, просто, чтобы дать вам первое представление о том, что это все о):
- NF1: ячейки таблицы не должна содержать более одного значения.
- NF2: NF1, плюс все столбцы без первичного ключа должны зависеть от всех столбцов первичного ключа.
- NF3: NF2, плюс столбцы, не являющиеся первичными ключами, могут не зависеть друг от друга.
- инструкции
- NF1: найдите ячейки таблицы, содержащие более одного значения, поместите их в отдельные столбцы.
- NF2: найдите столбцы, зависящие от менее чем всех столбцов первичного ключа, поместите их в другую таблицу, в которой есть только те столбцы первичного ключа, от которых они действительно зависят.
- NF3: найти столбцы, которые зависят от другие столбцы без первичного ключа, в дополнение к зависимости от первичного ключа. Поместите зависимые столбцы в другую таблицу.
примеры
NF1
колонки "state
"имеет такие значения, как"WA, Washington". NF1 нарушается, потому что это два значения, аббревиатура и имя.
решение: чтобы выполнить NF1, создайте два столбца,STATE_ABBREVIATION
и STATE_NAME
.
NF2
представьте, что у вас есть таблица с этими 4 колонки, выражающие международные названия моделей автомобилей:
-
COUNTRY_ID
(числовой, первичный ключ) -
CAR_MODEL_ID
(числовой, первичный ключ) -
COUNTRY_NAME
(varchar) -
CAR_MODEL_NAME
(тип varchar)
таблица может иметь эти две строки данных:
- строка 1: COUNTRY_ID=1, CAR_MODEL_ID=5, COUNTRY_NAME=США, CAR_MODEL_NAME=Fox
- строка 2: COUNTRY_ID=2, CAR_MODEL_ID=5, COUNTRY_NAME=Германия, CAR_MODEL_NAME=Поло
это говорит о том, что модель " Fox "называется" Fox "в США, но та же модель автомобиля называется" Polo " в Германии (не помню, действительно ли это так).
НФ2 нарушается, потому что название страны не зависит от модели автомобиля и идентификатора страны, но только по ID страны.
решение: чтобы выполнить NF2, переместите COUNTRY_NAME
в отдельную таблицу "страна" со столбцами COUNTRY_ID
(первичный ключ) и COUNTRY_NAME
. Получение результирующего набора включая название страны, вам нужно будет соединить две таблицы с помощью соединения.
КF3
скажем, у вас есть таблица с этими столбцами, выражающая климатические условия государств:
-
STATE_ID
(тип varchar, первичный ключ) -
CLIME_ID
(внешний ключ, идентификатор климатической зоны, такой как" пустыня"," тропический лес " и т. д.) -
IS_MOSTLY_DRY
(bool)
nf3 нарушается, потому что IS_MOSTLY_DRY зависит только от CLIME_ID (давайте хотя бы предположим это), но не на STATE_ID (первичный ключ).
решение: чтобы выполнить NF3, поместите столбец MOSTLY_DRY
в таблицу климатических зон.
вот некоторые мысли относительно фактической таблицы, приведенной в упражнении:
я применяю вышеупомянутые правила NF, не оспаривая столбцы первичного ключа. Но на самом деле они не имеют смысла, как мы увидим позже.
- NF1 не нарушается, каждая ячейка имеет только одно значение.
- nf2 нарушается EMP_NM и всеми номерами телефонов, потому что все эти столбцы не зависят от полного первичного ключа. Все они зависят от EMP_ID (PK), но не от DEPT_CD (PK). Я предполагаю, что номера телефонов остаются неизменными, когда сотрудник переходит в другой отдел.
- NF2 также нарушается DEPT_NM, потому что DEPT_NM не зависит от полного первичного ключа. Это зависит от DEPT_CD, но не от EMP_ID.
- nf2 также нарушается все столбцы навыков, потому что они не относятся к отделу, а только к конкретному сотруднику.
- nf3 нарушается SKILL_NM, потому что имя навыка зависит только от кода навыка, который даже не является частью составного первичного ключа.
- SKILL_YRS нарушает NF3, потому что это зависит от члена первичного ключа (EMP_ID) и члена не первичного ключа (SKILL_CD). Таким образом, он частично зависит от атрибута без первичного ключа.
так что если вы удалите все столбцы, которые нарушите NF2 или NF3, останется только первичный ключ (EMP_ID и DEPT_CD). Эта оставшаяся часть нарушает данные бизнес-правила: эта структура позволит сотруднику работать в нескольких отделах одновременно.
давайте рассмотрим его с расстояния. Ваша модель данных - о сотрудниках, отделах, навыках и отношениях между этими сущностями. Если вы нормализуете это, вы получите одну таблицу для сотрудников (содержащую DEPT_CD в качестве внешнего ключа), одну для отделы, один для навыков, а другой для отношений между сотрудниками и навыками, удерживая "годы навыков" для каждого кортежа EMP_ID и SKILL_CD (мой учитель назвал бы последний "ассоциативной сущностью").
глядя на первые две строки в таблице
и глядя на то, какие столбцы помечены " PK " в этой таблице,
и предполагая, что " PK "означает"первичный ключ",
и глядя на значения, которые появляются для этих двух столбцов в этих двух строках,
Я бы рекомендовал вашему профессору убраться из базы данных преподавания и не возвращаться, пока он не получил получил надлежащее образование по этому вопросу.
Это упражнение нельзя воспринимать серьезно потому что сама постановка задачи содержит безнадежно противоречивую информацию.
(заметьте, что, как следствие, просто нет такого понятия, как "хороший" или "Правильный" ответ на этот вопрос !!!)
еще один упрощенный ответ.
в реляционной таблице 3NF каждое неключевое значение определяется ключом, всем ключом и ничем, кроме ключа (так что помогите мне Codd ;)).
1NF: ключ. Это означает, что если указать значение ключа и именованный столбец, то на пересечении строки и столбца будет не более одного значения. Многозначность, как и ряд значений, разделенных запятыми, запрещена, потому что вы не можете получить непосредственно значение только ключ и название столбцов.
2NF: весь ключ. Если столбец, который не является частью ключа, определяется собственным подмножеством ключевых столбцов, то 2NF нарушается.
3NF: и ничего, кроме ключа. Если столбец определяется некоторым набором неключевых столбцов, то 3nf нарушается.
3NF удовлетворяет только в том случае, если он находится во 2-й нормальной форме и не имеет транзитивной зависимости, и все неключевые атрибуты должны зависеть от первичного ключа.
транзитивных зависимостей: R=(A,B, C). A - >B И B - > C ЗАТЕМ A - >C