Mysql 5

数据库设计

一、数据库的设计范式

1.第一范式 1NF
数据项(列,实体的属性) 应该具备不可划分的原子性

姓名 地址
张三 xx省xx市xx区xx门牌号

2.第二范式 2NF
所有非主键属性必须完全依赖于主键属性,不能部分依赖于主键属性(常见于联合主键)

多发生在关系表中

学号 课程号 考试分数 课程学分
001 c01 98 2
002 c02 65 3
003 c01 67 2

问题1 : 数据冗余,某个课程学分可能被记录多次
问题2:丢失数据,某个课程无人选课,学分记录丢失

课程号 课程名 课程分数
c01 sql 2
c02 java 3
c03 xxx 2

3.第三范式 3NF
满足前两个范式的前提下,要消除传递依赖
非主属性必须直接依赖于主属性,不通过其他属性传递依赖

学号 姓名 所在班级号 所在班级名
001 张三 cls01 java 1班
002 李四 cls02 java 1班
班级名先和班级号关联,再和学号关联,这也是不行的,违反了三范式

问题 1: 数据冗余,班级名被保存了很多次
问题 2: 数据确实,没有分配学生的班级,班级信息丢失

拆表

二、实体关系设计

1.一对一关系
两张表中的数据通过拥有相同的主键值一 一对应
理论上两张表的数据应该是同一个实体,因为各种原因将其拆分

2.一对多关系(多对一关系)
在n侧添加一个1侧的外键列来关联1侧的主键列

3.多对多关系
拆解成两队’‘一对多’'关系,借助一个关系表来实现
中间关系表:以两张表的主键结合为联合主键
两张多对多的表是是实现不了多对多的关系的,必须加上一个中间关系表

练习:
员工: 员工名(PK),员工名
项目:项目编号(PK),项目名

某位员工可以同时在不同的项目担任不同的角色

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值