Нормализация базы данных - PullRequest
1 голос
/ 13 января 2011

Мне дали задание нормализовать этот набор данных:

COURSE=(CourseID, CourseName, CourseDuration, CourseFee{
    DelegateID, DelegateName, DelegateAddress, EventID, EventName, VenueID, VenueName, VenuePrice, BookingID, BookingType, BookingDate
})

Сценарий - это ИТ-компания, которая проводит короткие учебные курсы в различных отелях по всей стране, причем каждое мероприятие проводится одним или несколькими докладчиками (следовательно, BookingType - делегат или докладчик, если докладчик не взимает плату за бронирование). Событие - это просто пример курса, проходящего в определенном месте. Цена VenuePrice относится к стоимости дополнительной кровати и завтрака в отеле в течение прошедших ночей

Вот что я придумал для 3NF:

COURSE=(CourseID, CourseName, CourseDuration, CourseFee)  
DELEGATE=(DelegateID, DelegateName, DelegateAddress)  
EVENT=(EventID, VenueID*, CourseID*, EventName, EventDate)  
BOOKING=(BookingID, DelegateID*, EventID*, BookingDate, BookingType)  
VENUE=(VenueID, VenueName, VenuePrice)  

Я хотел бы знать, является ли это вообще точным, и если нет, возможно, направляющей рукой в ​​правильном направлении?

Спасибо

1 Ответ

3 голосов
/ 15 января 2011

На каком основании вы думаете, что это в 3NF?

Давайте рассмотрим очень простой пример, Course.Где именно, если у него функциональная зависимость, от чего ключ?Как CourseName может зависеть от CourseId, когда CourseDuration и CourseFee зависят от CourseName?

То же самое с остальными таблицами;Event немного сложнее, имеет еще несколько ошибок.

Вы не можете нормализовать или достичь 3NF, когда ваша отправная точка - наклеить ID на все, что движется.

Нет.Сначала нормализуйте данные .Достигнуть 3NF.Я могу понимать CourseCode или ShortName как то, что пользователь может использовать для идентификации курса, но не Id.

После этого, если и только если вам нужно, добавить столбец Id и дополнительный индекс .

...