Преобразование 3NF в BCNF - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь изменить свою таблицу с третьей нормальной формы на BCNF, но не уверен, что полностью понимаю концепцию.

Мне удалось пройти через 1NF, 2NF и 3NF (я думаю), но мне нужна помощь в получении это в BCNF.

У меня

**Students Table**

ID -- First Name -- Last Name -- Age
1  --   Joe      --   Jugg    -- 22
2  --   Ben      --   March   -- 23
3  --   Sally    -- Rainbow   -- 19



**StudentCourse Table**

ID -- Course Title -- Grade
1  -- Math         -- A
1  -- Physics      -- B
2  -- Math         -- C
3  -- Music        -- A


**Courses Table**

Course Title -- Course Fee -- Qualification -- Lecturer
Math         -- £1900      -- Advanced Level -- 2
Physics      -- £2300      -- Diploma        -- 1
Music        -- £1200      -- Certificate    -- 3



**Lecturers Table** 


Lecturer ID -- Lecturer Name
1           --  James Thomas
2           -- Harry Todd
3           -- Rachel Adam

Я ценю ЛЮБУЮ помощь и буду признателен, если вы сможете объяснить мне эту концепцию, чтобы я мог понять, спасибо.

1 Ответ

0 голосов
/ 08 апреля 2020

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

Глядя на данные, мы можем постулировать функциональные зависимости для целей рабочего примера. Это не означает, что ответ, который я даю, является правильным, но даст некоторое понимание, учитывая предположения.

Предположим, что:

  • Названия курсов, преподаваемые конкретным лектором, всегда преподаются на одном и том же уровне квалификации
  • Все сертификаты имеют плату в 1200 фунтов стерлингов
  • Все квалификации повышенного уровня имеют плату в размере £ 1900
  • Все дипломы имеют плату в размере 2300 фунтов стерлингов

Предположим также, что таблица Courses имеет следующие строки (обратите внимание на дополнительную четвертую строку):

Course Title -- Course Fee -- Qualification -- Lecturer
Math         -- £1900      -- Advanced Level -- 2
Physics      -- £2300      -- Diploma        -- 1
Music        -- £1200      -- Certificate    -- 3
Music        -- £1900      -- Advanced Level -- 1

Здесь мы имеем случай двух функциональных зависимостей в таблице :

  • Ключ-кандидат № 1 = (Course Title, Lecturer) -> (Course Fee, Qualification)
  • Ключ-кандидат № 2 = (Qualification) -> (Course Fee)

Если мы хотим изменить плату за курс для повышения квалификации до £ 2000, то, поскольку нам нужно обновить две строки в таблице Courses, мы столкнемся с аномолией обновления - это нарушение BCNF. Нам нужно всего лишь обновить одну строку в таблице some .

Чтобы соответствовать BCNF, нам нужно создать новую таблицу Qualification, например:

Qualification  -- Course Fee
Certificate    -- £1200
Advanced Level -- £1900
Diploma        -- £2300

... и вместе с этой новой таблицей мы изменим таблицу Courses на следующую:

Course Title -- Qualification -- Lecturer
Math         -- Advanced Level -- 2
Physics      -- Diploma        -- 1
Music        -- Certificate    -- 3
Music        -- Advanced Level -- 4

Теперь мы встречаемся с BCNF, поскольку у нас больше нет второго ключа-кандидата ( Qualification -> CourseFee) в таблице Courses, и мы можем выполнить наше обновление в одной строке.


Дополнительную полезную информацию можно найти по следующим ссылкам:

...