如何在Rails中实现多表继承:外键或类型+ ID?

时间:2019-06-24 21:42:16

标签: database postgresql activerecord

我想在Rails应用程序的模型中引入一个新的“父”概念。

我已经有taskAtaskB表,其中包含有关不同类型任务的数据。 taskAtaskB有很多区别,但有一些共同的属性。我现在要介绍另一种模型taskParent,该模型将保存公用数据的副本以加快查找速度,并引用taskAtaskBtaskParent将有自己的表格。此时,我的应用程序将仅从taskParent中读取数据,而所有写入操作均将在子表上进行。

taskParent表中,如何引用taskAtaskB?看来我有两个选择:

A)。一列type和一列id

专业版:如果以后我将针对其他类型的任务引入其他表格,则易于支持新的任务类型

缺点:难以维护参照完整性,因为无法在数据库级别使用外键实现(据我所知)

B)每个带有外键约束和db约束的子表的一列,以确保仅设置一个外键

专业版:更容易确保引用完整性。如果相关的taskParenttaskA被删除,则可以自动从taskB中删除项目。

缺点:难以支持其他类型的任务,因为这将需要向表中添加其他列并修改数据库约束以确保唯一性

我真的很想在数据库级别上有约束,但是B方法的缺点使我感到恐惧,因为将来很有可能我会添加其他类型的任务(及其各自的表)。有人对采用哪种方法有什么建议吗?

我正在使用Postgres。

0 个答案:

没有答案