实体
客观存在并可以被区别的事物。事物可以是看得到、摸得着的,比如一个建筑、一个人;也可以是虚拟的,比如老师与学校之间的关系
属性
实体的一个特性,称为一个属性。属性是一个逻辑上的概念,比如“性别”是“人”的一个属性。在关系型数据库中,属性是一个物理概念,一个属性对应一列
记录
表中的一行
分量
记录的某个属性的值
键
表中,可以唯一标识一条记录、且其任何真子集都不能再标识的某个属性或属性组。如果有不止一个键,那么都叫做候选键。可以从候选键中选出一个主键
外键
如果一个属性或属性组不是键,但是它是 别的表的键 ,则称其为外键
主属性
如果一个属性 出现在了 任意一个 候选键 中,则称其为主属性
非主属性
如果一个属性 没有 出现在 任何 候选键 中,则称其为非主属性
1NF强调列的原子性,也就是一个列不能拆分成其它的几列。比如,姓名可以是一列,也可以分为姓和名两列,在一张人口统计表中,就需要将姓和名分开。
在1NF的基础上,必须有主键,并消除 非主属性 对 候选键 的 部分依赖。
比如,订单详情表OrderDetail(OrderId,ProductId,ProductName,ProductUnitPrice),其中:
那么主键应该是(OrderId,ProductId),但是 非主属性ProductName和ProductUnitPrice只依赖ProductId,而不依赖OrderId,也就是:非主属性并不完全依赖候选键,不符合2NF。此时应该拆成2个表:
在2NF的基础上,消除非主属性 对 候选键 的 传递依赖。
比如,订单表Order(OrderId,ConsumerId,ConsumerAddress,OrderState),其中:
ConsumerAdress依赖ConsumerId,ConsumerId依赖OrderId,也就是:非主属性并不直接依赖候选键,不符合3NF。此时,应该拆分成两个表:
在3NF的基础上,消除主属性 对 候选键 的 部分依赖 和 传递依赖。
比如,仓库表Storagehouse(仓库ID,管理员ID,存储物品ID,物品数量),其中:
所以,候选键是:(仓库ID,存储物品ID)和(管理员ID,存储物品ID),但是:
因此,不满足BCNF。此时,可以拆分成如下两个表: