为什么要有表设计,其实软件开发,说白了就是数据要以什么方式保存,又要以什么结构展示。
特别是复杂的系统设计,表设计变得更为重要,这涉及到性能、扩展等问题,涉及得不好,后续开发中就会越感痛苦。
下面以”学校班级”说明一般表设计的过程。
1.表设计中要思考的三要素
主体对象
涉及到的主体对象有:班级、老师、学生
对象间的关系
每个班级都有一个老师(班主任)
每个班级都有若干个学生
对象都有哪些信息项
班级:班级编号、班级名称、…
老师:老师编号、老师名称、老师性别、…
学生:学生编号、学生姓名、学生性别、…
2.具体表设计
基础对象表
对象关联关系表
3.第三范式
三范式:
1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;
解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;
虽然说表设计必须符合第三范式,但是有时候适当的冗余可以减少表查询次数。
例如将在班级表中加入老师对象,因为一般一个班级只有一个老师(班主任),即一对一的关系,所以我们可以这样设计班级表
这样设计后,”班级-老师表”就可以去掉了,因为我们将这个整合到班级表了。
#原本需要查询某个班级的老师(班主任)
#step 1
select 班级编号,班级名称 from 班级表 where 班级名称 = '软件开发1班'
#step 2
select 班级编号,老师编号 from 班级-老师表 where 班级编号 = 'step 1查询到的班级编号'
#step 3
select 老师编号,老师名称,老师性别 from 老师表 where 老师编号 = 'step 2查询到的老师编号'
#修改后
#step 1
select 班级编号,班级名称,老师编号,老师名称 from 班级表 where 班级名称 = '软件开发1班'
那么什么时候不能整合呢?当两个主体对象的关系为一对多,或者多对多关系的时候,就不能够将它们放在一起了,例如现在一个班级有两个老师(班主任),”软件开发1班”有两个老师,”张三”和”赵六”
4.技巧
每个表都创建一个主键id,类型为int(11),并设置为自增AUTO_INCREMENT。
每个表都创建一个状态列state,类型为int(2),默认设置为1,用于筛选记录的有效性,代替物理删除delete,尽量保存数据记录。
适当的字段冗余,减少连表查询,在业务较简单时,尽量能做到单表查询,达到以空间换时间的目的。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93627.html