到底该不该用主键

jon_____ 2011-06-12 12:50:58
本人it从业2年,以前以java开发为主,现在的公司做通信行业,以数据处理为主,包括我以前,现在的公司开发的时候建表是从来不用主外键的,但上天我一同学在跟我争论在开发的时候到底要不要用主外键,我竟说不出个靠的住的理由,特来请教大家。
1.主外键到底该不该用?
2.用它为什么?
3.不用又为什么?
...全文
247 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen7788 2011-06-25
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 yangting_lisa 的回复:]
这么多人跟帖,我就不发言了。
[/Quote]

我也是这么认为的~~~ ;-)
dynamo_ 2011-06-24
  • 打赏
  • 举报
回复
我们以前的也是用唯一索引的

谁给都解释解释! 或者在传个官方文件 学习学习!
小笨熊 2011-06-24
  • 打赏
  • 举报
回复
这么多人跟帖,我就不发言了。
hardycheng 2011-06-24
  • 打赏
  • 举报
回复
没有主键的话怎么确保行之间数据的不同

怎么和其他表进行关联


如果没有索引
数据量很大的情况下select也会特别慢

所以这个要不要用就取决你是做什么操作比较多
而且是对那个操作的效率要求比较高
BlueskyWide 2011-06-21
  • 打赏
  • 举报
回复
在一个正规的中度及以上的应用数据库里,主键、外键及外键参考都是必不可少的。

没有主键的数据库很难想象你准确地操纵数据;

同样,没有外键及外键参考,保持数据的低冗余度和数据的完整性(父子关系)也是不可想象的。
License2Kill 2011-06-21
  • 打赏
  • 举报
回复
外键很恐怖,除非数据质量百分百高。
山之魂2 2011-06-20
  • 打赏
  • 举报
回复
个人认为,主键是必须要的,以前在项目中处理过一些历史遗留的没有主键的数据,非常崩溃……
yanran_hill 2011-06-16
  • 打赏
  • 举报
回复
这个要看你所在的公司的生产流程是不是有规定:
如果你的公司没有关于数据库设计方面对于遵循的范式有明确的要求,如果要求第二范式以上就用主键,否则就可以不用呗.
关于数据库范式的定义说明:
构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、...其中第二范式要求是表必须有主关键字
wolianlin1987 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 java3344520 的回复:]
引用 4 楼 cjing310 的回复:
当你的数据量很大的时候,主键还应该用么,比如频繁的插入操作等,会不会引起效率上的问题


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


主键没有被索引?再建主键的时候不是会最动创建唯一索引?
toadzw 2011-06-15
  • 打赏
  • 举报
回复
靠,当然要用,用来定位文件;
richard_2010 2011-06-15
  • 打赏
  • 举报
回复
具体情况区别对待咯
quanhj 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 cjing310 的回复:]
本人it从业2年,以前以java开发为主,现在的公司做通信行业,以数据处理为主,包括我以前,现在的公司开发的时候建表是从来不用主外键的,但上天我一同学在跟我争论在开发的时候到底要不要用主外键,我竟说不出个靠的住的理由,特来请教大家。
1.主外键到底该不该用?
2.用它为什么?
3.不用又为什么?
[/Quote]

我觉得数据量很大,而且对数据的修改什么的都不多的话,建主键、外键什么的都没有必要了,建了还有可能影响数据的入库量。
iqlife 2011-06-13
  • 打赏
  • 举报
回复
外键的建立是更加直接的直观的约束了表间关系

为了业务容易扩展,不在数据库里建立主外键关系,而采用了意识流的外键关系
iqlife 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cjing310 的回复:]
当你的数据量很大的时候,主键还应该用么,比如频繁的插入操作等,会不会引起效率上的问题
[/Quote]

如果主键没有被索引,没有必要建立主键,大数据量的前提下建议不建立主键,
ycproc 2011-06-13
  • 打赏
  • 举报
回复
主键肯定需要的

没有主键导致的一些操作很麻烦的

如果利大于弊 肯定做有利的事情

别为了一点小问题 丢了西瓜捡芝麻
biandongfeng 2011-06-13
  • 打赏
  • 举报
回复
我也从事2年电信项目的开发,项目组严格规定不允许使用主键和外键,至于原因没有问过,个人认为外键是完全没必要的,如果有了,容易引起一些问题,比如二个表有关系,删除一张表的数据时不允许删除,主键个人认为可要可不要,我们开发中为保持数据的唯一性用的是唯一所以来控制

至于表之间的关系是在设计的时候搞出一个数据字典,大家可以去对照使用
zjwssg 2011-06-13
  • 打赏
  • 举报
回复
非开发,围观,感觉只要是数据有唯一性,就用主键
roykingw 2011-06-13
  • 打赏
  • 举报
回复
主键可以提高数据的完整性和一些效率,另外,从库表设计模式来看,一般都需要对一些单元表设置一个与逻辑无关的主键列,这样便于管理和以后的关联关系扩展。
外键更能体现出库表的结构,对于主要用页面代码来控制完整性的应用,外键的功能可能体现不出来,但是对于大量调用数据库存储过程、函数等来进行逻辑管理的应用,外键就能发挥很大的作用了。我见过一个牛逼的系统,所有的业务逻辑都是通过数据库来进行的,页面值负责传值和调用。这样的系统里,主外键就显得相当的重要了。
kimifdw 2011-06-12
  • 打赏
  • 举报
回复
听了牛人的解释,受益良多
huangdh12 2011-06-12
  • 打赏
  • 举报
回复
主外键都是为了完整性约束吧。 有些项目是靠程序来控制完整性,有些是靠数据库来进行。
我们也比较少用外键,
加载更多回复(7)

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