数据库字段命名及设计规范
1.设计原则
1) 标准化和规范化
数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,遵守3NF 标准的数据库的表设计原则是:“One Fact in One Place”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。它具有以下特点:有一组表专门存放通过键连接起来的关联数据。
举例:某个存放客户及其有关定单的3NF 数据库就可能有两个表:Customer和Order。Order表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向Customer表里包含该客户信息的那一行。
事实上,为了效率的缘故,对表不进行标准化有时也是必要的。
2) 数据驱动
采用数据驱动而非硬编码的方式,许多策略变更和维护都会方便得多,大大增强系统的灵活性和扩展性。
举例,假如用户界面要访问外部数据源(文件、XML 文档、其他数据库等),不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在数据库里。角色权限管理也可以通过数据驱动来完成。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。
3) 考虑各种变化
在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。
举例,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。
2. 数据库涉及字符规范
采用26个英文字母(区分大小写)和0-9这十个自然数,加上下划线'_'组成,共63个字符.不能出现其他字符(注释除外).
注意事项:
1) 以上命名都不得超过30个字符的系统限制.变量名的长度限制为29(不包括标识字符@).
2) 数据对象、变量的命名都采用英文字符,禁止使用中文命名.绝对不要在对象名的字符之间留空格.
3) 小心保留词,要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突
5) 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性.假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了.
3.数据库命名规范
数据库,数据表一律使用前缀
正式数据库名使用小写英文以及下划线组成,尽量说明是那个应用或者系统在使用的.比如:
web_19floor_net
web_car
备份数据库名使用正式库名加上备份时间组成,如:
web_19floor_net_20070403
web_car_20070403
4. 数据库表命名规范
数据表名使用小写英文以及下划线组成,尽量说明是那个应用或者系统在使用的.
相关应用的数据表使用同一前缀,如论坛的表使用cdb_前缀,博客的数据表使用supe_前缀,前缀名称一般不超过5字
比如:
web_user
web_group
supe_userspace
备份数据表名使用正式表名加上备份时间组成,如:
web_user_20070403
web_group_20070403
supe_userspace_20070403
5. 字段命名规范
字段名称使用单词组合完成,首字母小写,后面单词的首字母大写,最好是带表名前缀.
如 web_user 表的字段:
userId
userName
userPassword
表与表之间的相关联字段要用统一名称,
如 web_user 表里面的 userId 和 web_group 表里面的 userId 相对应
6.字段类型规范
规则:用尽量少的存储空间来存数一个字段的数据.
比如能用int的就不用char或者varchar
能用tinyint的就不用int(TINYINT 型的字段如果设置为UNSIGNED类型,只能存储从0到255的整数,不能用来储存负数。TINYINT 型的字段如果不设置UNSIGNED类型,存储-128到127的整数。)
能用 varchar(20)的就不用varchar(255)
时间戳字段尽量用int型,如created:表示从 '1970-01-01 08:00:00'开始的int秒数,采用英文单词的过去式;gmtCreated:表示datetime类型的时间,即形如 '1980-01-01 00:00:00'的时间串,Java中对应的类型为Timestamp
7.数据库设计文档规范
所有数据库设计要写成文档,文档以模块化形式表达.大致格式如下:
'-------------------------------------------
' 表名: web_user
' 作者: Aeolus(傻鱼)
' 日期: 2007-04-11
' 版本: 1.0
' 描述: 保存用户资料
' 具体内容:
' UserID int,自动增量 用户代码
' UserName char(12) 用户名字
' ......
'--------------------------------------------
8. 索引使用原则:
1) 逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引.考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写.
2) 大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上.
3) 不要索引blob/text等字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间.
4) 不要索引常用的小型表
不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了.对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间.
9.sql语句规范
所有sql关键词全部大写,比如SELECT,UPDATE,FROM,ORDER,BY等,所有的表名和库名都要用``包含
如:
SELECT COUNT(*) FROM `cdb_members` WHERE `userName` = 'aeolus';
10.其他设计技巧
1) 避免使用触发器
触发器的功能通常可以用其他方式实现.在调试程序时触发器可能成为干扰.假如你确实需要采用触发器,你最好集中对它文档化.
2) 使用常用英语(或者其他任何语言)而不要使用编码或者拼音首字母缩写
在创建下拉菜单、列表、报表时最好按照英语名排序.假如需要编码或者拼音首字母缩写,可以在旁边附上用户知道的英语.
3) 保存常用信息
让一个表专门存放一般数据库信息非常有用.在这个表里存放数据库当前版本、最近检查/修复(对Access)、关联设计文档的名称、客户等信息.这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用.
4) 包含版本机制
在数据库中引入版本控制机制来确定使用中的数据库的版本.时间一长,用户的需求总是会改变的.最终可能会要求修改数据库结构.把版本信息直接存放到数据库中更为方便.
5) 编制文档
对所有的快捷方式、命名规范、限制和函数都要编制文档.
采用给表、列、触发器等加注释的数据库工具.对开发、支持和跟踪修改非常有用.
对数据库文档化,或者在数据库自身的内部或者单独建立文档.这样,当过了一年多时间后再回过头来做第2 个版本,犯错的机会将大大减少。
6) 测试、测试、反复测试
建立或者修订数据库之后,必须用用户新输入的数据测试数据字段.最重要的是,让用户进行测试并且同用户一道保证选择的数据类型满足商业要求.测试需要在把新数据库投入实际服务之前完成。
7) 检查设计
在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库.换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。
bang做一下推广:南宁团购 www.dongdegou.com 南宁婚纱摄影 www.nnmilan.com
转载于:https://blog.51cto.com/linxucn/722487
相关文章:

