如何设计数据库(包括 三范式)

简介: 如何设计数据库(包括 三范式)

一、字段设计规范

(1)主键不能只是bigint,应该是bigint unsigned


阿里的《JAVA开发手册》强制要求MySQL表的主键应为bigint unsigned类型


如此强制要求的原因和MySQL索引底层使用B+树有关,具体原因可以参考另外一篇博客(3条消息) 从B+树的角度聊一聊为什么阿里的《JAVA开发手册》强制要求mysql表的主键应为bigint unsigned类型_nrsc的博客-CSDN博客


(2) varchar的默认长度应设置为32,不要使用255(除非确定了字段长度很长)


(3)所有的字段都必须非空,要设置默认值,字符型的默认值为一个空字符值串,数字型的默认值为数值0


(4)所有的逻辑删除都要是软删除(可以设计一个用于标记删除的字段,正常情况下值为1,被删除时置为0),这是为了具有可回溯性


二、命名规则

(1)无论是表名还是字段名,都只能由数字、小写字母、下划线组成


(2)禁止出现数字开头,禁止两个下划线中间只出现数字


       命名案例如下:


       正例:getter_admin,task_config,level3_name


       反例:GetterAdmin,taskConfig,level_3_name


三、尽量满足第三范式

第一范式:关系中的每个属性都不可再分


如下就不符合第一范式

应当改为

第二范式:在满足第一范式的基础上,满足所有非主属性完全依赖于码

学生 课程 老师 教材 教室

(学生,课程)--确定--> 老师


(学生,课程)--确定--> 教材


(学生,课程)--确定--> 教室


因此(学生,课程)是一个码


老师、教材、教师都是非主属性


单独通过学生或单独通过课程,都不能确定老师(因为一个学生可能有很多个老师:语文老师、数学老师、英语老师...;一门课也会有多个老师任教),这样我们就说 老师(非主属性)完全依赖于 学生,课程(码)


同样的,单独通过学生或单独通过课程,也不能确定教室,教师(非主属性)完全依赖于 学生,课程(码)


但是,单独通过课程就能确定教材,不满足 课程这一非主属性完全依赖于码


这会造成 插入异常、删除异常、修改异常


插入异常:比如现在新增一门课程A,对应教材A,但学生此时还没有选课,那我们就没有办法把这条新课程的数据保存到表中


删除异常:比如到下学期的时候,语文课程的教材会从《语文教材(上)》改为《语文教材(下)》,这就造成了语文课上学期的教材就被覆盖了,以后要查看语文课上学期用什么教材就无法知道了


修改异常:如果那天语文教材从《语文教材(上)》换成《新语文教材(上)》,那就需要将所有的语文课的记录修改掉,修改的数据量过大


所以,问了避免上面三个异常,我们就需要将表设计为 第二范式


表1:

学生 课程 老师 教室

表2:

课程 教材

第三范式:在满足第二范式的基础上,消除非主属性对于候选码的传递函数依赖


看下面的表

学生 课程 老师 教师职称

该表是不存在非主属性对码的部分依赖的,单独的学生或课程都不能确定老师或教师职称,也就是满足 第二范式


但是(学生,课程) --确定--> (老师),同时 (老师) --确定--> (教师职称)

即 (学生,课程) --确定--> (老师) --确定--> (教师职称)


所以就存在 非主属性对于候选码的传递函数依赖,不满足 第三范式


不满足 第三范式,同样会 插入异常、删除异常、修改异常


包括 解决的办法也跟第二范式的解决办法类似


表1:

学生 课程 老师 教师职称

表2:


老师 教师职称
目录
相关文章
|
8天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
6天前
|
数据库
数据库-----范式判断
数据库-----范式判断
23 0
|
8天前
|
存储 关系型数据库 MySQL
【MySQL】数据库规范化的三大法则 — 一探范式设计原则
【MySQL】数据库规范化的三大法则 — 一探范式设计原则
|
8天前
|
移动开发 C#
数据库系统概论期末经典大题讲解(范式提升、求闭包、求主码)
数据库系统概论期末经典大题讲解(范式提升、求闭包、求主码)
151 0
|
8天前
|
关系型数据库 数据库
关系型数据库设计-6种范式
关系型数据库设计-6种范式
|
8月前
|
存储 大数据 关系型数据库
【数据库三大范式】让我们来聊一聊数据库的三大范式和反范式设计
数据库三大范式是指数据库设计中的规范化原则,它们分别是第一范式(1NF)第二范式(2NF)和第三范式(3NF)。第一范式(1NF)第二范式(2NF)第三范式(3NF)
|
8天前
|
存储 数据库
数据库设计三范式
数据库设计三范式
|
8天前
|
数据库
数据库三范式
数据库三范式
23 0
|
8天前
|
存储 数据库
数据库设计三范式
数据库设计三范式