中国开发网: 论坛: 程序员情感CBD: 贴子 836104
dead_lee: 呃, 不是
1。 我要避免的不止是修改表结构, 由于身份证号被用于主键, 其值也会被存储在其他表中, 修改后是表结构和值都要修改.
2。 之所以用这个例子就是它的特殊性,其他的所谓不会变化的业务字段变化的频率更多.
3。 Where T1.IDCard='123456' and
T1.ID=T2.ID
用了T1上的IDCard索引, 得到id值后, 用到T2的ID索引去得到结果.
Where T1.IDCard='123456' and
T2.IDCard='123456' and
T1.IDCard=T2.IDCard
用到T1和T2上的IDCard索引去取值, 其实都是两个索引的访问而已了.性能就算有差异, 我觉得也可以接受.

把业务字段用作主键, 会导致它的值被存储在多个表中, 那么应付变化的能力就受到一定的影响. 我觉得还是不用它们作为主键好, 如果确实有唯一, 非空等等需求, 去额外对这些字段加数据库约束好了.

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录