Sql 如何设计相互依赖的两个表?也就是说,如果TableB中没有行,TableA的行就不能存在,反之亦然
假设从应用程序的角度来看,我们有以下要求: 超类有一些属性,如Type、PropertyA、PropertyB等。 子类、子类B、子类C都继承了这些属性,当然也可以有自己的属性。 请注意,大约有20个子类。为了这个例子,我只列出了三个 要记住的主要一点是,超类的实例必须是一个且只有一个子类。因此,超类实例不能同时是子类a和子类B,并且超类实例不能单独存在。 此外,同一类型属性的实例可以存在于多个子类中。例如,Type=='Type1'可以从subassa和subassc中获取多行 基于此,我通常甚至不会创建超类表。取而代之的是不同的子类表,如下所示: 我只是在每个表中重复继承的属性。问题解决了 然而,我考虑创建一个超类表的唯一原因是因为我想运行一个查询,它允许我获取特定类型的所有实例。像这样: 从类型为'Type1'的超类中选择PropertyA 这可能会从多个子类中获取行。这将避免我查看所有子类表的痛苦 所以,本质上,如果子类表中没有相应的行,超类表中就不可能存在行。最重要的是,如果子类表中没有相应的行,子类表中就不能存在行 显然,这几乎是不可能的,因为我们将无法插入或删除任何行 几天来我一直在想办法。既然我不能,我希望这里的人能引导我走上正确的道路 我只需要能够从一个查询中获得相同类型的子类Sql 如何设计相互依赖的两个表?也就是说,如果TableB中没有行,TableA的行就不能存在,反之亦然,sql,postgresql,Sql,Postgresql,假设从应用程序的角度来看,我们有以下要求: 超类有一些属性,如Type、PropertyA、PropertyB等。 子类、子类B、子类C都继承了这些属性,当然也可以有自己的属性。 请注意,大约有20个子类。为了这个例子,我只列出了三个 要记住的主要一点是,超类的实例必须是一个且只有一个子类。因此,超类实例不能同时是子类a和子类B,并且超类实例不能单独存在。 此外,同一类型属性的实例可以存在于多个子类中。例如,Type=='Type1'可以从subassa和subassc中获取多行 基于此,我通常
谢谢你的帮助 您可以使用延迟约束轻松实现这一点 例如: 你看过吗?听起来它会做你想做的,尽管它确实有一些。
create table test
(id serial primary key,
child_id integer);
create table test2
(id serial primary key,
child_id integer references test(id) deferrable initially deferred);
alter table test2 add constraint my_own_grandpa
foreign key (child_id) references test2(id) deferrable initially deferred;