0

情况是这样的:我有一张桌子供员工使用,另一张桌子供课程使用。当然,我将有一个名为 coordinator 的列,它将引用 staff_id。这是因为有些员工是协调员,有些不是,等等。

Staff_id 是一个 IDENTITY,因此它是自动递增的,我必须确保在课程表中,它不会遵循这个自动递增。

我只是不确定如何为这种情况实施检查约束。

4

2 回答 2

2

我必须确保在课程表中,它不会遵循这个自动增量。

您只是说您不希望coordinator课程表中的字段自动递增吗?除非你告诉它,否则它不会。

例如,这两个表可以正常工作:

CREATE TABLE Staff
(
    `staff_id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(64),
    PRIMARY KEY (`staff_id`)
)

CREATE TABLE Courses
(
    `course_id` INT NOT NULL AUTO_INCREMENT,
    `coordinator_id` INT NOT NULL,
    `coursename` VARCHAR(64),
    PRIMARY KEY (`course_id`),
    INDEX `coordid` (`coordinator_id`)
)

当然,正如 GarethD 所说,您可以然后额外添加约束以保证 coordinator_id 正确填写并且相应的记录存在于人员中。

于 2012-05-03T13:33:19.930 回答
1

如果我正确理解您的要求,您可以向表中添加外键约束,以便它引用自身:

ALTER TABLE Staff 
ADD CONSTRAINT FK_Staff_Coordinator FOREIGN KEY (Coordinator)
REFERENCES Staff (StaffID)

附录

我想我误解了你的要求,我错过了关于课程表的部分。所以现在我认为课程表需要链接回人员表,在这种情况下,命令将是:

ALTER TABLE Course
ADD CONSTRAINT FK_Course_Coordinator FOREIGN KEY (Coordinator)
REFERENCES Staff (StaffID)

您当然可以自由地为约束实现自己的命名约定。

于 2012-05-03T13:25:46.043 回答