标签:会同 课程 需求 完整 第三版 原则 架构 类型 维护
数据结构设计的目的:
示例表:记录每个学生所选课程信息,学号+课程名为主键
1、减少数据冗余,相同的不必要的数据在多个地方存在
如表中,多次出现学生姓名跟生日信息,课程学分都是冗余的
2、尽量避免数据维护中出现更新,插入和删除异常
3、节约数据存储空间
4、提高查询效率
数据库结构设计步骤:
数据库设计范式:
如下表:学生信息表
学号可以确定学生所在学院,那么学院信息又跟学生信息有了依赖关系,这就违反了第三范式。那么将学生信息表中只保留学院名称,单独创建一个学院信息表,存放学院信息,主键为学院名称。这样的话两张表就符合了第三范式需求。
反范式化:
使用空间换取时间,为了性能和读取效率的考虑适当的对数据库设计范式的要求进行违反,允许存在少量的数据冗余
范式化设计的优缺点:
优点:可以尽量减少数据冗余、范式化的更新操作比反范式化快、范式化的表通常比反范式化更小
缺点:对于查询需要关联多个表、更难进行索引优化
反范式化设计优缺点:
优点:可以减少表的关联、可以更好的进行索引优化
缺点:存在数据冗余及数据维护异常、对数据的修改需要更多的成本
物理设计:
根据所选择的关系型数据库的特点对逻辑模型进行存储结构设计
内容:定义数据库、表及字段的命名规范:遵循可读性、表意性、长名性原则
选择合适的存储引擎:根据各引擎的适用性,根据场景选择合适的存储引擎
为表中的字段选择合适的数据类型:当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型
实数类型比较:
VARCHAR和CHAR类型:
VARCHAR和CHAR存储空间是按字符并不是字节
VARCHAR类型的存储特点:
VARCHAR长度选择问题:
尽可能使用最小的符合需求的长度
varchar(5)和varchar(200)对于数据库来说是根据实际数据长度去分配内存,但MySQL在内存中对字符的使用是固定宽度,列宽度太长会消耗更多的内存。
VARCHAR适用场景:
CHAR类型的存储特点:
CHAR类型的适用场景:
日期数据类型:
DATATIME:
以YYYY-MM-DD HH:MM:SS[fraction]格式存储日期时间。DATATIME类型与时区无关,占用8个字节的存储空间。时间范围1000-01-01 00:00:00到9999-12-31 23:59:59
datetime = YYYY-MM-DD HH:MM:SS
datetime(6) = YYYY-MM-DD HH:MM:SS.fraction
TIMESTAMP:
依赖于所指定的时区,在行的数据修改时可以自动修改timestamp列的值
date和time:
date类型用于保存1000-01-01到9999-12-31之间的日期
time类型用于存储时间数据,格式为HH:MM:SS
date类型的优点:
存储日期时间数据的注意事项:
参考文献:
标签:会同 课程 需求 完整 第三版 原则 架构 类型 维护
原文地址:https://www.cnblogs.com/zhangbLearn/p/12096866.html