完整性约束主要表现在参照完整性和实体完整性 ;
实体完整性是用来约束表内数据完整性的,主要体现在对主键的约束上,即主键的唯一性约束并且不能为空,即每个主键只能引用唯一一条数据。
参照完整性是用来约束有关系的表之间数据的完整性的,简单可以描述为一个实体不能引用另外一个不存在的实体。
三大范式,简单来说:
第一范式,列的原子性。即列属性不可以再拆分为其他的属性。但是经常有些资料上提到,关系型数据库不存在此问题,我觉得也未必,因为如果你的表中有个ADDRESS的属性,而此时业务的关注点需要细分成省,市。那么此时这个字段的设计是否就违反了第一范式的约束呢。
第二范式,不存在对主关键字的部分依赖,此种约束只会存在于有联合主键的表中,即非主属性不能依赖于主关键字的一部分。满足此范式的前提是已经满足第一范式。
第三范式,即不存在非关键字段对任一候选关键字段的传递依赖,即每个字段必须直接依赖于主键。满足此范式的前提是已经满足第二范式。
为了实施参照完整性,在实际的sql执行中可以使用级联引用完整性约束来保证。
具体方案,可参阅:http://msdn.microsoft.com/zh-cn/library/ms186973.aspx。
实体完整性是用来约束表内数据完整性的,主要体现在对主键的约束上,即主键的唯一性约束并且不能为空,即每个主键只能引用唯一一条数据。
参照完整性是用来约束有关系的表之间数据的完整性的,简单可以描述为一个实体不能引用另外一个不存在的实体。
三大范式,简单来说:
第一范式,列的原子性。即列属性不可以再拆分为其他的属性。但是经常有些资料上提到,关系型数据库不存在此问题,我觉得也未必,因为如果你的表中有个ADDRESS的属性,而此时业务的关注点需要细分成省,市。那么此时这个字段的设计是否就违反了第一范式的约束呢。
第二范式,不存在对主关键字的部分依赖,此种约束只会存在于有联合主键的表中,即非主属性不能依赖于主关键字的一部分。满足此范式的前提是已经满足第一范式。
第三范式,即不存在非关键字段对任一候选关键字段的传递依赖,即每个字段必须直接依赖于主键。满足此范式的前提是已经满足第二范式。
为了实施参照完整性,在实际的sql执行中可以使用级联引用完整性约束来保证。
具体方案,可参阅:http://msdn.microsoft.com/zh-cn/library/ms186973.aspx。