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

数据库设计规范讨论二之表设计
1.关于主键
1)从效率角度看,整数类型的主键应该比定长或变长类型的字符主键效率高,哪位有测试过效率一般会高多少?
2)通常来讲是否我们一般应该选择代理主键,比如自增值、GUID等?
3)如果使用用户自定义编码作为主键有什么不好?
4)如果是复合主键,比如有4个以上的字段组成主键,我们是否应该考虑用单一主键来代替,比如GUID?或者考虑反范式?
2.关于冗余
1)比如有一个订单,我们考虑一个订单有一个产品系列,这个系列的产品有很多规格,每个规格有自己的单价,我们要看这个订单包含多少规格,
包含多少产品数量,订单包含多少金额,我们是否应该把这些值包含在主表中?如果不包含,计算的效率估计会差多少?如果要包含,我们可以
通过哪些手段来保证数据的一致性?
2)在考虑冗余设计时,我们一般需要考虑哪些因素?
3.关于参照完整性
1)比如客户表,许多业务都会用到,一般我们是否应该把这些表全部和客户表关联?这样对查询和更新效率分别有多大的影响?
看过MS   CRM的设计,几乎所有的表都和用户表作了关联?
2)我们是否应该选择级联更新或删除?

哈哈,欢迎大家发表高见,分不够再开帖。

------解决方案--------------------
也来占也楼层...
------解决方案--------------------
....又没LS快
------解决方案--------------------
不说话占了也没用
------解决方案--------------------
子陌红尘 占了再说吧,我在下面听
------解决方案--------------------
1.关于主键
1)从效率角度看,整数类型的主键应该比定长或变长类型的字符主键效率高,哪位有测试过效率一般会高多少?
--------感觉要看你字符的长度,效率不是一定低于int类型主键

2)通常来讲是否我们一般应该选择代理主键,比如自增值、GUID等?
--------看具体情况GUID尽量少用,自增值随意

3)如果使用用户自定义编码作为主键有什么不好?
--------感觉没什么问题

4)如果是复合主键,比如有4个以上的字段组成主键,我们是否应该考虑用单一主键来代替,比如GUID?或者考虑反范式?
--------这种情况建议用单一主键代替
------解决方案--------------------
开两贴了
------解决方案--------------------
不错!
支持。
学习经验!
------解决方案--------------------
学习学习
------解决方案--------------------
mark
------解决方案--------------------
顶回上去
------解决方案--------------------
偶是~实习记者
------解决方案--------------------
听听课
------解决方案--------------------
顺便站个楼层
------解决方案--------------------
1.关于主键
1)从效率角度看,整数类型的主键应该比定长或变长类型的字符主键效率高,哪位有测试过效率一般会高多少?

与效率问题更挂钩的是聚集索引。


2)通常来讲是否我们一般应该选择代理主键,比如自增值、GUID等?

还是尽量少用的好

3)如果使用用户自定义编码作为主键有什么不好?

唯一的就怕用户修改编码规则,会死人的

4)如果是复合主键,比如有4个以上的字段组成主键,我们是否应该考虑用单一主键来代替,比如GUID?或者考虑反范式?

4个以上的字段应该代替
反范式?

2.关于冗余
1)比如有一个订单,我们考虑一个订单有一个产品系列,这个系列的产品有很多规格,每个规格有自己的单价,我们要看这个订单包含多少规格,
包含多少产品数量,订单包含多少金额,我们是否应该把这些值包含在主表中?如果不包含,计算的效率估计会差多少?如果要包含,我们可以通过哪些手段来保证数据的一致性?

这个例子肯定是要设计成主从表,好的索引能提高效率。

2)在考虑冗余设计时,我们一般需要考虑哪些因素?

冗余设计首先要考虑的是一致性,其次是大数据量情况下因为表太宽对效率的反作用。

3.关于参照完整性
1)比如客户表,许多业务都会用到,一般我们是否应该把这些表全部和客户表关联?这样对查询和更新效率分别有多大的影响?
看过MS CRM的设计,几乎所有的表都和用户表作了关联?

应该适当减少些关联,但是要保证一致性,至少在系统设计的配合下保证一致性。

2)我们是否应该选择级联更新或删除?

个人认为级联更新或删除是鸡肋


------解决方案--------------------
鸡肋是啥意思。。。。
------解决方案--------------------
笔记中。。。
------解决方案--------------------
实习记者提个要求~~~说普通话。。。
滴泪中。。。。
------解决方案--------------------
鸡肋 就是看起来很巧妙,实际不敢大用的功能,比如函数、级联、远程连接自己等等



------解决方案--------------------