我想在Rails应用程序的模型中引入一个新的“父”概念。
我已经有taskA
和taskB
表,其中包含有关不同类型任务的数据。 taskA
和taskB
有很多区别,但有一些共同的属性。我现在要介绍另一种模型taskParent
,该模型将保存公用数据的副本以加快查找速度,并引用taskA
或taskB
。 taskParent
将有自己的表格。此时,我的应用程序将仅从taskParent
中读取数据,而所有写入操作均将在子表上进行。
在taskParent
表中,如何引用taskA
或taskB
?看来我有两个选择:
A)。一列type
和一列id
。
专业版:如果以后我将针对其他类型的任务引入其他表格,则易于支持新的任务类型
缺点:难以维护参照完整性,因为无法在数据库级别使用外键实现(据我所知)
B)每个带有外键约束和db约束的子表的一列,以确保仅设置一个外键
专业版:更容易确保引用完整性。如果相关的taskParent
或taskA
被删除,则可以自动从taskB
中删除项目。
缺点:难以支持其他类型的任务,因为这将需要向表中添加其他列并修改数据库约束以确保唯一性
我真的很想在数据库级别上有约束,但是B方法的缺点使我感到恐惧,因为将来很有可能我会添加其他类型的任务(及其各自的表)。有人对采用哪种方法有什么建议吗?
我正在使用Postgres。