我正在创建一个数据库表,并希望确保其中一列中的数据始终受另一个表的列中的数据限制。例如:
Table_1有Column_1
Column_1可以具有值:
V1
V2
V3
V4
V2
v3
现在我正在尝试使用Column_3创建Table_2 并希望确保此列中的值始终是Table_1的一个子集:Column_1
我可以申请实现这个限制吗?
答案 0 :(得分:1)
在Oracle和PostgreSQL中,使用检查约束
例如,在Oracle中:
ALTER TABLE Table_3
ADD CONSTRAINT my_name
CHECK
(column_3 in
(SELECT Column_1 FROM Table_1))
这也适用于PostgreSQL
在SQL Server和DB2中,我相信,您必须创建一个执行实际测试的函数,否则它将是相同的。该函数将有一个参数(column_3的值)并返回EXISTS(SELECT 1 FROM Table_1 WHERE Column_1 =参数)。
不幸的是,在MySQL中你需要使用插入和更新触发器
答案 1 :(得分:0)
Table_1.Column_1
是唯一的吗?
Table_2.Column_3
上的FOREIGN KEY引用它。Table_2
到Table_1
的主键创建一个FK。 Table_2.Column_3
甚至不存在,而是通过加入两个表来获得Table_1.Column_1
的值。您可以将该JOIN放在VIEW中以使其显示(对于客户端应用程序),就像Table_2.Column_3
实际存在一样。