为了理解数据库规范化,我一直在阅读Connolly和Begg的“数据库系统:设计、实现和管理的实用方法”(第14章)。我现在更好地理解了三种数据库规范化形式:
我还理解三个更新异常:
我现在很难理解的是如何将两者联系在一起。例如,哪种不同的形式帮助(S)修复插入异常?其他异常情况也是如此。理想情况下,我想知道两组之间的映射关系,以及为什么这些形式修复了某些异常。
这是我在这里的第一个问题,我在谷歌和这个网站上搜索,试图先找到答案,但没有结果。
谢谢。
发布于 2018-01-04 16:05:30
1NF基本上只是“不要在一列中保存过多的数据”,所以我认为2NF和3NF是所有3种数据库异常的主要修复方法,因为2NF和3NF都涉及将项分解到自己的表中:
enrollment表(在其他地方都不存在),那么如果没有至少一个相应的学生,就不能输入新的(空的)课程(因为该表是注册情况的记录)。因此,应用2NF并为classes、students创建单独的表,并将原始的enrollment表链接到ClassID和StudentID。现在您可以进入没有学生的新班级和没有班级的新学生。enrollment表的每一行包含学生的全部详细信息和他们注册的班级的全部详细信息,那么删除类的最后一个注册学生将删除该类的最后一部分信息。解决方案是相同的,应用2NF创建单独的表,这样学生就可以注册或不注册,而不会丢失课堂信息。classes表)被更改。请注意,1NF在您的过程中仍然起着一定的作用,因为它意味着您不能尝试通过将整个注册学生列表塞进单个字段,或者添加student1、student2、student3字段或诸如此类的内容来解决问题。
我们可以提出类似的例子,其中的因素是3NF而不是2NF:如果每个“学生”都有一名教师顾问(并且一些顾问分配给多名学生),这可能不是我们的学生表的关键部分,但它是“依赖属性”,并且可能导致与上面相同的一些问题。这样教师顾问就可以分成自己的桌子了。
我发现一些有用的资源:
发布于 2018-01-04 17:20:10
我会拿出我学过的例子。1Nf全部是将重复组分离成不同的表,它的所有属性都应该是原子的。
让我们假设我们有一个包含以下属性的表。Purchase_order_No,Purchase_date,Emp_code,Supplier_Name,Supplier_No,Part_No Part_description,Part_Quantity
现在,表不能进一步分解,但异常可以继续存在。我们不能形成完全规范化的数据表。希望这能让你清醒。
https://dba.stackexchange.com/questions/194631
复制相似问题