范式
大概有8种范式,遵循前三个一般数据库就没有问题
1、列不能再拆分 #比如一列中有姓名,又有性别,就是没有遵循这一条范式
2、在第一范式的基础上,1、必须有主键(提示:主键可以是表中的多个列),2、非主键列必须完全依赖主键,不能是依赖主键的一部分,比如有两个主键,有非主键列只依赖其中一个主键,那么就不遵循范式2,这个列应该拆分成另一个表,比如:
| order_id | product_id | price | quantity | product_name |
|111 | 11 | 123 | good | pen|
order_id 和 product_id是两个主键,
product_name、price只依赖主键product_id,却不依赖order_id,不符合范式2,应该拆分:
| order_id | product_id | quantity |
|111 | 11 | 4|
product_id | price | product_nam
3、在范式2基础上,另外非主键必须直接依赖主键,不能存在传递依赖。即不能存在:非主键列a依赖于非主键b,非主键列b依赖于主键的情况。
多重主键应用:
比如这种时候
商品品牌 商品型号
诺基亚 920
三星 NOTE2
诺基亚 8088
比如这样商品品牌可能有重复,都是诺基亚,但是诺基亚厂商生产的商品型号是不会重复的
也比如,可能好多品牌都有920这个型号,但是一个品牌只有一个920的型号
关系型数据库设计:
多对一时,在多的表中添加字段,对应一
多对 多时,新建一个表,在其中存储前两个表的主键,这个表叫做聚合表,它用到了几个表的信息