Mysql学习笔记-ch3-数据库的三大设计范式

– 数据库的三大设计范式.sql

– 1.第一范式
– 1NF

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

create table student2(
id int primary key,
name varchar(20),
address varchar(30)
);

– -- 解决"incorrect string value"
alter table student2 convert to character set utf8mb4 collate utf8mb4_bin;

insert into student2 values(1,“张三”,“中国四川省成都市武侯区武侯大道100号”);
insert into student2 values(2,“李四”,“中国四川省成都市武侯区京城大道210号”);
insert into student2 values(3,“王五”,“中国四川省成都市高新区天府大道99号”);

mysql> select * from student2;
±—±-----±------------------------------------+
| id | name | address |
±—±-----±------------------------------------+
| 1 | 张三 | 中国四川省成都市武侯区武侯大道100号 |
| 2 | 李四 | 中国四川省成都市武侯区京城大道210号 |
| 3 | 王五 | 中国四川省成都市高新区天府大道99号 |
±—±-----±------------------------------------+
3 rows in set (0.00 sec)

– 字段值还可以继续拆分的,就不满足第一范式

create table student3(
id int primary key,
name varchar(20),
country varchar(30),
province varchar(30),
city varchar(30),
details varchar(30)
);
– -- 解决"incorrect string"
alter table student3 convert to character set utf8mb4 collate utf8mb4_bin;

insert into student3 values(1,“张三”,“中国”,“四川省”,“成都市”,“武侯区武侯大道100号”);
insert into student3 values(2,“李四”,“中国”,“四川省”,“成都市”,“武侯区京城大道210号”);
insert into student3 values(3,“王五”,“中国”,“四川省”,“成都市”,“高新区天府大道99号”);

mysql> select * from student3;
±—±-----±--------±---------±-------±--------------------+
| id | name | country | province | city | details |
±—±-----±--------±---------±-------±--------------------+
| 1 | 张三 | 中国 | 四川省 | 成都市 | 武侯区武侯大道100号 |
| 2 | 李四 | 中国 | 四川省 | 成都市 | 武侯区京城大道210号 |
| 3 | 王五 | 中国 | 四川省 | 成都市 | 高新区天府大道99号 |
±—±-----±--------±---------±-------±--------------------+
3 rows in set (0.00 sec)

– 范式,设计得越详细,对于某些实际操作可能更好,但是不一定都是好处。
address ->> country | province | city | details

– 2、第二范式 (下面两句话暂未理解)
– 必须是满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖于主键。
– 如果要出现不完全依赖,只可能发生在联合主键的情况下。

– 订单表
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,
customer_id int
);

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

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

– 分成三个表之后,就满足了第二范式的设计!!

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

create table myorder(
order_id int primary key,
product_id int,
customer_id int,
customer_phone varchar(15)
);
– phone 在上表 myorder 有传递依赖,应设置成如下,在表 customer中
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、付费专栏及课程。

余额充值