Rails 应用程序中的引用完整性

Referential integrity in Rails applications

我是 rails 的新手,来自 Symfony(其灵感来自 Rails)。

我习惯于完整地定义我的数据库模式,并确保我的表是 3NF,必要时是 4NF 等等。

我找不到在数据库级别明确指定 CONSTRAINTS 的方法,在网上搜索后,我看到了几个帖子,例如这个:Hacked Ref Integrity,这让我感到非常惊讶。

诚然,我链接到的文章已经很老了,希望现在情况会有所改善。

rails 中(显然?)缺少 RI 使得整个框架与受其启发的 Symfony 相比显得相当业余。

请说不是这样...

rails 的最初方法是将此责任放在应用程序域中。这是一个有意识的妥协,如果你寻找它,你会发现很多关于它的讨论

然而,由于越来越多的开发人员表达了您的担忧,因此确实发展了多种方法来识别数据库在其中的作用。

正如您提到的文章also shows,您实际上可以在正常迁移的迁移中显式指定很多约束:

http://guides.rubyonrails.org/active_record_migrations.html#foreign-keys

add_foreign_key :articles, :authors

或者您可以更进一步,使用像 schmea plus gem

这样的扩展