如何指定列中的值必须已存在于另一个表中?

时间:2013-11-20 23:56:00

标签: sql constraints psql

假设我有以下设置:


CREATE TABLE t1 (
    id integer PRIMARY KEY,
    txt character varying(30));

CREATE TABLE t2 (
    id integer PRIMARY KEY,
    t1_id integer,
    t1_txt character varying,
    FOREIGN KEY (t1_id) REFERENCES t1(id));

由于...嗯,“优化”的原因,我需要t2.t1_txt存在于t1中的某个地方,几乎就像它是一个外键,但是没有唯一约束。我的第一个问题是:最好的方法是什么?

我的第二个问题是:使用这些相同的表格,当t2.t1_id = t1.id时,强制t2.t1_txt与t1.txt重合的最佳方法是什么?如何从t1.txt级联更新到t2.t1_txt?

非常感谢。

2 个答案:

答案 0 :(得分:1)

听起来你正在复制两个表之间txt的值。 可以使用插入/更新触发器执行此操作,但我建议使用视图

CREATE TABLE t1 (
    id integer PRIMARY KEY,
    txt character varying(30));

CREATE TABLE t2 (
    id integer PRIMARY KEY,
    t1_id integer,
    FOREIGN KEY (t1_id) REFERENCES t1(id));

CREATE VIEW t2ANDt1
AS
   SELECT 
     id,
     t1_id,
     t1.txt
   FROM t2
   INNER JOIN t1 ON t2.t1_id = t1.id

答案 1 :(得分:0)

从表t2中取出t1_txt

将t1.id添加到表t2

将其设为t1的外键