嗨,我有一个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;