当超类是子类的 FK 时,在 db 中设置多态关联吗?
题
使用类表继承是 受到推崇的 子类引用超类,而不是相反。通常在 Rails 中,多态关联以相反的方向工作——超类指的是子类。
受到推崇的
vehicle
.id
car
.vehicle_id # PK instead of using id (identity column)
boat
.vehicle_id
典型的 Rails 多态关联
vehicle
.id
.subclass_type
.subclass_id
car
.id
boat
.id
我喜欢推荐的方法,因为我可以消除不匹配的密钥。也就是说,给定的汽车及其车辆超级共享相同的 id。
在我的特定实例中,我可能会支持多重继承,因此,例如,我可以拥有一辆混合车船车辆。
问题:
您将如何设置 ActiveRecord 关联...
如果一辆车只能有一个子类呢?
如果一辆车可以有很多子类?(我在这里看到的问题是,通过不指定特定的 subclass_type,关联如何知道要命中哪个表。我猜他们不会,所以必须打所有可能的桌子。所以也许交叉表在这里会有所帮助。)
这是与 ActiveRecord 一起使用的良好设计模式吗?还是说它与 Rails 的对抗程度足以让我们应该避免使用它?
解决方案
我选择了最简单的解决方案:使用多态关联(如第二个块所示)。它将具有更好的性能并且更易于维护。
不隶属于 StackOverflow