您的位置:首页 > 数据库

SQL Server数据库设计和高级查询(1)-三大范式

2013-11-06 12:14 260 查看
第一范式(1NF,Normal Formate)
第一范式的目标是确保每列的原子性,谈到原子的话,学过物理的我们一定知道,原子是最小的不可再分的单位,所以第一范式的意义就在于此,你所涉及的数据库表当中的字段,必须是不可再分的了。如果没列(或者每个属性)都是不可再分的最小数据单元(也可称为最小的原子单元),则满足第一范式。
例如:顾客表(姓名,顾客编号,地址……)。其中地址,还可以细分为 国家,省,市,区等,更多的程序甚至把姓名都系分为 “姓”和 “名”;
第二范式(2NF)
第二范式是在第一范式的基础上,更进一步,其目标是确保表中的每一列都和这张表的主键有关系。也就是说。如果一个关系满足第一范式,并且除了主键以外的其他列,都依赖于该主键,则满足第二范式。
例如:订单表(订单编号,产品编号,订购日期,价格…)该表主要是用来描述订单,所以将“订单编号”设置为主键,“订购日期”和“价格”都和“产品编号”有关联,但是“产品编号”和“订单编号”没有关联,即“产品编号”不依赖于“订单编号”主键列,该列应该从表中删除放在产品表中,这样的话订单表就只描述订单这一件事情了。
第三范式(3NF)
第三范式是在第二范式的基础上,更进一层,第三范式的目标是确保每一列都和主键有直接关系,而不是间接关系。如果一个关系满足第二范式,并且除了主键以外的所有列都不依赖于主键列,则满足第三范式。
为了更好的理解第三范式,需要根据Armstrong公理之一定义依赖传递,假设A、B和C是关系R的三个属性,如果A→B且B→C,则从这些函数依赖(FD)中,得出A→C,如上所述A和C是依赖传递
例如:订单表(订单编号,订购日期,顾客编号,顾客姓名…)初看这个表没有问题,没列都和主键列“订单编号”有关,再细看您会发现“顾客姓名”和顾客表的“顾客编号”列相关,“顾客编号”又和“订单编号”相关,最后经过依赖传递,“顾客姓名”列也和“订单编号列”相关。为了满足第三范式,应该去除“顾客姓名”列

谢谢观看学习,更多精彩,尽在我的我的博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息