日期:2014-05-16  浏览次数:20935 次

到底该不该用主键
本人it从业2年,以前以java开发为主,现在的公司做通信行业,以数据处理为主,包括我以前,现在的公司开发的时候建表是从来不用主外键的,但上天我一同学在跟我争论在开发的时候到底要不要用主外键,我竟说不出个靠的住的理由,特来请教大家。
1.主外键到底该不该用?
2.用它为什么?
3.不用又为什么?

------解决方案--------------------
一、需要主键。
理由是:
1、主键是一个关系表数据完整性的体现。
2、主键是表中记录唯一性的保证。
3、可能跟某些DML操作带来方便和效率提升。
4、某些WEB框架需要每个表都有主键。

二、个人较少使用外键。
理由是:
1、会消耗一部分性能,如果处理不好会带来性能问题(如:未在外键上建立索引)。
2、平时手工处理一些数据,可能带来麻烦(如表上有较多外键,且不清楚主外键之间的关系)。
3、一般在中间层可能都会写一些业务逻辑,所以外键显得有点多余。

------解决方案--------------------
主键的作用:
1.惟一地标识一行.
2.作为一个可以被外键有效引用的对象.
3.一定程度上消除数据冗余.
4.保持表里面数据的相异,维持数据的完整性.
设计主键遵循的原则:
1.主键应当是有意义的字段
2.主键最好是单列,这样可以有效的提高连接和筛选的效率
3.主键最好不要被更新
4.主键数据可以有数据库生成,也可以有用户提供

外键的作用:
1.参照完整性,一个表的数据参照另一个表的数据而存在
比如,博客的评论就参照博客id号,如果博客被删除了,
那么关于这篇博客的评论也应该被删除
2.可以有效的从一个表连接到另一个表,找到相应的数据
3.维持整个系统数据的完整新
比如,学校的学生管理系统,如果学生因为犯了大错而被学校开除了,
那么他的基本信息要被删除,但是关于这个学生的成绩信息,选课信息,
这些数据不可能与学生基本信息放在一个表里面,所以得另外存放,
而这就需要外键的关联,如果学生被开除了,那么他的所有信息都要被删除。

该不该舍用外键,应该参照具体的需要,以及性能的考虑
------解决方案--------------------
探讨
当你的数据量很大的时候,主键还应该用么,比如频繁的插入操作等,会不会引起效率上的问题

------解决方案--------------------
探讨

引用:

当你的数据量很大的时候,主键还应该用么,比如频繁的插入操作等,会不会引起效率上的问题

会有一定的影响。如果根据具体情况,优化得很好,影响没会太大。
一句话,具体情况还得具体分析!!

------解决方案--------------------
主外键都是为了完整性约束吧。 有些项目是靠程序来控制完整性,有些是靠数据库来进行。 
我们也比较少用外键,
------解决方案--------------------
外键的建立是更加直接的直观的约束了表间关系

为了业务容易扩展,不在数据库里建立主外键关系,而采用了意识流的外键关系
------解决方案--------------------
主键可以提高数据的完整性和一些效率,另外,从库表设计模式来看,一般都需要对一些单元表设置一个与逻辑无关的主键列,这样便于管理和以后的关联关系扩展。
外键更能体现出库表的结构,对于主要用页面代码来控制完整性的应用,外键的功能可能体现不出来,但是对于大量调用数据库存储过程、函数等来进行逻辑管理的应用,外键就能发挥很大的作用了。我见过一个牛逼的系统,所有的业务逻辑都是通过数据库来进行的,页面值负责传值和调用。这样的系统里,主外键就显得相当的重要了。
------解决方案--------------------
我也从事2年电信项目的开发,项目组严格规定不允许使用主键和外键,至于原因没有问过,个人认为外键是完全没必要的,如果有了,容易引起一些问题,比如二个表有关系,删除一张表的数据时不允许删除,主键个人认为可要可不要,我们开发中为保持数据的唯一性用的是唯一所以来控制

至于表之间的关系是在设计的时候搞出一个数据字典,大家可以去对照使用
------解决方案--------------------
具体情况区别对待咯
------解决方案--------------------
靠,当然要用,用来定位文件;
------解决方案--------------------
探讨
本人it从业2年,以前以java开发为主,现在的公司做通信行业,以数据处理为主,包括我以前,现在的公司开发的时候建表是从来不用主外键的,但上天我一同学在跟我争论在开发的时候到底要不要用主外键,我竟说不出个靠的住的理由,特来请教大家。
1.主外键到底该不该用?
2.用它为什么?
3.不用又为什么?

------解决方案--------------------
探讨
引用:
当你的数据量很大的时候,主键还应该用么,比如频繁的插入操作等,会不会引起效率上的问题


如果主键没有被索引,没有必要建立主键,大数据量的前提下建议不建立主键,

------解决方案--------------------
这个要看你所在的公司的生产流程是不是有规定:
如果你的公司没有关于数据库设计方面对于遵循的范式有明确的要求,如果要求第二范式以上就用主键,否则就可以不用呗.
关于数据库范式的定义说明:
构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、...其中第二范式要求是表必须有主关键字