请选择 进入手机版 | 继续访问电脑版

MySQL的那些事儿(三)范式原理

[复制链接]
苍野狼步 发表于 2021-1-2 19:42:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
数据库设计的三大范式
一、第一范式 1NF
形貌:数据库中所有字段都是不可分割的原子值。
字段值还可以拆分就不满足第一范式。固然,在实际开辟中,要视情况而定,是否拆分的更详细。
二、第二范式 2NF
形貌:必须是在满足第一范式的前提下,除主键外的每一列都必须完全依赖于主键。
如果要出现不完全依赖,只大概发生在团结主键的情况下。
比如说有这样一张订单表:
  1. create table order(     product_id int,     customer_id int,     product_name varchar(20),     customer_name varchar(20),     primary key(product_id,customer_id) );
复制代码
那么这张表就有一个问题:这张表的主键是product_id 和 customer_id 构成的团结主键,而product_name 只与 product_id 有关,customer_name 只与 customer_id 有关。可见,在这张表中,除主键以外的其他列,只依赖于主键的部门字段,因此这张表的设计不满足第二范式。
如何使其满足第二范式?
拆表
  1. create table order(     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) );
复制代码
如此,便满足第二范式。
三、第三范式 3NF
形貌:必须满足第二范式,且除主键外的其他列,不能存在通报依赖。
  1. create table order(     order_id int primary key,     product_id int,     customer_id int,     customer_phone varchar(11) );
复制代码
在上表中,customer_phone 依赖于 customer_id,而 customer_id 又依赖于 order_id ,这样便产生了通报依赖,应该把 customer_phone 放入 customer 表中。
  1. create table order(     order_id int primary key,     product_id int,     customer_id int ); create table customer(     id int primary key,     name varchar(20),     phone varchar(11) );
复制代码
 


来源:https://blog.csdn.net/ngq0273/article/details/112060621
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )