表的设计:三范式(实际表的规则原则)power designer举例说明

参考文章:
https://blog.csdn.net/qq_16605855/article/details/75973026

1.口诀
多对多,三张表,关联表两外键
一对多,两张表,多的表加外键
一对一,主键共享,外键唯一
原则尽量避免数据冗余

2.理论
理论上要满足第三范式,但是在实际的开发过程中,有的时候会退到第二范式。
1.第一范式:满足每条巨鹿是唯一的,要有主键,每个列是原子的,不可在分的(相对的)
2.第二范式:在第一范式的基础上,消除对逐渐的部分依赖
3.第三范式:第二范式的基础上,消除传递依赖

示例一 第一范式

如图所示的表,是否满足第一范式,是否有数据冗余,如何修改表,使其规范化
在这里插入图片描述
不符合第一范式
(1)表中主键不唯一,修改王五学生编号为1003
在这里插入图片描述
(2)表中联系方式还可以再分为邮箱和电话两列,如下图:
在这里插入图片描述

示例二 多对多

如图所示,分析该表并作出修改,避免其数据的冗余
如图所示,在这里插入图片描述
分析老师和学生是多对多的关系,故拆分成三张表(学生表、教师表、学生教师关系表),如图所示
在这里插入图片描述
使用power designer可以自动生成物理数据模型,帮助建表,图为一句上图的ER图自动生成的数据库表单
在这里插入图片描述

示例三 一对多

如图所示,如何优化表格避免其冗余
在这里插入图片描述

在这里插入图片描述
由于学生和课程表为多对一的关系,所以生成两张表,学生表加外键,如图;
在这里插入图片描述

示例四 一对一

以登录系统为例,登陆时,需要账户表(用户名,密码,状态),用户表(用户真实姓名,电话…)很显然,一个用户对应一个账户,即一对一关系;他们可以合并成为一个表,但是为了方便管理(考虑查询速度,以及关系型数据库的特性。)另外为了对业务进行事务隔离操作,将其内容分为两个表表示。
(1)共享主键
见名思意,就是两张表共用主键,主键是一样的,相当于拆分了的一张表,各自保留ID作为主键
在这里插入图片描述
(2)外键依赖
在用户表中加入账户表中的ID作为外键,将两张表联系起来
在这里插入图片描述

示例五 空间换时间

假设某一购物网站,有商品明细表(id,name,type,typename,price)
在这里插入图片描述
商品种类表(id,typename)
在这里插入图片描述
那么每次查询,需要对两个表做冗余查询,,为了省事,用一张表来表示,这样空间上冗余了,但是查询时间上变快了
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值