sql - PostgreSQL 复合外键“列列表不得包含重复项”
问题描述
这是我的示例架构:
CREATE TABLE users (
userid BIGSERIAL PRIMARY KEY,
name varchar(25) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE follows (
userid1 int NOT NULL,
userid2 int NOT NULL,
PRIMARY KEY (userid1, userid2),
FOREIGN KEY (userid1, userid2) REFERENCES users (userid) ON DELETE CASCADE
);
如果我运行这个命令,我会得到:
ERROR: number of referencing and referenced columns for foreign key disagree
如果我添加... REFERENCES users (userid, userid) ON DELETE CASCADE
我得到:
ERROR: foreign key referenced-columns list must not contain duplicate
我知道如果我在每一行中输入它们各自的引用,它会起作用,但最好不要重复自己。
如何通过使用相同依赖项的复合外键来实现这一点?
解决方案
您需要两个单独的外键约束:
CREATE TABLE follows (
userid1 int NOT NULL,
userid2 int NOT NULL,
PRIMARY KEY (userid1, userid2),
FOREIGN KEY (userid1) REFERENCES users (userid) ON DELETE CASCADE,
FOREIGN KEY (userid2) REFERENCES users (userid) ON DELETE CASCADE
);
推荐阅读
- python - 将列表转换为浮点数
- java - SpringJDBC 模板的实体或 DTO 方法?
- android - 如何缩短 Android Studio 中的导入以获得更简洁的代码
- c - 如果文档 A3 格式和横向,如何使用 C# 将 Word 文件页面转换为 png 图像?
- xamarin - 如何在跨平台项目的页面转换中使用 SetCustomAnimations
- next.js - 如何将日期注入到 react-dates 库中?
- forms - 未定义不是对象(评估'_this._ageinput = _ref2')
- excel - Worksheet_Change 事件未使用无线扫描仪触发
- mongoose - 如何使用猫鼬对带有数字的名称进行排序?
- javascript - 更新 jQuery 中的现有属性