mysql数据库的规范和性能之间的取舍

一、规范性

1、第一范式1NF(属性的原子性)

如:
学生表:学号、姓名、性别、出生年月日
用户表:id、姓名、性别、地址
如果认为最后一列出生年月日还可以再分成(年,月,日),它就不是一范式了;
如果认为最后一列地址还可以再分成(省,市,县),它就不是一范式了。

2、第二范式2NF(字段依赖主键的关系)

表:学号、课程号、姓名、学分
这个表明显写了两个事务:学生信息和课程信息
正确做法:
学生:Student(学号, 姓名);
课程:Course(课程号, 学分);

选课关系:StudentCourse(学号, 课程号, 成绩)
成绩依赖于学号和课程号,满足第二范式。如果再加入姓名字段就不对了,因为姓名只依赖学号

3、第三范式3NF(字段的冗余性)

要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖

表: 学号, 姓名, 年龄, 学院名称, 学院电话
因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

正确做法:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 电话)。

二、性能问题

有规范,但是也会存在一些性能的问题。熊掌与鱼,不可兼得。考虑到成本、用户体验,性能比规范更重要。
阿里数据库有个规范:
关联查询表不得超过三张

1、故意增加一些冗余数据(从多表查询变为单表查询)
2、故意增加计算列(从大数据量降低为小数据量的查询)
3、增加索引,需要创建索引树,这里就比较耗内存,用空间换时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值