数据库规范化

时间:2011-01-13 10:30:07

标签: mysql database-design normalization

我被赋予了规范化这组数据的任务:

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

该场景是一家IT公司,在全国各地的酒店开设短期培训课程,每个活动由一个或多个演示者主持(因此预订类型 - 代表或演示者,如果演示者,则无需预订费用)。活动只是在特定地点运行的课程的实例。 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 个答案:

答案 0 :(得分:3)

您认为3NF的基础是什么?

我们来看一个非常简单的例子Course。究竟如果他功能依赖,关键是什么?当CourseNameCourseId依赖CourseDuration时,CourseFee如何依赖CourseName

与其他表相同; Event稍微复杂一点,还有一些错误。

当你的出发点是ID在所有移动的东西上时,你无法规范化或达到3NF。

没有。首先规范化数据。达到3NF。我可以将CourseCodeShortName理解为用户可用于识别课程的内容,但不能Id

之后,当且仅当您需要添加 Id列和附加索引时。