mysql - 数据库规范化

标签 mysql database-design normalization

我的任务是规范化这组数据:

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

该场景是一家 IT 公司,在全国各地的多家酒店举办短期培训类(class),每个事件都由一名或多名主持人主持(因此 BookingType - Delegate 或 Presenter,如果是 Presenter,则无需预订费用)。事件只是在特定地点运行的类(class)的一个实例。 VenuePrice 是指酒店 field 的可选床位和早餐的费用。

这是我为 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)  

我想知道这是否完全准确,如果不准确,也许是正确方向的指导?

谢谢

最佳答案

您认为 3NF 的依据是什么?

让我们举一个非常简单的例子,Course。如果他的功能依赖性到底在哪里,在什么键上?当CourseDurationCourseFee依赖于CourseName时,CourseName如何依赖于CourseId > ?

与其余表格相同; Event 有点复杂,有更多的错误。

当您的出发点是在所有移动的东西上贴上 ID 时,您无法规范化或实现 3NF。

没有。首先规范化数据。实现 3NF。我可以将 CourseCodeShortName 理解为用户可以用来识别类(class)的东西,但没有 Id

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

关于mysql - 数据库规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679042/

相关文章:

php - 按 2 个 id 对输出进行分组

php - ubuntu MySQL root密码自动更改

mysql - 在 MySql 中循环,还是替代?

C#、SQL : Storing arbitrary user data in a database as serialized binary

mysql - 在 MySQL 中为给定数据库创建用户?

mysql - 设计数据库架构以支持 MYSQL 中的 Multi-Tenancy

sql - 数据库设计用户表拆分或单一

python - python中离散功率谱密度的正确归一化实际问题

excel - 如何在Excel中进行0到1标准化

database - 在数据库设计的逻辑设计阶段实现泛化?