mysql设计三范式
一、三范式
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以此类推。一般说来,数据库只需满足第三范式(3NF)就行了。所以这里就只记录三范式相关的知识。
-
1NF:字段不可分,每个字段是原子级别的,上节中看到第一个字段为ID,它就是ID不能在分成两个字段了,不能说我要把这个人的ID、名称、班级号都塞在一个字段里面,这个是不合适的,对以后的应用造成很大影响;
-
2NF:有主键,非主键字段依赖主键,ID字段就是主键,它能表示这一条数据是唯一的,有的读者朋友记性很好,“unique”表示唯一的、不允许重复的,确实它经常会修饰某个字段,保证该字段唯一性,然后再设置该字段为主键;
-
3NF:非主键字段不能相互依赖,这个怎么理解呢,比如student表,班级编号受人员编号的影响,如果在这个表中再插入班级的班主任、数学老师等信息,你们觉得这样合适吗?肯定不合适,因为学生有多个,这样就会造成班级有多个,那么每个班级的班主任、数学老师都会出现多条数据,而我们理想中的效果应该是一条班级信息对应一个班主任和数学老师,这样更易于我们理解,这样就形成class表,那么student表和class表中间靠哪个字段来关联呢,肯定是通过“classNo”,这个字段也叫做两个表的外键,后面讲约束的时候老韩会重点讲这个,读者朋友先有个大致了解;
二、命名规范
前面Java的章节中老韩讲了命名规范,一种是驼峰命名法如“classNo”,一种是下划线命名法如“class_no”,下划线命名法是数据库中常用的命名法。如果我们在项目中需要创建大量数据表,在建表之前首先要制作一个命名规范。
如我要在OA系统(网上审批系统)中做表单,来绑定数据表,我在建表的时候可以以公司名首字母缩写开头如公司-GS,后面跟部门名称缩写如综合部-ZHB,后面跟流程名称如出差申请单-CCSQD组合起来就是GS_ZHB_CCSQD这样就能形成表名的规范管理,一目了然。
在系统建设的同事要做好数据字典,就是数据表介绍,与表单的对应关系,字段内容备注等。表中列名的命名最好使用名词,如商品就用goods,不行就拼音,大小写最好区分开,在windows环境下是大小写不敏感的(默认不区分大小写),但是linux是大小写敏感的(默认区分大小写,可以设置大小写不敏感),表名写成小写就是报错,老韩之前在北京上班时候做产品升级的时候就载在这一次,血的教训希望能给朋友们一点收获。