递归关联多对多,主键和外键

  • 本文关键字:关联 递归 sql
  • 更新时间 :
  • 英文 :


嗨,我有一个ER方案,它与主键具有多对多的递归关联,例如:

______(0,N)_________
ID    |     base            
course                  preparatory
|___advanced_________/
(1,N)

其中course为实体,preparatory为关联,course有ID主键。

我的问题是:
当然有ID主键但是,预备关联?

我假设预备关联有基本键和高级主键以及ID_course外键:

course       primary key:ID
preparatory  primary key:base,advanced,ID_course  foreign key:ID_course

是正确的吗?

在您的模型中,我假设preparatory代表所有需要完成的课程,因为您可以开始主要课程。

在这种情况下,你是正确的,你需要一个单独的表来管理多个id,我建议这样做:

CREATE TABLE Course(
ID INT IDENTITY(1,1) NOT NULL,
CONSTRAINT Course_PK PRIMARY KEY (ID)
);
CREATE TABLE Preparatory(
ID INT IDENTITY(1,1) NOT NULL,
Advanced_CourseID INT NOT NULL,
Required_CourseID INT NOT NULL,
CONSTRAINT Preparatory_PK PRIMARY KEY (ID),
CONSTRAINT Preparatory_Advanced_Course_ID_FK
FOREIGN KEY (Advanced_CourseID)
REFERENCES Course (ID),
CONSTRAINT Preparatory_Required_Course_ID_FK
FOREIGN KEY (Required_CourseID)
REFERENCES Course (ID)
);

期望Advanced_CourseID代表主奇异参考,并且每个Advanced_CourseID都有唯一的Required_CourseID

为了进一步描述这一点,我建议在这个关系上声明一个唯一的索引,以强制所需的结构完整性:

CREATE UNIQUE INDEX CONCURRENTLY Preparatory_Advanced_Required_Course_ID_UX
ON Preparatory(Advanced_CourseID,Advanced_CourseID);
ALTER TABLE Preparatory
ADD CONSTRAINT Unique_Preparatory_Advanced_Required_Course_ID
UNIQUE USING INDEX Preparatory_Advanced_Required_Course_ID_UX;

最新更新