Rails是否需要数据库级约束?

我遇到与以下post相同的问题。

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

不需要数据库限制,只需要在您的汽车中佩戴安全带。 你可以随心所欲地开车,一切都会很好,直到问题到来。 安全带(约束)使您(数据)安全。

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

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

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

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

并非所有受支持的ActiveRecord数据库都支持外键,因此Rails框架不会将其作为核心function包含在内。


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