1

我正在创建一个数据库表,并希望确保其中一个列中的数据始终受另一个表的列中的数据限制。例如:

Table_1 有 Column_1
Column_1 可以有值:
v1
v2
v3
v4
v2
v3

现在我正在尝试使用 Column_3 创建 Table_2
并希望确保此列中的值始终是 Table_1:Column_1 的子集

有没有我可以应用的约束来实现这一目标?

4

2 回答 2

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 中,您需要在插入和更新触发器上使用

于 2013-02-25T09:31:26.160 回答
0

Table_1.Column_1独一无二的吗?

  • 如果,只需将其设为 PRIMARY KEY 或 UNIQUE,然后从Table_2.Column_3.
  • 如果(如您的示例显然暗示的那样),请从Table_2toTable_1的主键创建一个 FK。Table_2.Column_3甚至不存在,相反,您将通过 JOIN-ing 两个表来获得 的值Table_1.Column_1。您可以将该 JOIN 放在 VIEW 中,以使其(对客户端应用程序)看起来就像Table_2.Column_3实际存在一样。
于 2013-02-25T10:21:13.193 回答