数据库设计:表的设计命名的十个注意点

原文连接:http://www.cnblogs.com/netsql/archive/2010/05/04/1727323.htmlhtml

1.表名通常以【模块名称_具体表名】来实现,同一个模块的前缀是同样的。(Oracle大小写敏感,在SQL中能够不用"_",由于能够用大小写一块儿的写法。这也是能够的)程序员

2.表名称不该该取得太长(通常不超过三个英文单词,不推荐使用中文拼音,总的长度不要超过30个字符)。表名使用英文的缘由,有些项目有英文版的须要,或者这个项目是给外国作的时候,使用英文是基本的要求,应该说这是一个习惯问题,多学一点英文也不是坏事
 
3.不使用tab或tb做为表前缀(原本就是一个表,为何还要说明)。
 
4.一些做为多对多链接的表,可使用两个表的前缀做为表名:如:用户登陆表User_Login,用户分组表User_GroupInfo,这两个表创建多对多关系的表名为:User_Group_Relation(关系统一用Relation)。注意一点,主键在作其余表的外键时,或者在被其余表引用时,字段说明和字段名尽可能保持一致,好比发帖表BBS_Topic里的用户字段写成UI_ID,这样跟用户信息表User_Info的主键UI_ID保持一致,看起来舒服,对应关系很明确,也不容易错,先后不一致时容易使人费解。
  
5.当系统中有一些少许的,重复出现的值时,使用字典表来节约存储空间和优化查询。如地区、系统中用户类型的代号等。这类值不会在程序的运行期变化,可是须要存储在数据库中。通常数据库中,都有一个数据字典表,用来保存系统所用到的基础数据,大型的字段表如省份城市区域的字典表,统一以Dictionary_做为前缀。
     
6. 与字段有关,默认的一些特殊字段, 不少表中,
  好比一些业务处理表中,除了添加生成的自动编号ID(通常做为主键用),该记录建立的时间CreateDate(建立时间),该记录的建立人CreatBy(注意这里,没UI_ID(用户信息表User_Info的主键UI_ID),由于还有修改人),最后修改人LastEditBy,最后修改时间LastEditDate。(这些能够直接使用中文字符,而不使用编码,提升查询的效率)
  同时有的时候须要注意,删除的时候并不真的删除该记录,而是添加一个标识位,好比XX_DeleteStaus删除状态。1是有效的,0则是无效的。
 
7.在命名表时,用单数形式表示名称。例如,使用 Employee,而不是 Employees。
 
8.数据库中应创建这样一个表,就是数据库自己的字段信息,表的说明,也就是数据库设计文档的一个表,方便查询使用,有什么不明的能够直接从数据库查询,数据库文档丢失,注释丢失,均可以从新起做用。
 
9.每一个表都应该有一个主键,这个主键最好是数字,并且是递增的,有不少表的主键用32位字符编码,这样作的目的更多的是从安全考虑的。由于字符多时索引时效率低,而使用自增列也不是不多,好比添加主表和从表操做时,主表的主键是从表的外键,这个时候还有取返回值,而后再添加,不能够同时添加。主键能够用自定义的规则,大部分用MAX(ID)的作法,也能够自定义一个序列表,有点像序列,或者用时间的年月日秒具体到毫秒。关于列的命名,建议对数据类型也作一些规范,由于很容易肯定,只有四种主要类型:数字,字符,时间,逻辑值,这些在类型上和长度上均可以定好规范,统一块儿来。
     
10.操做日志表,登陆日志表,这是数据库中必备的两个表,这个记录也须要作进一步的保存。这个有两种情形,一是具体到单个字段的操做日志,二是整个表的操做日志。

常见的几个表具体说明:操做日志表Sys_OperateLog、登陆日志表Sys_LoginLog、sql

           系统字典表Sys_Dictionary、系统字典表类型Sys_DicType数据库

 

操做日志表Sys_OperateLog
中文名 字段名 注释
操做日志编号 OL_ID 索引列,日志的编号
操做类型 OL_Type 是添加,修改,删除,查询等类容(可放在通用字典表)
操做模块 OL_Module 操做模块,好比新闻模块,关联的是菜单表编号
操做内容 OL_Content 操做了什么内容,越具体越好(修改前、修改后)
操做人 UI_ID 用户的信息
操做时间 OL_AddDate 日志记录建立时间
操做IP OL_IP 操做人的IP地址
备注信息 OL_Remarks 备注信息,一些其余的须要说明的信息

 这样的一个操做日志比较笼统,不是能具体到具体的字段值更新,若是要具体到某个具体值的更新,则须要设计新的数据库浏览器

通常状况下须要这样几个表,系统中可能已经有了,可是咱们拿到咱们本身的数据库中来,一个是数据库列表的表(就是数据库中有几个表)(编号,建立时间,建立人,修改时间,修改人,表名,注释,是否删除),而后就是数据库表下面的字段类型(编号,建立时间,建立人,修改时间,修改人,字段名,字段类型,字段精度,字段说明,字段注释,表的编号),也就是字段列表,这时的日志操做表能够这样设计(编号,表名,被修改的字段名,修改前值,修改后值,操做人,操做时间,相关模块,操做IP) 这种能记录修改记录,可是添加和删除时记录就不是很方便控制了。安全

 

登陆日志表Sys_LoginLog
中文名 字段名 注释
登陆日志编号 LL_ID 登陆的日志编号
登陆人 UI_ID 登陆人
登陆时间 LL_AddDate 登陆时间
登陆IP LL_IP 登陆的IP地址
登陆状态 LL_Status 登陆是否成功的标识位
登陆浏览器 LL_Browser 登陆浏览器
登陆分辨率 LL_Resolution 登陆的屏幕分辨率

还有一个就是数据字典表,我看过不少的数据库设计,类型表一个接一个,没有放在一块儿,还有的干脆写在注释里,有的根本就没有,这样某个程序员走了,这个字段就没人知道了,即便没走,本身也有可能时间长了忘掉,因此,见一个基础数据字典表的做用很是重要,其余的好比地区表(Sys_DicArea),汉语拼音表(Sys_DicCharacter)(用来汉字和拼音的转换)由于数据量较大,单独建表。这里介绍通用的数据字典表。数据库设计

 

系统字典表Sys_Dictionary
中文名 字段名 注释
字典编号 SD_ID 字典的编号,能够直接使用此主键编码(注意删除时的关联关系)
字典类型 DY_ID 字典类型的ID,须要创建字典类型表,由于放的是全部的字典表
字典编码 SD_Code 字典编码,支持本身编码(同一类型是惟一的,通常是整数型
字典中文名称 SD_Name 字典中文名称(好比男女,好比状态,能够放在字典表里,做为查看依据)
字典备注 SD_Remarks 字典备注,字典须要一些备注信息
建立人    
建立日期    
修改人    
修改日期    

 

系统字典表类型Sys_DicType
中文名 字段名 注释
字典类型编号 DT_ID 字典的自动索引号
字典类型名称 DT_Name 字典类型的中文名称
字典的备注说明 DT_Remarks 字典使用的备注说明
字典状态 DT_Status 字典是否删除,不在使用

 

最后补充一些内容,通常设计数据库是这个样子的,可是不排除有些特殊的情形,为了数据的保密性,数据库的表名和字段名都是一些看似毫无心义的字符数字,好比Table1,Col1,可是有一个表是说明表,或者有对应的数据库文档设计。优化

 

补充:一些列说明了单位类型,能够在设计数据库的时候代表,好比HeightIncm, WeightInKg.这样一目了然。编码

相关文章
相关标签/搜索