【问题标题】:How do I create a table whereby the Foreign Keys (2) are part of a Composite Primary Key in another table (Oracle)? [duplicate]如何创建一个表,其中外键 (2) 是另一个表 (Oracle) 中复合主键的一部分? [复制]
【发布时间】:2020-05-04 09:52:17
【问题描述】:

我有两张桌子。

  • Section (SectionNo, Semester, CourseID)

  • Registration(Registration-ID、StudentID、SectionNo、Semester)

当我想引用注册表中的 FK 属性“SectionNo”和“Semester”时,我在创建注册表时遇到了麻烦。

我的代码是这样的:

CREATE TABLE REGISTRATION(  
Registration_ID Int NOT NULL,  
StudentID Int NOT NULL,  
SectionNo Int NOT NULL,  
Semester Varchar(25) NOT NULL,    
CONSTRAINT REGISTRATION_PK PRIMARY KEY(Registration_ID),  
CONSTRAINT REGISTRATION_FK1 FOREIGN KEY(StudentID)
  REFERENCES STUDENT(StudentID) ON DELETE CASCADE,  
CONSTRAINT REGISTRATION_FK2 FOREIGN KEY(SectionNo,Semester) 
  REFERENCES SECTION(SectionNo,Semester) ON DELETE CASCADE
);

但是,当我在 Oracle 上运行它时,我得到的错误是:

ORA-02270: no matching unique or primary key for this column-list

我已经将 Section 表创建为:

CREATE TABLE SECTION(  
SectionNo Int NOT NULL,  
SEMESTER Varchar(25) NOT NULL,  
CourseID Varchar(25) NOT NULL,  
CONSTRAINT SECTION_PK PRIMARY KEY(SectionNo,Semester, CourseID),  
CONSTRAINT SECTION_FK1 FOREIGN KEY(CourseID)  
REFERENCES Course(CourseID)  
ON DELETE CASCADE
);

创建节表没有错误。因此,我对如何创建注册表感到困惑。

感谢大家的帮助。

【问题讨论】:

  • 这是一个常见问题解答。在考虑发布之前,请阅读手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: sql oracle foreign-keys data-modeling


【解决方案1】:
PRIMARY KEY(SectionNo, Semester, CourseID)

FOREIGN KEY(SectionNo, Semester) 

问题是REGISTRATION_FK2 外键约束中的列列表不正确。 外键的列列表必须与它所引用的主键的列列表完全匹配

主键SECTION_PK 具有列列表SectionNo, Semester, CourseID,因此,您的外键必须具有相同的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    相关资源
    最近更新 更多