Rails外键逻辑

时间:2009-11-12 09:57:09

标签: ruby-on-rails database activerecord

如果我没有错,那么Rails有自己的使用ActiveRecord实现的外键逻辑。这有助于提高性能,即您不依赖数据库来获取额外的处理逻辑或进行频繁的数据库事务处理吗?或者是出于其他原因?

3 个答案:

答案 0 :(得分:2)

不,那是为了避免重复。干。数据库中的外键关系反映在应用程序中。应该只有一个地方描述这种关系。

答案 1 :(得分:2)

Rails仍然使用外键和正常一样。只是它没有强制使用外键约束

假设您在模型中设置验证以阻止数据损坏,则可以在不使用数据库中的显式外键约束的情况下使用。

定义约束是一种复制形式,但我更喜欢它来维护数据完整性。即使定义了ActiveRecord关联和验证,在迁移或批量更新等过程中仍然很容易弄乱数据结构。有许多插件可以让您轻松定义您的FK DRYly作为正常ActiveRecord迁移的一部分

此外,即使您不创建FK约束关系,您仍然可能希望至少定义外键的索引,因此当您执行post.comments之类的操作时,您不会导致完整表扫描以查找匹配post_id的所有注释(当您定义FK约束时,许多DBMS会隐式为您执行此操作)。

答案 2 :(得分:1)

我认为这是关于应用程序的健壮性。

DBA可以轻松删除任何外围密钥约束,使您的应用程序陷入混乱。

尝试插入将引发SQL异常。如果对表有几个外键约束,那么确定哪个列和值触发了异常是一件痛苦的事。首先检查并给最终用户提供一个有用的^ h ^ h ^ h ^ h ^ h ^ henacing ^ h ^ h ^ h ^ h ^ h ^ h ^ h ^ hmeaningful错误消息要容易得多。

在大型数据库中,通常的做法是关闭外部密钥,以加快性能并使维护,备份/恢复和复制不易出错。