sql - 避免循环依赖 - 两个表在 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 exist
不ERROR: relation "CoffeePod"
存在,因为它们当然相互依赖。
我想我应该使用ALTER TABLE
,但在我的作业中他们写了一个提示:
您可以直接在 CREATE 语句中实现这些更改。
两个表甚至可以在语句中相互引用CREATE
还是我误解了这一点?
解决方案
用于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);
推荐阅读
- facebook - 使用 Facebook 评论社交插件 - 新创建页面的许多不相关评论
- caching - 什么是间接费用百分比?
- android - 使用意图打开音频文件...(“audio/wav”)
- javascript - 类似于 Trello 的 Javascript 拖放悬停临时 Div 占位符?
- c - 为什么我们不能将二维整数数组初始化为指针?
- laravel - 与 vuejs 和 laravel 中的不同语言页面交互
- r - 使用R的for循环中的向后迭代错误
- python - 应用相同形状的掩码时 Numpy 数组丢失尺寸
- java - 如何在它之外调用私有类的属性?
- git - 如何在 EC2 cfn-init 上克隆 CodeCommit 存储库?