设计表结构规范及三范式

编写规范:

表名以及字段名用英文单词表示,多个单词之间用下划线(_)连接,最多3个英文单词,下划线的方式映射到实体类,属性会自动驼峰;如果命名直接以驼峰命名,映射到实体类中属性会全部变成小写。

首先遵从数据库三范式:

第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。 

第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。 

第三范式(3NF):首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

范式的优点:

1)范式化的数据库更新起来更加快;
2)范式化之后,只有很少的重复数据,只需要修改更少的数据;
3)范式化的表更小,可以在内存中执行;
4)很少的冗余数据,在查询的时候需要更少的distinct或者group by语句。
 
范式的缺点:
1)范式化的表,在查询的时候经常需要很多的关联,因为单独一个表内不存在冗余和重复数据。这导致,稍微复杂一些的查询语句在查询范式的schema上都可能需要较多次的关联。这会增加让查询的代价,也可能使一些索引策略无效。因为范式化将列存放在不同的表中,而这些列在一个表中本可以属于同一个索引。
 
反范式的优点:
1)可以避免关联,因为所有的数据几乎都可以在一张表上显示;
2)可以设计有效的索引;
反范式的缺点:
3)表格内的冗余较多,删除数据时候会造成表有些有用的信息丢失。
所以在设计数据库时,要注意混用范式化和反范式化。
 
冗余是空间换时间,重点在于权衡空间和时间
如果数据量一样,但数据类型更小的话,数据存放同样的数据就会占用更少的空间,这样检索同样的数据所带来的IO消耗自然会降低,性能也就很自然的得到提升

一、数据库命名规范

       可以采用26个英文字母 (区分大小写) 和0-9的自然数 (一般不需要) 加上下划线 ‘_’ 组成,命名简介明确 (Student_Union),多个单词用下划线 ‘_’ 分隔,一个项目一个数据库,多个项目慎用同一个数据库

二、表命名规范

       1)采用26字母和0-9的自然数(一般不使用)加上下互相 ‘_’ 组成,命名简洁明确,多个单词用下划线 ‘_’ 隔开

       2)全部小写命名,尽量避免出现大写(因为在我目前使用过的数据库里都不区分大小写)

       3)禁止使用关键字,如:select、table、show 等等

  4)表名称不要取得太长(一般不超过三个英文单词)

  5)表的名称一般使用名词或者东滨短语(实在不行就用拼音吧起码自己能看懂。。。)

  6)也要注意单词形式,列如:使用 user ,而不是 users(因为用户表是一个的而不是多个)

  7)表必须填写描述信息(建表时可以用注释详细写出表细节的作用,不同数据库的注释都不一样)

三、字段命名规范

  1)采用26字母和0-9的自然数(一般不使用)加上下互相 ‘_’ 组成,命名简洁明确,多个单词用下划线 ‘_’ 隔开

  2)全部小写命名,尽量避免出现大写

  3)字段必须填写描述信息

  4)禁止使用数据库关键字

  5)字段名称一般采用名词或动宾短语

  6)采用字段的名字必须是易于理解,一般不超过三个英文单词

  7)在命名表的列时,不要重复表的名称(如:在 user 表中,出现 user_name 字段)

  8)字段命名使用完整名称

四、SQL语言编码规范

  1)所有关键字最好大写,如:DELETE、UPDATE、INSERT等等

  2)多有函数及其参数中除用户变量以外的部分大写

  3)在定义变量时用到的数据类型小写

原文地址:https://www.cnblogs.com/coderxiaobai/p/13494420.html