更改管理GPO的域控制器
1.GPO先被存储到扮演PDC模拟器操作主机角色的域控制器,然后再由它将其复制到其他域控制器,域成员计算机再通过域控制器来应用GPO.2.可通过DC选项与组策略两种方式来将管理GPO的域控制器从PDC模拟器操作主机更改为其他域控制器。转载于:https://blog.51ct…

怎样使元素可编辑
作者:http://lucky.myrice.comE-mail:amxh21cn.com 在IE5.5中,可以设定元素的编辑属性。语法如下: object.contentEditable [ sEditable]; 其中的sEditable为下列三个之一: ◇inherit ◇false ◇true <script lang…

知乎多场景内容匹配方案荣获CSDN AI优秀案例奖
7月3日,由CSDN主办的2020 AI开发者大会拉开帷幕,以直播形式进行吸引了上万名技术从业者参与。大会颁发了2020 AI企业及技术应用系列奖项,其中知乎凭借“多场景内容匹配方案”荣获“AI优秀案例奖”。 过去一年,人工智能技术研发和…

批量创建用户和设置密码
(1) 首先创建用户名文件和密码文件 # touch user_name passwd active:/srv # cat passwd win00:123456 win01:123456 active:/srv # cat user_name win00:x:520:520::/home/win00:/bin/bash win01:x:521:521::/home/win01:/bin/bash (2) 然后执行命令导入用户名和密码 a…

Eclipse 小插件
http://www.junginger.biz/eclipse/
肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁
图源 | 视觉中国来源|Python编程时光(ID: Cool-Python)今天要给大家介绍的一个 Unix 下的一个 网络数据采集分析工具 -- Tcpdump,也就是我们常说的抓包工具。与它功能类似的工具有 wireshark ,不同的是,wireshark 有图…

【中文】Joomla1.7扩展介绍之Fabrik (强大的表单处理能力)
Fabrik 插件分类: Contacts & Feedback > Forms 支持版本:1.5 /1.7 关注程度:【最流行的】 所属类型:组件、模块、插件、多语言 Fabrik 2.1.1 is a security fix, please update immediately Fabrik 2.1.1是一个安全…

CPU的序列号
可以取CPU的序列号。 string cpuInfo "";//cpu序列号 ManagementClass cimobject new ManagementClass("Win32_Processor"); ManagementObjectCollection moc cimobject.GetInstances(); foreach(ManagementObject mo in moc) { cpuInfo mo.Properties…

Sqli-labs less 9
Less-9 本关我们从标题就可以看到 《基于时间-单引号》,所以很明显的这关要我们利用延时注入进行,同时id参数进行的是 的处理。这里我们大致的将延时注入的方法演示一次。 这里用sleep()函数。 这里因为我们利用的是时间的延迟,贴图就没有意…

用ASP.NET上传图片并生成带版权信息的缩略图
作者:活靶子 出处:AspxBoy.Com <% Page Language"C#" ResponseEncoding"gb2312" %><% import Namespace"System" %><% import Namespace"System.IO" %><% import Namespace"Sys…

服务器ping你可以ping通,你ping服务器ping不同的解决方案!!
这几天让公司的服务器弄的蛋疼啊!!三天两头的出问题,主管脸色不大好看,我这里也郁闷的要死。所以发誓一定要把好安全关!! 今天在自己的虚拟机上边装了一个winserver2003标准版,搭建好环境之后发…
重磅!CSDN 发布「AI开源贡献奖Top5」「AI新锐公司奖Top10」「AI优秀案例奖Top30」三大榜单...
2020 年无疑是特殊的一年,AI 在开年的这场“战疫”中表现出惊人的力量。站在“新十年”的起点上,CSDN发起【百万人学AI】评选活动。我们继续聚焦AI的技术落地,关注开源和新生的力量。作为CSDN第三届AI评选活动,本次活动受到数百家…

