我正在创建一个数据库表,并希望确保其中一个列中的数据始终受另一个表的列中的数据限制。例如:
Table_1 有 Column_1
Column_1 可以有值:
v1
v2
v3
v4
v2
v3
现在我正在尝试使用 Column_3 创建 Table_2
并希望确保此列中的值始终是 Table_1:Column_1 的子集
有没有我可以应用的约束来实现这一目标?
我正在创建一个数据库表,并希望确保其中一个列中的数据始终受另一个表的列中的数据限制。例如:
Table_1 有 Column_1
Column_1 可以有值:
v1
v2
v3
v4
v2
v3
现在我正在尝试使用 Column_3 创建 Table_2
并希望确保此列中的值始终是 Table_1:Column_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 = argument)。
不幸的是,在 MySQL 中,您需要在插入和更新触发器上使用
是Table_1.Column_1
独一无二的吗?
Table_2.Column_3
.Table_2
toTable_1
的主键创建一个 FK。Table_2.Column_3
甚至不存在,相反,您将通过 JOIN-ing 两个表来获得 的值Table_1.Column_1
。您可以将该 JOIN 放在 VIEW 中,以使其(对客户端应用程序)看起来就像Table_2.Column_3
实际存在一样。