sql学习笔记4-三大范式

2020-10-10  本文已影响0人  风一样的我1

1、第一范式(1NF)

第一范式即表的字段必须原子性,不可以再分割。如果实体中的某个属性具有多个值时,必须拆分为多个属性。如在统计某商品的进销存信息时,不能将“销售”作为一个字段,因为销售包括了数量和金额甚至其它信息。
当然,表格字段设计得越详细,在做某些实际操作时会越方便,但也并不绝对。总之,范式应根据不同的业务场景而设计。

2、第二范式(2NF)

在满足1NF的前提下,除主键以外的任意一列,都完全依赖于主键(而不能是部分依赖)。

CREATE TABLE order(product_id int, product_name varchar(20),
                   customer_id int,customer_name varchar(20), 
                    PRIMARY KEY(product_id, customer_id));

上表中,product_id和customer_id都部分依赖于联合主键,因此不符合2NF。要满足2NF,需要作拆表的操作。

CREATE TABLE order(order_id int, product_id int,
                   customer_id int, 
                   PRIMARY KEY(order_int));
CREATE TABLE  product(product_id int, product_name varchar(20),
                   PRIMARY KEY(product_id));
CREATE TABLE  customer(customer_id int, customer_name varchar(20),
                   PRIMARY KEY(customer_id));

3、第三范式(3NF)

在满足2NF的 前提下,除开主键列的其他列之间不能有传递依赖关系。
如在以下的order表中,order_id为主键,但是customer_name还依赖于customer_id,造成了信息冗余,因此不满足第三范式。

CREATE TABLE order(order_id int, product_id int,
                   customer_id int,
                   customer_name varchar(20) 
                   PRIMARY KEY(order_int));

更改的方法是将customer_name添加到customer表中。

总结,1NF告诉我们在设计表时要尽量依据业务的需要进行设计(不能过粗也不能过细),2NF和3NF告诉我们只有主键能且完全决定其它属性。

上一篇 下一篇

猜你喜欢

热点阅读