【问题标题】:Is data integrity important when using Ruby on Rails ActiveRecord's associations?使用 Ruby on Rails ActiveRecord 的关联时,数据完整性重要吗?
【发布时间】:2014-09-14 08:56:00
【问题描述】:

我只是在玩 RoR,我注意到诸如 has_manybelongs_to 之类的 ActiveRecord 关联与运行在后面的数据库分离,即这些关联的设置与数据库设置的约束无关.例如,我有一个表comments和一个表users,它们通过has_manybelongs_to语句关联(一个评论属于一个用户,一个用户有很多cmets)。但是,这些关联仍然让我可以将评论分配给例如不存在的用户。原因是数据库中没有定义外键。

我的问题是:我应该仅仅依靠 ActiveRecord 的关联来处理数据完整性,还是应该在迁移文件中添加外键?

谢谢。

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    Rails 拥有一些约定,即数据完整性的实施应该在应用程序中完成,而不是在数据库中。

    要在应用程序级别保持数据整数,您可以使用模型验证来强制存在关联。

    【讨论】:

      【解决方案2】:

      您必须将外键添加到迁移文件中才能使您的关联正常工作。参考上面提到的示例,您必须将属性 user_id 添加到 cmets 表。有关 Active Record 关联如何工作的更多信息,请关注rails guide

      【讨论】:

      • 是的,我知道应该在cmets表中添加一个user_id列,但是外键也应该在数据库中创建?下面@roman.brodetski 的回答指出,Rails 约定强制由应用程序完成数据完整性,而不是由数据库引擎完成。你的观点是什么?
      • 不,您不必在数据库中创建外键。这是由 Rails 应用程序本身处理的。您不必直接在数据库级别执行任何操作(数据库更改)。为确保数据完整性,所有操作都将在应用程序级别执行。
      猜你喜欢
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多