来自另一个表的参考数据

时间:2013-02-25 09:26:59

标签: database database-design foreign-keys

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

Table_1有Column_1
Column_1可以具有值:
V1
V2
V3
V4
V2
v3

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

我可以申请实现这个限制吗?

2 个答案:

答案 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是唯一的吗?

  • 如果,只需将其设为PRIMARY KEY或UNIQUE,然后从Table_2.Column_3上的FOREIGN KEY引用它。
  • 如果(正如您的示例所暗示的那样),请从Table_2Table_1的主键创建一个FK。 Table_2.Column_3甚至不存在,而是通过加入两个表来获得Table_1.Column_1的值。您可以将该JOIN放在VIEW中以使其显示(对于客户端应用程序),就像Table_2.Column_3实际存在一样。