23

我有与以下帖子相同的问题。

所以我想知道,为什么 Rails 默认不支持生成外键?没有必要吗?还是我们应该手动完成?

4

2 回答 2

58

不需要数据库约束,就像在汽车中需要系好安全带一样。您可以随心所欲地开车,一切都会很好,直到出现问题。安全带(约束)保证您(数据)的安全。

因此,强烈建议您创建约束以在数据库级别强制执行数据完整性,因为很可能 1)您将在 Rails 之外的某个时间点与数据库进行交互,以及 2)您将在代码中出错导致无效数据。

数据库约束可以做更多的工作,但它可以节省大量工作,尤其是当您的代码可以对数据做出假设并且不必进行大量的有效性检查时。

ActiveRecord 不支持开箱即用外键的原因是因为它与数据库无关,并且并非所有数据库系统都普遍支持外键。

于 2010-04-07T03:46:08.597 回答
9

您可以使用Foreigner插件添加外键支持。

并非所有 ActiveRecord 支持的数据库都支持外键,因此 Rails 框架并未将其作为核心功能。


注意:以上内容不再准确,因为 Rails在 4.2 中添加了 FK 支持。

于 2010-04-07T01:48:12.987 回答