首页 > 解决方案 > 避免循环依赖 - 两个表在 CREATE 语句中相互引用 - PostgreSQL

问题描述

在我的 postgresql 作业中,我必须编写如下内容:

CREATE TABLE Coffee (
    name VARCHAR(30) PRIMARY KEY,
    body VARCHAR(10),
    referencepod INTEGER REFERENCES CoffeePod(modelnr)
);

CREATE TABLE CoffeePod(
    modelnr INTEGER PRIMARY KEY, 
    material VARCHAR(30) NOT NULL, 
    contains VARCHAR(30) REFERENCES Coffee(name),
);

IE:

每杯咖啡都有一个咖啡包,作为这种咖啡的“参考包”

但只有这两行让我感到困惑: referencepod INTEGER REFERENCES CoffeePod(modelnr)contains VARCHAR(30) REFERENCES Coffee(name)

当我将这两行添加到其中时,psql我要么得到要么ERROR: relation "Coffee" does not existERROR: relation "CoffeePod"存在,因为它们当然相互依赖。

我想我应该使用ALTER TABLE,但在我的作业中他们写了一个提示:

您可以直接在 CREATE 语句中实现这些更改。

两个表甚至可以在语句中相互引用CREATE还是我误解了这一点?

标签: sqlpostgresql

解决方案


用于alter table添加约束之一:

CREATE TABLE Coffee (
    name VARCHAR(30) PRIMARY KEY,
    body VARCHAR(10),
    referencepod INTEGER
);

CREATE TABLE CoffeePod(
    modelnr INTEGER PRIMARY KEY, 
    material VARCHAR(30) NOT NULL, 
    contains VARCHAR(30) REFERENCES Coffee(name),
);

ALTER TABLE Coffee ADD CONSTRAINT FOREIGN KEY (referencepod) REFERENCES CoffeePod(modelnr);

推荐阅读