linux 模拟生成 CAN 设备
/*************************************************************************************** linux 模拟生成 CAN 设备* 说明:* 最近在看CANopenSocket的过程中看到能够生成模拟的CAN设备,于是查了点资料,结…

关于委托的精彩解说
作者:TomMax (笑望人生) 出处:csdn community 主 题: “.net百题问答的活动”--许多人问过的--《 C#委托及事件 》作 者: TomMax (笑望人生) 信 誉 值: 100 所属论坛: .NET技术 C# 问题点数&am…

[转载]ESFramework 4.0 快速上手(15) -- 客户端登录验证
ESFramework 4.0 快速上手(15) -- 客户端登录验证 在之前版本的Rapid引擎中,是没有提供客户端登陆验证的机制的,如果要验证用户的帐号密码信息,我们只有自己手动通过自定义信息来实现。在2011.…
编程能力差,90%输在了这点上!CTO:这样学编程 ,更容易成为高手
从事 Python 这些年中,我见过很多 Python 教程和书籍,他们大都这样讲 :先介绍 Python 的基本语法规则、list, dict, tuple 等数据结构,然后再介绍字符串处理和正则表达式,介绍文件等 IO 操作.... 就这样一点一点往下说…

MVC 之 架构的基本原理及Asp.Net实现MVC
一、引言 许多Web应用都是从数据存储中检索数据并将其显示给用户。在用户更改数据之后,系统再将更新内容存储到数据存储中。因为关键的信息流发生在数据存储和用户界面之间,所以很多应用将数据和用户界面这两部分绑在一起,以减少编码量并提高…

vsftp虚拟用户
虚拟用户 1、建立虚拟用户口令库文件 #cat logins.txt mike 123 john 321 口令库文件中奇数行设置用户名,偶数行设置口令 2、生成vsftpd的认证文件 #rpm -ivh db4-utils* #db_load -T -t hash -f /root/logins.txt /etc/vsftpd/vsftpd_login.db 生成认证文件 设置…

在asp.net(C#)中怎么获得一个目录的大小?
作者:靶子&MSDN 出处:msdn 本方法来自以下文档,有问题多翻帮助 ;)ms-help://MS.NETFrameworkSDKv1.1.CHS/cpref/html/frlrfsystemiodirectoryclasstopic.htmms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemiodirectory…

360金融首席科学家张家兴:我们如何做数据AI融合中台?
2020年7月3—4日,在CSDN 主办的第三届 AI 开发者万人大会(AI ProCon 2020)上。360金融首席科学家张家兴博士以“数据AI融合中台——金融领域人工智能实践”为题,揭秘了360金融在金融科技领域的前沿技术理念与实践心得。 张家兴认…

GoogleFusionTablesAPI初探地图与云计算
http://developer.51cto.com/art/200906/129324.htm http://yexiaochai.iteye.com/blog/1893735 http://yexiaochai.iteye.com/blog/1893734

关于ASPNET在IIS一些问题的经验总结
作者:未知 请速与本人联系 出处:mscommunity 很多开发人员对于IIS和ASPNET的安装等问题困扰,特此做下面的小总结,请大家多交流!iis 坏了修复办法!!!!!!! 一般IIS运行不了ASP.NET,试一下下面四种方法,99%有效: 1。…
好莱坞科幻新片《b》,钦定 AI 机器人出演女主角!
来源 | HyperAI超神经由日本机器人教父石黑浩,历时多年打造的 AI 机器人 Erica,被好莱坞选中,出演科幻大片《b》中的女主角。如果成功完成拍摄,将成为影史上的一大创举。很多好莱坞科幻大片里,都有机器人的角色&#x…

原型开发、模型构建和设计反馈在线工具
Lumzy 你在创建新的UI技术任何时候,在创建网站之前,你会需要创造出一个作为概念根据的原型或模型。当然,你也要测试这些新构想。 Lumzy是一个方便的UI界面模型构建和原型开发的小型在线工具。它能让你创建具有工作功能的原型&#…

关于静态方法的使用方式
1。静态方法内不能使用非静态的类变量 2。静态方法内不能使用非静态的类方法

VS.NET 学习方法论
——我的VS.NET学习之旅 屠恩海(SunHai)开发工具:Microsoft Visual Studio .NET 2003操作系统:Windows XP题记:即使你没有一点编程经验,只要你愿意,并理解本文介绍的学习方法,你也可…

python标准库学习4
>>> os.environ["HOME"] C:\\Users\\Administrator>>> os.getcwd() #获得当前的目录 D:\\new >>> os.getenv("QTDIR") #获取环境变量的值 D:\\vs2010-qt-src-4.7.4\\qt-src-4.7.4 os.putenv(varname, value) #设置环境变量的…
通过三个直观步骤理解ROC曲线
作者 | Valeria Cortez来源 | DeepHub IMBAROC曲线是一个分类模型效果好坏评判的的可视化表示。在这篇文章中,我将分三个步骤头开始构建ROC曲线。步骤1:获取分类模型预测当我们训练一个分类模型时,我们得到得到一个结果的概率。在这种情况下&…

JAVA 实现 快速排序算法
2019独角兽企业重金招聘Python工程师标准>>> /*** 快速排序* * param list*/public static void fastSorted(int[] list, int i, int j) {if (i > j) {return;}int needToSortLen j;int referIndex i;while (i ! j) {while (list[referIndex] < list[j] &am…

Net 下安装、调试的常见问题与错误!!!
作者:多人 出处:csdn Q:新建项目时出错:Visual Studio .NET 已检测到指定Web服务器运行的不是ASP.NET 1.1版。您将无法运行ASP.NET Web应用程序或服务。Ahttp://support.microsoft.com/default.aspx?scidkb;en-us;817267--------------…