数据库设计规范讨论一之表设计
1.命名
1)许多建议以t或tb开头,为什么区分这个,难道是要区分嵌在代码中的sql语句中操作的对象是表还是视图?
2)是否要区分模块类型,比如系统、客户、合同,如命名为t_sm_***,t_cm_***等?
3)是否区分表的种类,比如有人把表分为业务表、基本表、辅助表等,不知作用何在?
4)是否使用下横线连接,比如t_a_ContType,好象这样书写比较困难些?
5)表名是否加s,比如Customers,好象MS老大就是这样命名哦。
6)是否使用缩写?更有甚者使用table1\table2等命名的方式?保密吗?
2.设计
1)一般是否需要有建立时间、建立者、修改时间、修改者这几个字段?有人认为这样对数据库空间的消耗比较大.
2)关于字段类型,哈哈有人建议只使用字符类型,如日期使用char(19)替代?
3)表中是否有必要设计时间戳字段?
4)如果使用用户编码作为主键有什么不好?
5)什么情况下使用代理主键,比如自增值比较好?
6)比如有合同表,有合同类型、业务员、销售部门、币种,后者什么情况下应该建立独立的表,否则是否在合同表中直接保存合同类型等即可?
哈哈,欢迎大家发表高见,分不够再开帖。
[解决办法]
好多问题,关注
[解决办法]
先签名...
[解决办法]
以下是个人的看法
1.命名
1)许多建议以t或tb开头,为什么区分这个,难道是要区分嵌在代码中的sql语句中操作的对象是表还是视图?
基本上是这个意思, 即在数据库之外看到对象时, 基本上能知道对象是什么类型的, 交流上是很有必要的, (从数据库上的角度来看, 这个没有意义, 纯粹是给人看的)
2)是否要区分模块类型,比如系统、客户、合同,如命名为t_sm_***,t_cm_***等?
一般是要分的, 到了 sql 2005 后, 更好的做法是把不同模块的对象放在不同的 schema (架构)下
3)是否区分表的种类,比如有人把表分为业务表、基本表、辅助表等,不知作用何在?
如果楼主看过数据库范式, 这个问题应该比较容易理解. 简单的说, 如果把什么东西都堆在一齐, 则数据检索是很不利的(想像一下从一堆东西中找到某个东西和从分类放好的东西中找到某个东西, 那个更容易?)
4)是否使用下横线连接,比如t_a_ContType,好象这样书写比较困难些?
习惯就好
5)表名是否加s,比如Customers,好象MS老大就是这样命名哦。
习惯问题, s表示复数, 更符合表意
6)是否使用缩写?更有甚者使用table1\table2等命名的方式?保密吗?
这个不好讲, 不过多数情况下是懒, 而不是保密(能打一个字表示的, 而且需要表示多次, 多数情况下你不太愿意打更多字来表示吧?)
[解决办法]
1.命名
1)许多建议以t或tb开头,为什么区分这个,难道是要区分嵌在代码中的sql语句中操作的对象是表还是视图?
--偶就不喜欢使用 t和tb,不过视图还是喜欢使用 v的...好区分表和视图
2)是否要区分模块类型,比如系统、客户、合同,如命名为t_sm_***,t_cm_***等?
--模块表放在一块,比较好查询和记忆...
3)是否区分表的种类,比如有人把表分为业务表、基本表、辅助表等,不知作用何在?
--偶有用过感觉的辅助表:就是当数据量比较大的查询的汇总,偶会把数据更新到辅助的汇总表里面,然后查询...
--基本表:基础数据表
--业务表:如入库表,领料表...
4)是否使用下横线连接,比如t_a_ContType,好象这样书写比较困难些?
--经常使用下划线,我也觉得好困难,因为键盘上的键设置问题...哈哈...
5)表名是否加s,比如Customers,好象MS老大就是这样命名哦。
--习惯就好...想咋样就咋样,保持整个库风格一致就好了.
6)是否使用缩写?更有甚者使用table1\table2等命名的方式?保密吗?
--table1 这种方式保密?偶以为这样只是临时使用而已吧...不过偶喜欢tmp...
2.设计
1)一般是否需要有建立时间、建立者、修改时间、修改者这几个字段?有人认为这样对数据库空间的消耗比较大.
--建立时间、建立者、修改时间、修改者 职责性.好像是为了防止抵赖还是什么的...
2)关于字段类型,哈哈有人建议只使用字符类型,如日期使用char(19)替代?
--偶好像很少使用 char...
3)表中是否有必要设计时间戳字段?
--这个五鸡了...
4)如果使用用户编码作为主键有什么不好?
--修改性...也五鸡了..
5)什么情况下使用代理主键,比如自增值比较好?
--数据重复的时候
6)比如有合同表,有合同类型、业务员、销售部门、币种,后者什么情况下应该建立独立的表,
否则是否在合同表中直接保存合同类型等即可?
--有时候,偶不一定使用范式...
PS:以上是偶胡乱涂鸦的...lx继续...
[解决办法]
第一次离四钻最近的地方...
[解决办法]
五鸡是什么意思?广东话?
[解决办法]
xiaoku(野蛮人(^v^)) ,你的楼上楼下都是钻钻。
[解决办法]
2.设计
1)一般是否需要有建立时间、建立者、修改时间、修改者这几个字段?有人认为这样对数据库空间的消耗比较大.
视业务需要, 要知道数据存储是有一定规则的, 例如sql server是8k一个数据页, 数据的存储以数据页为单位, 如果你的字段越多, 意味着一页能存储的记录越少, 读10000条数据, 读10页与读50页的效率差异肯定是有的
2)关于字段类型,哈哈有人建议只使用字符类型,如日期使用char(19)替代?
存在的就是合理的, 如果只有字符类型就是最好的, 那干嘛搞那么多种数据类型呢? 所以这个问题不用考虑
3)表中是否有必要设计时间戳字段?
这个也是根据业务需要确定
4)如果使用用户编码作为主键有什么不好?
不好控制. 主键往往是其他数据的依据, 它如何经常变化, 则会导致一系列相关联的数据的变化.
自定义导致其长度可能不确定, 这个对于高效的数据检索是不利的
5)什么情况下使用代理主键,比如自增值比较好?
宽度较小, 改动较小, 查询的条件经常在该列上进行.
6)比如有合同表,有合同类型、业务员、销售部门、币种,后者什么情况下应该建立独立的表,否则是否在合同表中直接保存合同类型等即可?
考虑扩充的规范, 例如, 对于人民币, 可能有的人用RMB, 有的人直接打汉字, 有的人用符号, 如果你的统计依赖于币种, 则上述三种表示会给你的统计造成麻烦(其他也差不多类似)
[解决办法]
1.命名
用前后缀应该是好习惯,系统不可能一个人开发,有个能比较清楚从名称看出类别和意义的命名规则是一个很好的沟通基础。
[解决办法]
进来学习。
up
[解决办法]
如果你的数据库有100个表,
假如他第一次见到你的数据库,
假如系统业务流程他很熟悉了,
假如他不那么笨,在你的指导下,他只看一遍就记住了90个表是干什么的,
管你是用什么规则建的,你的规则就是最好的规则。
[解决办法]
楼上什么意思?看不懂
[解决办法]
习惯将表名大写。。。
[解决办法]
我习惯表以TBL_ 开头
[解决办法]
这里好多钻石和星星。。。
[解决办法]
老大说的有道理
[解决办法]
up
學習
[解决办法]
还是老大说得有理,今天看见五星上将了
[解决办法]
终于见到传说中的邹哥了!
[解决办法]
顶上,好贴
[解决办法]
顶!!
[解决办法]
学习~~~
2)关于字段类型,哈哈有人建议只使用字符类型,如日期使用char(19)替代?
总是需要转换类型,用户看见的也只是个样子,字符串的还好控制一些,
可能是为了代码中操作更简单些吧
不同的开发平台,操作还不一样,就如PB中就有个date和datetime经常忘记转换~
[解决办法]
SAP中有12000个表,表的命名可不易哦
我个人认为只要个共识就可以了,也就是有个命名标准
目的就是能很容易让人看懂
[解决办法]
楼上说了好多
我要好好消化消化
这么好的帖子不顶一下对不起自己的良心
[解决办法]
txlicenhe(马可) ( ) 信誉:163 Blog 加为好友 2007-6-6 11:10:34 得分: 0
xiaoku(野蛮人(^v^)) ,你的楼上楼下都是钻钻。
----------------------
偶吓得不敢动了...
[解决办法]
五鸡 就是 不知道的意思...
[解决办法]
lz 好高的信誉哦。
[解决办法]
问题1和2楼主可参考匈牙利命名法.3,在SQL2000里也有INFORNATION_SCHEMA.可以分类.4\5和6这个看个人习惯,当然,在匈牙利命名法里也有叙述.建议最好不要怕麻烦,严格遵循标准, 习惯了就好,带来的好处是长久的
设计的1:这个根据要求,看有AUDIT的要求没.有就加,小型软件就无所谓.2和3都根据业务需要.4.主健是应该以用户感觉不到它的存在,但是它能保证数据的唯一性即是最好.5自增列根据情况,但是要注意它不能保证唯一性.6,楼主最好看下数据库的6个范式,先深刻理解下前3个就明白了.
[解决办法]
好多的钻石啊
[解决办法]
以前刚进IT业就是学着前辈这样做的,但是很多同事是没有规则的。
[解决办法]
xiaoku(野蛮人(^v^))
危险啊!!!!!!!!
------解决方案--------------------
野人回来~~~~危险啊~~~~~!!
[解决办法]
跟着老大接点分
[解决办法]
学习:)
[解决办法]
跟着学习一下
试图加个vw_,存储过程加个sp_,函数加fn_.表好像加不加都无所谓阿
[解决办法]
非常顶一下
[解决办法]
现在还能接分?
[解决办法]
绝对好贴,今后肯定用得着,学习了
[解决办法]
偶跑了...
[解决办法]
非常顶一下
[解决办法]
这贴好
[解决办法]
4)如果使用用户编码作为主键有什么不好?
为了避免风险,如果用户编码的规则发生变化了,怎么办?如果使用毫无疑义的字段(比如自增的)就可以不必担心用户编码的规则发生变化了。
[解决办法]
比如说身份证号码,以前是十五位的,现在是十八位了。
另外身份证号还有重复的呢。
[解决办法]
关注
[解决办法]
这个关注一下啦
[解决办法]
mark
[解决办法]
我认为基本表的命名前缀不要加tb或tab之类,直接按意思命名;
其它表命名前缀加tb或tab都可以接受,后面加表的英文名,首个字母要大写,两个或以上的英文单的首个字母要大写,如tabOrderRequire
视图命名以小写vie开头,最容易区分
存储过程以proc开头,如果以sp_开头,以会系统的存储过程混淆,如sp_pkeys是系统存储过程
函数以fn_开头
触发器分三类,以tg开头,insert、update、delete的触发器命名为tgI_、tgU_、tgD_
这样一看就明白它的意思了