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

joj*_*ojo 23 ruby-on-rails foreign-keys foreign-key-relationship auto-generate

我遇到与以下帖子相同的问题.

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

Til*_*dor 57

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

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

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

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

  • 我喜欢安全带类比! (14认同)

Ada*_*sek 9

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

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


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

  • 简短的回答是,是的,它很重要,但默认情况下你必须使用`:options`哈希.ActiveRecord生活在一个抽象层面,它无法承担对FK的支持. (2认同)