Я не думаю, что там достаточно информации, чтобы определить, как достичь 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
, и мы можем выполнить наше обновление в одной строке.
Дополнительную полезную информацию можно найти по следующим ссылкам: