首页 > 教育学习 > 为什么 > 大家设计数据库时使用外键吗?

大家设计数据库时使用外键吗?
2012-01-19 17:30:29   来源:   点击:

    大家设计数据库时使用外键吗?尽管在讨论数据库时知道表与表之间有外键关系, 但是具体到表定义就省略掉外键定义, 而选择在应用层管理相关的外键逻辑. 只因为听说外键性能不好, 或者说有外键后表与表之间太耦合了, update, delete等操作都会涉及相关的表.

    13 个答案

    • 答案 1:

      怎么总有人问我数据库的问题...透露一个秘密,我在前公司的时候摘掉了所有的外键。业务约束通过中间层控制。面向Web的应用应该这样。一个DBA是否有足够的设计能力,就看他有多大的能力做反范式设计就可以了。不要问为什么。
    • 答案 2:

      外键在早期企业系统数据库设计里面比较多吧,本意是好了,帮程序员节省delete,update操作,实际上增加了潜规则,也增加了软件复杂度。互联网应用中,一般流量比较大,数据库当memecache用,大表+冗余字段,索引还建在外部用sphinx之类,基本上没有表和表的关联关系,外键无用
    • 答案 3:

      一个DBA是否有足够的设计能力,就看他有多大的能力做反范式设计就可以了。有这句,就够了!
    • 答案 4:

      我想,这取决于数据库的用途、规模、架构,有外键,可以提高鲁棒性、健壮性,但是约束检验显然会拖慢速度。规模上说,数据量大的不适合用外键,小的可以用;用途上安全性、可靠性很重要的就要用外键,否则可以不用。具体情况具体解决了,因为也有矛盾的时候,数据量极大,但是又要求高可靠,例如银行金融、芯片生产等,仍然需要外键的存在。可以通过SAN+RAID等硬件提升解决矛盾。要求高并发的情况下,并不适合外键,有的连关系数据库都不用了,甚至数据库都不用了。这类问题真没有绝对的答案,什么情况下该怎样做,只能是多想,多做了,错的多了,就懂了。
    • 答案 5:

      数据库的诸多设计,帐号,权限,约束,触发器,都是为 C/S 结构设计的,是以 C 端不可信做为假设前提的。B/S 模式安全边界前移到 web 服务层,应用与数据库之间是可信的,应用自行完成这些功能更加灵活。所以能不用就不用。
    • 答案 6:

      NOSQL是王道啊王道。 自从用了mongodb,腰不酸头不痛了,吃嘛嘛香
    • 答案 7:

      互联网产品,只要是前台的,很少用外键。join操作是performance killer,不符合互联网程序高性能的要求
    • 答案 8:

      很少使用外键,因为外键虽然增加了一致性,但是会减弱性能。虽然现在因为磁盘廉价,所以大家都提倡反范式,但是不明白为什么要反,为什么不能问为什么?不搞清楚,跟着瞎反,到后面会发现数据库性能超级差。可以反范式,但是一定要明白为什么反,很多时候反是为了增加性能,假如不能增加性能,反而会减弱性能那为什么要反呢
    • 答案 9:

      不是很明白 弱弱的问问 外键在设计的时候设置为级联删除 这样在删除用户的时候可以删除用户的其它的操作。。。这样不是可以消除数据库的冗余吗 ?
    • 答案 10:

      我基本上最后的库里面都是没有外键的
    • 答案 11:

      1st:遇到问题解决问题;2nd:避免遇到问题。条条框框不用刻意在意。孰能生巧嘛.....
    • 答案 12:

      “一个DBA是否有足够的设计能力,就靠他有多大的能力做反范式设计就可以了。不要问为什么。”原来这句话出自这里啊,最近老有人跟我提...
    • 答案 13:

      顶这句:“一个DBA是否有足够的设计能力,就靠他有多大的能力做反范式设计就可以了。不要问为什么。”顶大辉

相关热词搜索:

上一篇:怎样模拟web service的返回?
下一篇:为什么代码都是用英文来写的,将来会有用中文写代码的那天吗?