1.为什么要规范建表
规范建表有助于厘清表与表之间的关系,列与列之间的联系,可以很好的理解当前库的具体作用。
上面的只是最基本的,深层次的原因是可以有效提高表与表进行关联或者单独查询时候的效率。
一般复杂的逻辑由于表设计的不合理,在进行表关联时候需要关联很多张表,每进行一次关联,数据库就需要消耗一定的时间去寻找匹配项。关联的越多,花的时间就越久。
2.如何规范建表
A.按主题对表进行划分
例如学生主题相关的,在建表的时候可以采用以下方式创建
CREATE TABLE STU.Students
(......)
其中STU就代表一个主题
B.表和列的命名的规范
表名在创建时需要做到见名知意,词汇之间用_隔开,使用驼峰式(首字母大写),且长度不宜超过30个长度。
例如要建立一个学生缴费表,可以采用如下方式:
CREATE TABLE STU.Students_Fee
(......)
这里的表名Students_Fee由词语学生(Students)和费用(Fee)组成,用_进行连接,单词的首字母都进行了大写,由12个字符组成。
C.字段类型统一定义
-
对于字符串类型,如果长度超过20个长度,一般定义为VARCHAR类型。低于20个的可以考虑使用CHAR类型,可以有效提高查询效率。
-
中文字段一般用VARCHAR类型,长度视情况而定。
-
涉及金额以及精度较高的使用DECIMAL(m,n)类型,其中m和n根据实际情况具体来定。不建议使用DOUBLE和FLOAT类型
-
判断类的可以直接使用INT类型来代替,如0代表否,1代表是
-
整形定义中不添加长度,比如使用INT,而不是INT(4)
-
尽可能不要使用IMAGE和TEXT类型
-
存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节
-
建议字段定义为NOT NULL,有NULL存在的列,可能会让索引失效。
D.尽量满足第三范式
其实第三范式的作用就是为了让表里的字段尽可能少存储几列,减少冗余。但是在实际开发生产中,很多人基本就是看心情建表。有的表可以冗余几列结果没有冗余,有的表需要拆分成几个表却将所有字段放在一个大表中,这是建表大忌。
在不知道如何建表更优的情况下,建议列数不要超过20列。最好能先画一个E-R草图,磨刀不误砍柴工,明确了逻辑之后建表其实很快且高效的。