【问题标题】:Third Normal Form第三范式
【发布时间】:2013-12-13 11:57:28
【问题描述】:

我要求创建一个至少有 5 个表的图书馆系统的 3NF。根据我对标准化的理解,我做了这个。我只是想确认我的作品是否已经在 3NF 中标准化?或者我要怎么做才能在 3NF 中做到这一点?

【问题讨论】:

  • 我唯一推荐的就是清理你的列名。在所有表中使用 BookID。
  • 好的。这已经在 3NF 中了吗?
  • 如果没有功能依赖列表,就无法真正评估模式是否处于任何特定的正常形式。即使没有 FD,我也怀疑 BorrowedBooks 表可能存在问题。
  • 我认为这是一个学习练习,而不是真正的业务问题?首先,为自己准备一个可以绘制正确 ER 图的体面的建模工具。您的图表实际上没有用,因为它没有显示相关信息(缺少候选键、外键和基数)。没有看到模式应该满足的一组依赖项,没有人可以肯定地说关于 3NF。我猜这里有些东西可能违反了 3NF。但这只是基于列名的猜测。
  • 基于列名和我对键的解释的最佳猜测——是的。但这并不能使它成为一个好的设计。 {OtherAuthor} 邀请 NULLs 如果一本书有两个以上怎么办?自增键不是灵丹妙药,您需要候选键进行逻辑设计和考虑范式;然后稍后您可以在派生物理模型时添加代理键 (ID) - 例如{Book, Borrower, BorrowedDate}

标签: database-design normalization database-normalization


【解决方案1】:

据我所知,您并没有考虑到借款人不止一次地借书。此外,您需要有一个参考表来说明书籍和作者之间的 1:n 关系(一本书可以有超过 2 个作者,因此请删除 BookTitles 中的作者列)。创建此引用后,您应该处于 3NF。

根据复杂程度,学生的信息是否应该存储在学生表中,然后引用为“借款人”?

【讨论】:

  • should the student's information be stored in a student table, then referenced as "borrower? 是的,该课程可能与学生(而非借款人)相关的 N:M
  • '据我所知,你没有考虑到借书人不止一次借书' 在 BorrowedBooks 表中,borrower 不是唯一键。
猜你喜欢
  • 2021-11-21
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多