Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Create Table语句中的错误逻辑在哪里?_Sql_Oracle_Primary Key_Create Table_Composite Primary Key - Fatal编程技术网

Sql Create Table语句中的错误逻辑在哪里?

Sql Create Table语句中的错误逻辑在哪里?,sql,oracle,primary-key,create-table,composite-primary-key,Sql,Oracle,Primary Key,Create Table,Composite Primary Key,我正在尝试运行这些语句,但我收到一个错误,提示此列列表没有匹配的唯一键或主键。你能帮我解决这个问题吗 我在尝试创建表站点时遇到问题: CREATE TABLE OLMP_COUNTRY ( NOC CHAR(3), TEAM VARCHAR2(100), CITY VARCHAR2(100), CONSTRAINT country_pk PRIMARY KEY(NOC) ); CREATE TABLE ATHLETE ( ATHELTE_ID CHAR(8), NAME VARCHAR2(10

我正在尝试运行这些语句,但我收到一个错误,提示
此列列表没有匹配的唯一键或主键
。你能帮我解决这个问题吗

我在尝试创建表站点时遇到问题:

CREATE TABLE OLMP_COUNTRY (
NOC CHAR(3),
TEAM VARCHAR2(100),
CITY VARCHAR2(100),
CONSTRAINT country_pk PRIMARY KEY(NOC)
);

CREATE TABLE ATHLETE (
ATHELTE_ID CHAR(8),
NAME VARCHAR2(100),
AGE CHAR(3),
SEX CHAR(1),
HEIGHT CHAR(3), 
WEIGHT DECIMAL(3,1), 
NOC CHAR(3), 
CONSTRAINT athlete_pk PRIMARY KEY(ATHLETE_ID), 
CONSTRAINT country_fk FOREIGN KEY(NOC) REFERENCES OLMP_COUNTRY(NOC) 
); 

CREATE TABLE SITE (
NOC CHAR(3),
CITY VARCHAR2(100),
SEASON VARCHAR2(20),
YEAR CHAR(4),
CONSTRAINT site_pk PRIMARY KEY(NOC),
CONSTRAINT country_fk FOREIGN KEY(CITY) REFERENCES OLMP_COUNTRY(CITY)
);

CREATE TABLE RESULTS (
RESULT_ID CHAR(8),
MEDAL CHAR(6),
ATHLETE_ID CHAR(8),
SPORT_EVENT VARCHAR2(100), 
YEAR CHAR(4), 
GAMES VARCHAR2(50), 
CONSTRAINT results_pk PRIMARY KEY(RESULTS_ID) 
);

CREATE TABLE EVENT (
SPORT_EVENT VARCHAR2(100), 
SPORT VARCHAR2(50),
GAMES VARCHAR2(50) 
CONSTRAINT event_pk PRIMARY KEY(SPORT_EVENT)
);

外键应该引用它所引用的表的主键

所以我想你想要:

CREATE TABLE SITE (
    NOC CHAR(3),
    CITY VARCHAR2(100),
    SEASON VARCHAR2(20),
    YEAR CHAR(4),
    CONSTRAINT site_pk PRIMARY KEY(NOC),
    CONSTRAINT site_country_fk FOREIGN KEY(NOC) REFERENCES OLMP_COUNTRY(NOC)
);

我不知道为什么要在两个表中重复
CITY
,但是外键约束应该是主键。您可以使用
JOIN
查找城市。它不应重复。

外键应引用它所引用的表的主键

所以我想你想要:

CREATE TABLE SITE (
    NOC CHAR(3),
    CITY VARCHAR2(100),
    SEASON VARCHAR2(20),
    YEAR CHAR(4),
    CONSTRAINT site_pk PRIMARY KEY(NOC),
    CONSTRAINT site_country_fk FOREIGN KEY(NOC) REFERENCES OLMP_COUNTRY(NOC)
);

我不知道为什么要在两个表中重复
CITY
,但是外键约束应该是主键。您可以使用
JOIN
查找城市。不应重复。

“…引用表的主键…”——为了完整性,我将添加:…或带有
唯一约束的列。我实际上从另一个站点上帮助我的其他人那里得到了答案。。现在它有意义了。我还运行了更新的语句,它说一个现有约束已经使用了这个名称?那么我必须把这个国家重新命名吗?@Impaler。我不想完成。我试图就如何创建数据库提供好的建议。它们的键引用应该是主键。“它说一个现有约束已经使用了这个名称?”-是的,您已经在表上使用过它。这就是命名外键的常见约定,即使用子表和父表;e、 g.
atternate\u country\u fk
,“site\u country\u fk`”…引用表的主键…--为了完整性,我会添加:…或带有
唯一约束的列。实际上,我从另一个站点上帮助我的其他人那里得到了这个答案。。现在它有意义了。我还运行了更新的语句,它说一个现有约束已经使用了这个名称?那么我必须把这个国家重新命名吗?@Impaler。我不想完成。我试图就如何创建数据库提供好的建议。它们的键引用应该是主键。“它说一个现有约束已经使用了这个名称?”-是的,您已经在表上使用过它。这就是命名外键的常见约定,即使用子表和父表;e、 g.
运动员/国家/地区
,“site\u country\u fk`通过谷歌搜索错误信息,阅读许多问题的所有答案,以及手册,你学到了什么?顺便说一下,Oracle中字符串的标准类型是
VARCHAR2
。只有当你想添加指定长度的空格时,你才应该使用高度专业化的类型,也就是说,永远不要。你从谷歌搜索错误信息和手册中找到的许多问题的所有答案中学到了什么?顺便说一下,Oracle中字符串的标准类型是
VARCHAR2
。您应该只在需要添加指定长度的空格的情况下使用高度专业化的类型,也就是说,永远不要。