【发布时间】:2009-11-12 09:57:09
【问题描述】:
如果我没记错的话,Rails 有自己的外键逻辑,使用 ActiveRecord 实现。这是否有助于提高性能,即您不依赖数据库进行额外的处理逻辑或进行频繁的数据库事务?还是其他原因?
【问题讨论】:
标签: ruby-on-rails database activerecord
如果我没记错的话,Rails 有自己的外键逻辑,使用 ActiveRecord 实现。这是否有助于提高性能,即您不依赖数据库进行额外的处理逻辑或进行频繁的数据库事务?还是其他原因?
【问题讨论】:
标签: ruby-on-rails database activerecord
Rails 仍然像平常一样使用 外键。只是它没有强制使用外键约束。
假设您在模型中设置了验证以阻止数据损坏,则无需在数据库中使用显式外键约束即可。
定义约束是一种重复形式,但我更喜欢它来维护数据完整性。即使定义了 ActiveRecord 关联和验证,在迁移或批量更新等期间仍然很容易弄乱数据结构。有许多插件可以轻松地将 FK 定义为正常 ActiveRecord 迁移的一部分
此外,即使您不创建 FK 约束关系,您仍可能希望至少在外键上定义一个索引,因此当您执行 post.comments 之类的操作时,您不会导致全表扫描找到与post_id 匹配的所有 cmets(当您定义 FK 约束时,许多 DBMS 会为您隐式执行此操作)。
【讨论】:
不,那是为了避免重复。干燥。数据库中的外键关系反映在应用程序中。描述这种关系的地方应该只有一处。
【讨论】:
我认为这与应用程序的健壮性有关。
DBA 可以轻松删除任何外键约束,从而使您的应用陷入混乱。
尝试插入将引发 SQL 异常。如果您在表上有多个外键约束,那么确定哪个列和值触发了异常会很痛苦。首先检查并给最终用户一个有意义的^h^h^h^h^h^henacing^h^h^h^h^h^h^h^h有意义的错误消息要容易得多。
在大型数据库中,通常的做法是关闭外键约束,以提高性能并减少维护、备份/恢复和复制出错的可能性。
【讨论】: