sql - Oracle:错误 ORA-02270(此列列表没有匹配的唯一键或主键)
问题描述
我尝试创建 4 个表并将其链接在一起,但它显示此错误 ORA-02270。我怎样才能解决这个问题?当我声明导致此错误的外键和主键时是否有任何错误。
CREATE table City (
city_name VARCHAR(128),
state_name VARCHAR(128),
population number,
elevation number,
PRIMARY KEY (city_name, state_name),
FOREIGN KEY (city_name) REFERENCES Mayor(city_name)
);
CREATE table State (
state_name VARCHAR(128) PRIMARY KEY,
region VARCHAR(128),
FOREIGN KEY (state_name) REFERENCES City(state_name),
FOREIGN KEY (state_name) REFERENCES Mayor(state_name),
FOREIGN KEY (state_name) REFERENCES Governor(state_name)
);
CREATE table Mayor (
mayor_name VARCHAR(128),
city_name VARCHAR(128),
state_name VARCHAR(128),
party VARCHAR(128),
PRIMARY KEY (mayor_name, city_name, state_name)
);
CREATE table Governor (
governor_name VARCHAR(128),
state_name VARCHAR(128),
party VARCHAR(128),
PRIMARY KEY (governor_name, state_name)
);
解决方案
您的外键都混淆了,导致语法上无效的关系。我理解的关系如下:
州长引用州
一个城市代表一个国家
一位市长提到了一座城市
可能,您还应该有一个region
表格,该state
表格将引用该表格。
这是一个有效并实现上述关系的新版本:
CREATE table State (
state_name VARCHAR(128) PRIMARY KEY,
region VARCHAR(128)
);
CREATE table Governor (
governor_name VARCHAR(128),
state_name VARCHAR(128),
party VARCHAR(128),
PRIMARY KEY (governor_name, state_name),
FOREIGN KEY (state_name) REFERENCES State(state_name)
);
CREATE table City (
city_name VARCHAR(128),
state_name VARCHAR(128),
population number,
elevation number,
PRIMARY KEY (city_name, state_name),
FOREIGN KEY (state_name) REFERENCES State(state_name)
);
CREATE table Mayor (
mayor_name VARCHAR(128),
city_name VARCHAR(128),
state_name VARCHAR(128),
party VARCHAR(128),
PRIMARY KEY (mayor_name, city_name, state_name),
FOREIGN KEY (state_name, city_name) REFERENCES City(state_name, city_name)
);
推荐阅读
- python - 自动决定从python中的相关矩阵中删除哪个特征
- python - 将 var 值从 HTML 传递到 python
- html - 无论内容如何,如何使每个列标题具有相同大小的 flexbox 布局?
- xml - 将许可证文件复制到 bin/Release/Publish
- tfs - Azure DevOps 服务器 - 如何将现有集合/项目迁移到 SCRUM
- google-sheets - 在查询语句中使用命名范围的 Google 表格不起作用
- android - 如何在 React-Native (Expo) 应用程序中显示应用程序图标徽章?
- mysql - 拒绝访问; 您需要(至少其中一项)超级特权
- elasticsearch - Elasticsearch:创建索引时设置的总字段限制
- android - Pusher Chatkit Android 获取指定房间的状态读数