什么是一个吻(保持简单,愚蠢)的方式来记住什么是Boyce Codd标准形式,以及如何采取一个非标准化的表格和BCNF它?

Wikipedia‘s信息:对我帮助不大.

推荐答案

Chris Date的定义其实很好,只要你理解他的意思:

Each attribute

您的数据必须分解成独立的、不同的属性/列/值,这些属性/列/值不依赖于任何其他属性.你的全名是一个属性.你的生日是一个属性.您的年龄不是一个属性,它取决于当前日期,而当前日期不是您的生日的一部分.

must represent a fact

每个属性都是单个事实,而不是事实的集合.更改属性中的一位会更改整个含义.你的生日是事实.你的全名是事实吗?嗯,在某些情况下是这样的,因为如果你改了姓,你的全名就不一样了,对吗?但是对于家族学家来说,你有姓和姓,如果你改变你的姓氏,你的姓氏不会改变,所以它们是不同的事实.

about the key,

有一个属性是特别的,它是一把 keys .键是一个属性,对于数据中的所有信息必须是唯一的,并且永远不能更改.您的全名不是关键字,因为它可以更改.您的社会保险号不是密钥,因为它们会被重复使用.您的SSN加生日不是关键字,即使组合永远不能重用,因为属性不能是两个事实的组合.GUID是一把 keys .您递增且从不重复使用的数字是一个键.

the whole key,

键本身必须足以[and necessary!]来标识您的值;您不能让不同的键表示相同的数据,也不能使键列的子集足以标识事实. 假设您有一个地址簿,其中包含GUID键、名称和地址值.如果相同的名称代表不同的人并且不是"相同的数据",则可以使用不同的键出现两次. 如果会计部的玛丽·琼斯改名为玛丽·史密斯,销售部的玛丽·琼斯也不会改名. 另一方面,如果玛丽·史密斯和约翰·史密斯有相同的街道地址,而且确实是同一个地方,这是不允许的.您必须使用街道地址和新密钥创建一个新的键/值对.

您也不允许将这个新的单一街道地址的键用作通讯簿中的值,因为现在同一个街道地址键将被表示两次.

and nothing but the key

除了识别你的价值观的 keys 之外,别无他物.例如,如果允许您输入"泰姬陵"的地址(假设只有一个),则不允许在同一记录中输入城市值,

所以帮帮我,科德.

Database相关问答推荐

如何避免在模式更改时重新同步微服务数据库之间的整个表?

在多组MongoDB中查找最新文档的有效方法

优雅地处理 EJB/JPA 环境中的约束冲突?

MySQL解释更新

Followers/following 关注者表数据库 struct

多少个外键才算太多?

nodejs和数据库如何通信 ?

在 sql server 中存储持续时间(时间跨度)

使 H2 将引用的名称和未引用的名称视为相同

不可重复读与脏读的区别

customer客户表的数据库 struct ,每个客户有很多订单,每个订单有很多商品

从 CSV 文件填充 Android 数据库?

postgreSQL 同时将列类型从 int 更改为 bigint

如何在实体框架中使用字符串属性作为主键

使用 C3P0 的 JDBC 连接池

SQL - 如何使用 MS SQL 2008 R2 备份数据库并导出为 MDF 文件

为什么 OODBMS 不像 RDBMS 那样普遍?

在具有所需 ForeignKey 引用的 Django (1.8) 应用程序之间移动模型

数据库 EAV 优点/缺点和替代方案

在两列之间 Select 最近的日期