0

状況は次のとおりです。スタッフ用のテーブルとコース用のテーブルがあります。もちろん、staff_idを参照するcoordinatorという列があります。これは、コーディネーターであるスタッフとそうでないスタッフがいるためです。

Staff_idはIDENTITYであるため、自動インクリメントされます。コーステーブルで、この自動インクリメントに従わないことを確認する必要があります。

この場合のチェック制約をどのように実装すればよいかわかりません。

4

2 に答える 2

2

コーステーブルで、この自動インクリメントに従わないことを確認する必要があります。

coordinatorコーステーブルのフィールドを自動インクリメントしたくないということですか?あなたがそれを言わない限り、それはしません。

たとえば、次の2つのテーブルは正常に機能します。

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 に答える