我需要创建一个包含字段的表,该字段是引用另一个查询而不是现有表的外键。e、 g.以下陈述是正确的: CREATE TABLE T1 (ID1 varchar(255) references Types)
但是这一个抛出了一个语法错误: CREATE TABLE T2 (ID2 varchar(255) references SELECT ID FROM BaseTypes UNION SELECT ID FROM Types)
我不知道怎样才能达到我的目标。在需要引入临时表的情况下,如何强制每次更新表时都更新此表 BaseTypes
以及 Types
是否已更改?
我正在使用firebirddb和ibexpert管理工具。
1条答案
按热度按时间pxy2qtax1#
外键约束(
references
)只能引用一个表(或者更确切地说是表的主键或唯一键中的列)。您不能使用它来引用选择。如果你想这样做,你需要使用
CHECK
约束,但该约束仅在插入和更新时被检查:它不会阻止其他更改(例如对select中的表的更改)在数据静止时使约束无效。这意味着在插入时,该值可以满足约束,但约束可能-未被注意到!-无效。只有在更新行时才会注意到这一点。一个例子
CHECK
-约束可以是:例如,请看这个小提琴。
或者,如果您的目标是“联合”两个表,请定义一个包含两个表的主键的“超级”表,并从外键约束引用该表。您可以使用触发器填充和更新(如插入和删除)此表。或者您可以使用一个表,并用一个可更新的视图替换现有视图(如果这是可能的,则取决于确切的数据,例如id不应重叠)。
这更复杂,但会给您一个好处,即外键也是在“静止”时强制执行的。