Rails和数据完整性

时间:2010-11-15 11:44:18

标签: ruby-on-rails database-design

我目前正在研究如何实施我的模型。现在我正在使用多态关系,但它感觉很错,虽然非常方便。我觉得我应该将数据库级完整性实施作为一个额外的安全层。

我是一名质疑申请层的爷爷吗?请讨论。

我确实找到了这篇文章,但它不是Rails特有的 Possible to do a MySQL foreign key to one of two possible tables?

3 个答案:

答案 0 :(得分:1)

一切都取决于。

如果您的应用程序是唯一访问数据库的应用程序(例如,没有其他工具写入它),您可以验证应用程序代码中的数据完整性。

然而,有些事情仍然在数据库中做得最好。 validates_uniqueness_of就是一个很好的例子。两个应用实例可能会报告给定值唯一,但可能存在竞争条件。在这里有一个独特的索引在这里是一个很好的做法。

我总是在我的应用代码中处理完整性检查,使用唯一性约束的索引。我不打扰foreign_key关系,我让ActiveRecord处理它。

答案 1 :(得分:1)

始终有http://www.postgresql.org/docs/current/static/ddl-inherit.html

我从来没有接受它,但是,正在努力(在一个无聊的通勤期间)尝试使用Rails很好地工作。

答案 2 :(得分:0)

我一直在跟上这一点,我想出了一个混合解决方案。

我认为默认的Rails多态功能非常适合快速原型设计。但是对于长期解决方案,我使用中间表(例如CommentableVotable)通过自己的多态关联实现。我找不到帖子,但Bill Karwin在这个网站的几个答案中指出了这个方法。

我不打算进行分片,但如果我这样做,我认为Rails的默认解决方案会很好。

我编写了自己的Mixins来模拟默认的Rails多态性功能。添加外键或在填充表后添加关系时有点棘手,但事情似乎仍然顺利进行。

最后,我的项目最终会有多个服务在未确定的后端运行分析,很可能是Java。除了参照完整性之外,拥有标准关系模型最适合我的需求。

总之,我认为它确实有所依赖,但在90%的情况下,拥有数据库级别的完整性是最好的。