数据库的三大范式

1. 第一范式:1NF

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

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

insert into student2 values(1, '张三','中国浙江省余姚市阳明西路269号');
insert into student2 values(2, '李四','中国浙江省余姚市阳明西路169号');
insert into student2 values(3, '王五','中国浙江省余姚市阳明西路369号');

select * from student2;
+----+--------+--------------------------------------------+
| id | name   | address                                    |
+----+--------+--------------------------------------------+
|  1 | 张三   | 中国浙江省余姚市阳明西路269|
|  2 | 李四   | 中国浙江省余姚市阳明西路169|
|  3 | 王五   | 中国浙江省余姚市阳明西路369|
+----+--------+--------------------------------------------+

-- 字段还可以拆分,不满足第一范式。

create table student3(
    id int primary key,
    name varchar(20),
    country varchar(30),
    privence varchar(30),
    city varchar(30),
    detail varchar(30)
);

insert into student3 values(1, '张三', '中国', '浙江省', '余姚市', '姚明西路269号');
insert into student3 values(2, '里斯', '漂亮国', '麻省', '黑市', '地堡大道扛把子号');
insert into student3 values(3, '普京', '俄国', '西伯利亚', '莫斯科', '卢布廖夫卡信号');

update student3 set name='陆民' where id=1;
select * from student3;
+----+--------+-----------+--------------+-----------+--------------------------+
| id | name   | country   | privence     | city      | detail                   |
+----+--------+-----------+--------------+-----------+--------------------------+
|  1 | 陆民   | 中国      | 浙江省       | 余姚市    | 姚明西路269|
|  2 | 里斯   | 漂亮国    | 麻省         | 黑市      | 地堡大道扛把子号         |
|  3 | 普京   | 俄国      | 西伯利亚     | 莫斯科    | 卢布廖夫卡信号           |
+----+--------+-----------+--------------+-----------+--------------------

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,
    pruduct_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个表之后,满足第二范式。

3. 第三范式:3NF

必须先满足第二范式,第三范式要求:除开主键外的其他列,不能有传递依赖。

create table myorder(
    order_id int primary key,
    pruduct_id int,
    customer_id int,
    customer_phone varchar(15)
);

--- 改为:
create table myorder(
    order_id int primary key,
    pruduct_id int,
    customer_id int
);

create table product(
    id int primary key,
    name varchar(20),
    phone varchar(15)
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值