什么是一个吻(保持简单,愚蠢)的方式来记住什么是Boyce Codd标准形式,以及如何采取一个非标准化的表格和BCNF它?
Wikipedia‘s信息:对我帮助不大.
什么是一个吻(保持简单,愚蠢)的方式来记住什么是Boyce Codd标准形式,以及如何采取一个非标准化的表格和BCNF它?
Wikipedia‘s信息:对我帮助不大.
Chris Date的定义其实很好,只要你理解他的意思:
您的数据必须分解成独立的、不同的属性/列/值,这些属性/列/值不依赖于任何其他属性.你的全名是一个属性.你的生日是一个属性.您的年龄不是一个属性,它取决于当前日期,而当前日期不是您的生日的一部分.
每个属性都是单个事实,而不是事实的集合.更改属性中的一位会更改整个含义.你的生日是事实.你的全名是事实吗?嗯,在某些情况下是这样的,因为如果你改了姓,你的全名就不一样了,对吗?但是对于家族学家来说,你有姓和姓,如果你改变你的姓氏,你的姓氏不会改变,所以它们是不同的事实.
有一个属性是特别的,它是一把 keys .键是一个属性,对于数据中的所有信息必须是唯一的,并且永远不能更改.您的全名不是关键字,因为它可以更改.您的社会保险号不是密钥,因为它们会被重复使用.您的SSN加生日不是关键字,即使组合永远不能重用,因为属性不能是两个事实的组合.GUID是一把 keys .您递增且从不重复使用的数字是一个键.
键本身必须足以[and necessary!]来标识您的值;您不能让不同的键表示相同的数据,也不能使键列的子集足以标识事实. 假设您有一个地址簿,其中包含GUID键、名称和地址值.如果相同的名称代表不同的人并且不是"相同的数据",则可以使用不同的键出现两次. 如果会计部的玛丽·琼斯改名为玛丽·史密斯,销售部的玛丽·琼斯也不会改名. 另一方面,如果玛丽·史密斯和约翰·史密斯有相同的街道地址,而且确实是同一个地方,这是不允许的.您必须使用街道地址和新密钥创建一个新的键/值对.
您也不允许将这个新的单一街道地址的键用作通讯簿中的值,因为现在同一个街道地址键将被表示两次.
除了识别你的价值观的 keys 之外,别无他物.例如,如果允许您输入"泰姬陵"的地址(假设只有一个),则不允许在同一记录中输入城市值,