需要数据库设计规范化帮助 (5nf)
Posted
技术标签:
【中文标题】需要数据库设计规范化帮助 (5nf)【英文标题】:Database design normalization help needed (5nf) 【发布时间】:2011-03-25 20:29:38 【问题描述】:你们能告诉我如何以第 5 范式获得这个 ERD 吗?昨天我们做了一个课堂作业,我们有一个真正的客户进来向我们解释他的需求,我的团队想出了这个模型可以更好地理解它,因为下周我们将进行另一组 ERD,必须在 5nf 中,事情是我不知道从哪里开始,这本书没有让我明白。你们能帮帮我吗Erd Model http://img534.imageshack.us/img534/2118/capturekk.jpg
新信息“假客户需求”
客户有 2 个部门“实验室 1, 实验室 2",从那里订购医疗物品 他,像手套和pi宠物等。 部门已经发展壮大,他 想要跟踪里面有什么 盘点供应商正在销售的东西 谁有最好的价格和成本 中心它来自。
他的方式 解释说,订购的物品是 一个人去找他并要求 然后他写下什么实验室 该人来自该人的姓名 以及要计费的成本中心。但是他 还想跟踪已经发生的事情 按日期购买和有什么库存 以及必须买什么。他还 举了一些用户想要的例子 来自特定供应商的物品 可能没有最优惠的价格,他 还收到了一些目录 邮件也有他想要的价格 跟踪。
如果内容混乱,我深表歉意,但这全凭记忆。
【问题讨论】:
有什么让你觉得这在 5NF 中还没有? 在 Wikipedia 上研究这些形式的定义让我怀疑确实如此,尽管我会感兴趣地关注讨论。 请澄清这个模型背后的业务逻辑:它是一个采购跟踪系统吗,这是客户对他们向各个供应商下的订单的看法,而不是更常见的供应商跟踪订单的情况客户。 让我添加他在课堂上经历的“假”客户要求。我说假的,因为他是教授的丈夫。 这个人从他告诉我们的内容中订购了 2 个实验室的用品,所以两者兼而有之。它可以进一步扩展,但是这个模型是在一个半小时的课上完成的,教授说它很好,所以这正是我们上交的。这个模型是在我们审查 5nf 上的材料之前完成的,这就是我的问题来自。 【参考方案1】:我要直截了当地说,您当前的架构实际上不具备任何 5NF 资格。引用***的话,它说大多数 4NF 表已经符合 5NF:
仅在极少数情况下使用 4NF 表不符合 5NF。这些 是复杂的情况 现实世界的约束 属性值的有效组合 在 4NF 表中并不隐含 该表的结构。如果这样一个 表未归一化为 5NF,则 维持逻辑的负担 内部数据的一致性 桌子必须部分由 申请负责 插入、删除和更新 它;并且存在更高的风险 表中的数据将 变得不一致。相比之下, 5NF 设计排除了 这样的不一致。
http://en.wikipedia.org/wiki/Fifth_normal_form
也许目的不是让您的数据库成为 5NF,而是了解它与 5NF 相比的结构,并就为什么它可能已经在 5NF 提出论据。
更新:从 cmets 读取某种形式的共识,看来您的设计可能已经在 5NF 中,无论是设计使然还是之前的规范化过程中的意外。
【讨论】:
但它能否进一步改进是我真正想知道的,当我们为这张图表发疯时,我正在领导团队,主要是我的输入构成了 ERD,但这主要是偶然的参考我们之前在课堂上复习过的一些幻灯片。 好的,所以我的主要问题是你会做不同的事情吗?如果是这样,你会怎么做才能使它成为一个可靠的 5nf 设计。 对我来说看起来足够可靠 - 您已经将相关数据(即具有属性的实体)聚合到它们自己的表中,您已经拆分了多对多。我认为您需要一个更复杂的结果集来演示 5NF。查看 wiki 条目,那里显示的示例非常具体。我认为目前的设计很好——如果不是,那么讲师可以指出任何不足。【参考方案2】:免责声明:在不了解您的业务逻辑的情况下,我可能对以下一些建议完全错误。
好的,我在您的数据库架构中看到了一些东西。
-
您的成本中心表看起来既是查找表又是关联表。因此,如果您有一定数量的成本中心,比如说 5 个,但有 1000 个用户,那么这个表将有 5000 条记录,它们都存储成本中心名称(这是假设成本中心分配对每个用户来说不是唯一的)。您可能希望将用户关联拆分到一个单独的表中,该表具有自己的 costcenterId 和 userId 的 PK 和 FK。
您的库存表,我假设它存储了一个项目的现有库存数量,应该只需要一个现有数量,不确定描述是什么。如果描述不是每个项目库存的唯一描述,您可能希望将其拆分为它自己的查找表并在库存表中引用它。
您将“lineQuantity”存储在供应商表中。这个专栏是干什么用的。听起来它以某种方式与特定订单相关(购买的商品数量?)如果是这样,您将希望将其拆分到自己的表格中,并将其与订单而不是供应商相关联。不知道 lineQuantity 到底是什么,尽管这个建议可能完全错误。
最后一个建议不确定这对您的班级是否重要。您将所有数据类型定义为 CHAR(10),您可能希望将这些数据类型更改为您将用于数据库的实际数据类型。
【讨论】:
以上是关于需要数据库设计规范化帮助 (5nf)的主要内容,如果未能解决你的问题,请参考以下文章
数据库中的1NF、2NF、3NF、BCNF、4NF、5NF是怎么回事?
一看就懂的数据库范式介绍(1NF,2NF,3NF,BC NF,4NF,5NF)