应用程序在更新时会出现错误或出现错误,有些隐藏在数月或数年之后就会被检测到,产生孤立的记录,指向无处的密钥等,即使使用适当的测试套件也是如此。
尽管Rails并没有在数据库级别强制实施参照完整性 - 并且由于其他地方讨论的一些好的理由,它将保持这样的状态 - 拥有可以检查数据库是否处于一致状态的工具仍然是一件好事。 / p>
由于模型描述了“应该是什么”,因此离线工具不可能验证所有数据的完整性。它可以在备份数据之前定期运行,或者只是为了开发人员的良好睡眠。
有这样的东西吗?
答案 0 :(得分:2)
我不知道这样的工具。至少你知道参考完整性危害的危险。为什么要让自己受苦呢?正如dportas建议的那样,首先使用外键引用。
要在迁移中使用它,请添加以下内容:
execute('ALTER TABLE users ADD FOREIGN KEY (language_id) REFERENCES languages(id)')
使用户的language_id列引用语言表中的有效行。
根据您的DBMS,这甚至会自动为您创建索引。还有rails的插件(请查看pg_on_rails),它们为这些任务定义了易于使用的别名函数。
仅检查备份文件的完整性是没有意义的,因为错误已经发生,并且您的数据可能已经搞砸了。 (我去过那儿) 另一方面,当使用如上所述的外键约束时,每次破坏完整性的操作都将失败。
当你感到疼痛(=做手术)时,可以将它想象成去看牙医,而不是用牙齿刷牙,这可以保证你的牙齿在你的余生都能正常使用。
需要考虑的另一件事:应用程序中的错误将更容易定位,因为在尝试插入损坏数据的代码中会引发异常。
所以请使用外键约束。您可以轻松地将这些语句添加到现有数据库中。
答案 1 :(得分:0)
如何使用DBMS来强制执行RI?你不需要Rails为你做这件事。