回答

56

数据库的约束条件不再需要在您的汽车中佩戴安全带。你可以驾驶你喜欢的一切,一切都会很好,直到问题到来。安全带(约束)使您(数据)保持安全。

因此,强烈建议您创建约束以在数据库级别强制实施数据完整性,因为这很可能1)您将在Rails之外的某个点与数据库进行交互,2)您将在您的代码导致无效数据。

数据库的限制会更多的工作,但它节省了大量的工作,尤其是当你的代码可以对数据的假设,并没有做顿有效性检查。

原因的ActiveRecord不支持外键开箱即用的,因为它意味着是数据库无关,和外键被普遍所有的数据库系统的支持。

+13

我喜欢安全带的比喻! – Zabba 2010-09-30 05:48:05

+1

另一个原因:除非你的Rails应用程序是一个过程,一个线程,在一台服务器上运行,它可以同时处理多个请求。像'验证的东西:用户名,唯一性:TRUE'可以在这种情况下失败,因为所请求的用户名的每个应用程序实例的检查,没有发现它,然后将其插入。只有一个唯一索引可以防止这种情况一般来说,任何检查,如“是否这个数据是有效的数据库** **现在**?”只能由数据库本身可靠地完成。 – 2016-12-30 14:37:13

9

您可以使用Foreigner插件添加外键支持。

并非所有支持ActiveRecord的数据库都支持外键,因此Rails框架不会将其作为核心功能。


注意:以上不再准确,因为Rails added FK support在4.2中。

+0

我知道......我只是想know..do我们需要这个??? ..... – jojo 2010-04-07 01:49:13

+2

简短的回答是,是的,它是重要的,但默认情况下,你必须使用':options'哈希值。 ActiveRecord生活在一个抽象级别,它不能支持FK。 – 2010-04-07 01:55:22