第三章 多表操作1(建表三范式)
1 为什么需要用多表保存数据
(1) 数据库中的不同的表一般对应不同的实体,不同的实体具有不同的属性,如果将所有的表都汇总成一张表,则需要将所有的属性都集合在一起,不管哪个实体有没有,然后在没有此属性的实体赋值时,赋值为空,这严重浪费了磁盘的空间吧。
(2)数据库中每张表都存储一定的记录,若将所有的记录都汇总成一张表,你查询的时候,速度将会非常慢,数据库查询的时候,你给它表名,它根据表名找到此表,然后一条一条的查询记录,但若都集中的一张表中,那此表的记录将时原来分开表中记录的n多倍,那得查询多少时间啊??
所以才产生见表的规范 建表三范式
2 建表三范式
第一范式:消除组中的重复,也就是说列中是否存储了其他列中的信息(字段不可再分)
比如:
1 设计的表要有主键
比如说 有张表示 有这么几个字段 name address 如果在表中有几条记录是一致的,假设出现2个王武,地址也一样,就会出现数据的冗余。
2 列不可分,和重复。
比如说 有张表 user 只有一个字段 为userinfo 保存数据是 张三,23,北京市 ,带来的问题就是,不方便查询和维护,建议有用3个字段来表示。但是实际问题,实际分析。
第二范式:消除部分依赖列,也就是说是否有依赖于一部分主键的列 (非主键字段完全依赖主键字段)
比如:
这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关
合理的设计如下:
![20190506180024620.png][]
第三范式:消除非依赖列,是否有依赖于非主键的列 (消除传递依赖)
比如:
这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必在订单信息表中多次输入客户信息的内容,减小了数据冗余。
总结:
归结起来3句话: 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非主键字段不能相互依赖;
还没有评论,来说两句吧...