日期:2014-05-18  浏览次数:20445 次

数据库设计规范讨论一之表设计
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)如果使用用户编码作为主键有什么不好?

不好控制. 主键往往是其他数据的依据, 它如何经常变化, 则会导致一系列相关联的数据的变化.
自定义导致其长度可能不确定, 这个对于高效的数据检索是不利的