论坛首页 Java企业应用论坛

想跟大家讨论下,数据库建表是否需要建立外键约束

浏览 10689 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-01-09   最后修改:2013-01-09
宏哥 写道
除了说明说明你的同学实习 公司是一个CRUD公司, 而且肯定是用mysql的.

真实应用当中, 任何 孤立 数据, 就叫做脏数据, 应该尽量避免的, 外键约束就不仅仅非常重要, 而且很多时候, 是必须强制的.

你可以设想一下, 有一笔消费, 但是不知道消费者是谁, 也不知道购买了什么产品, 那么要这笔消费做什么? 产生这笔消费的目的是不是为了制造麻烦?

至于varchar, 我说了, mysql 不是数据库, 所以, 任何扯淡的东西 ,在mysql里面都是正常的.

真正的数据库, 有能力对不同数据类型做索引有不同的存储策略, 并且尤其在金融领域, 涉及金钱计算的浮点计算, decimal就尤为重要. 

一个浮点进位,在财务上有专门的科目来记录消耗. rounding cost.

很明显, 你的同学进入一个扯淡的公司学习扯淡. 然后把扯淡作为benchmark的时候, 自然就把正常情况颠覆了.

顺便说一下, mysql是无法做强制外键约束, 也就是说, mysql并没有实现外键约束, 那帮笨蛋, 10年之内也实现不了. 所以外键在mysql里面是毫无意义的.

被mysql 搞过之后, 一大堆"优化", "技巧","规范"就来了, 病灶就在mysql不是数据库.

很多时候 ,因为语言在 数值计算的溢出限制, 往往利用数据库来做真正的数值计算, 这个在金融领域尤为常见.

人们之所以为数据库花钱, 就是因为数据库能做集合运算, 能做数据完整性, 一致性约束, 能控制事务, 

而mysqler一上来, 就告诉你不要做关联, 不要做子查询, 不要外键................那TMD的要数据库干鸟.

-- MySql style.

里面无数"特性" 都是这样, 可以关联查询, 一查 --" Mysql is copying data  to temp table ......." 

---> "Mysql is gone away"


0 请登录后投票
   发表时间:2013-01-09  
主要看业务对数据的完整性要求高不高,(金融领域的要求很高)如果不高,没必要用外键,完整性由程序控制,这样灵活些。
0 请登录后投票
   发表时间:2013-01-09  
据说啊,据说淘宝的数据库没有外键约束,为了不影响性能。
0 请登录后投票
   发表时间:2013-01-10  
我们公司数据中心同事建议不用数据据库外键约束,为了性能。。。
0 请登录后投票
   发表时间:2013-01-11  
脱离场景考虑要不要用外键约束是没有任何意义的。你首先要考虑,你的应用需要的是性能还是数据一致性保证,其次,如果数据不一致,会对系统造成什么影响,是否可接受。
0 请登录后投票
   发表时间:2013-01-30  
据我所知,大部分项目都不用foreign key。
不过我知道有个工作流产品是都建立了外键的,上海的,你懂的
0 请登录后投票
   发表时间:2013-02-20  
这个我觉得看 程序员 水平了
0 请登录后投票
   发表时间:2013-04-09  
用不用外键,主要是看你项目对数据完整性和正确性的要求,,
           一个严谨的项目,外键是必然的,尤其是那种零容错的项目
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics