了解到很多公司禁止使用外键,现在使用关系型数据库是否还应该使用外键、触发器、存储过程等?

2014-12-18 13:43:46 +08:00
 Feiox
没企业工作经验的人特来讨教 ~
感觉,没有关系的数据库还是关系型数据库么 ~
3798 次点击
所在节点    数据库
53 条回复
luikore
2014-12-19 03:55:41 +08:00
外键是个可以程序替代的功能, 而且写在程序能轻松 scale, 加外键等于给数据库增加鸭梨, 而且备份恢复也可能会巨慢

选择关系数据库的关键是事务而不是外键, 记录间事务是 nosql 代替不了的
nevernet
2014-12-19 09:36:20 +08:00
@huobazi 这也是一种开发方式
fengchang
2014-12-19 09:43:55 +08:00
灵活意味着更容易出错,不过大多数人写的应用没啥重要的东西,错就错吧
thinkmore
2014-12-19 09:44:02 +08:00
我们公司用MySQL(myisam),不支持外键,不使用事务呢!根据业务场景来使用吧!也不能说绝对,不过楼上哥们说的好,大公司的话确实不怎么使用,首先是移植性,易用性,其次是性能问题,只能说具体情况具体分析了
est
2014-12-19 09:47:26 +08:00
不用外键就不吐槽了。你们见过一个千万行级别的用户行为表user_id是varchar而且没索引的么。。。。这个表被某官网每天几十万人查询。
tabris17
2014-12-19 12:36:24 +08:00
@xfwduke 下划线作为通配符是like字符串里的。关表名字段名啥事儿?
iT2afL0rd
2014-12-19 12:54:44 +08:00
@min 当你的数据量达到一定的程度以后,你会发现FK带来的performance影响以及maintain的开销成倍增加。到时候你只想说一句:妈蛋,当时那个SB搞得FK!
cxshun
2014-12-19 13:07:31 +08:00
互联网公司一般不推荐用,你用了到时要分库就麻烦了。企业应用一般都会用的吧。
xinyewdz
2014-12-19 13:19:45 +08:00
我也建议不使用外键,在程序中维护好关系是最好的办法,更好的维护关系。这就需要写代码的人有功底。。。有外键的表,性能,维护都不好做。
fengchang
2014-12-19 13:28:34 +08:00
@huobazi 把业务逻辑写到sp里确实很奇葩,但也是有理由的。以前做过一个政府的项目,用.NET,甲方对更新DLL控制的很严,经常半年部署不上去。后来项目组就开始努力避免改C#代码,写了一个通用的dispatch,然后把业务逻辑分布在JS,模板语言和存储过程中,成功实现了不更新DLL上线新功能。
min
2014-12-19 23:31:50 +08:00
@iT2afL0rd 可以分享一下数据库软件是什么吗,数据量大概多少,数据库server硬件是什么
Lao9
2014-12-20 13:24:44 +08:00
除非绕开sql层,使用nosql来进行数据处理。否则使用外键是数据库系统考量优化和约束的先决条件。这种特性决定了事务中考虑约束,分析中考虑性能。而数据库引擎处理这类问题往往是约束级别高于性能。

一般根据以上原则考虑外键的使用,而不是方便性和移植性。

外键的使用是传统数据库的基础,如果用则需要对使用者有扎实的基础知识。否则的话,都是属于用不好的范畴。
iT2afL0rd
2015-01-05 11:35:27 +08:00
@min 用MySQL,数据量达到100M级别之后就会很烦躁了,硬件就是DELL的R620。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/154844

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX