数据库三大设计范式

本文介绍了数据库设计中的三大范式:第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。通过示例说明了每个范式的概念和应用,强调了如何消除数据冗余和提高数据一致性。1NF要求字段不可分割,2NF要求非主键列完全依赖主键,3NF则避免列间的传递依赖。通过范式理论,可以更好地进行数据库表结构设计,以适应实际开发需求。
摘要由CSDN通过智能技术生成

复习一下以前存在电脑上的笔记

数据库三大设计范式

1、第一范式 1NF

数据表中的所有字段都是不可分割的原子值

create table student(

	id int primary key,

	name varchar(20),

	address varchar(30)

);

insert into student values(1,'张三','中国四川省成都市武侯区武侯大道100号');

insert into student values(2,'李四','中国四川省成都市武侯区京城大道200号'); 

insert into student values(3,'王五','中国四川省成都市武侯区天府大道90号');

在student表中 address 字段实际储存的值还能继续拆分,不满足第一范式。

应改为:

create table student2(

	id int primary key,

	name varchar(20),

	country varchar(30),

	province varchar(30),

	city varchar(30),

	details varchar(30)

);

范式设计的越详细,对于某些实际操作可能更好,但是不一定都是好处。

最终与实际开发的需求来设计。

2、第二范式 2NF

在满足第一范式前提下,第二范式要求,除主键外的每一列都必须完全依赖与主键。

如果要出现不完全依赖,只可能发生在联合主键的情况

订单表:

create table myorder(
	product_id int,
    customer_id int,
    product_name varchar(20),
    customer_name varchar(20),
    primary key(product_id,customer_id)
);

问题:

除主键以外的其他列,只依赖与主键的部分字段

解决:

拆表

create table myorder(
	order_id int primary key,
    product_id int,
    cusomer_id int
);

create table product(
	id int primary key,
    name varchar(20)
);

create table customer(
	id int primary key,
    name varchar(20)
);

分成3个表后满足了第二范式的设计

3、第三范式 3NF

必须先满足第二范式,除开主键列的其他列之间不能有传递依赖关系

create table myorder(
	order_id int primary key,
    product_id int,
    cusomer_id int,
    customer_phone varchar(15)
);

在上述表中customer_phone虽然和order_id主键有关系,但是customer_phone还依赖于主键以外的cusomer_id,产生冗余,应该设计为

create table myorder(
	order_id int primary key,
    product_id int,
    cusomer_id int,
);

create table customer(
	id int primary key,
    name varchar(20),
    phone varchar(15)
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值