2017-01-31 39 views
0

私はしなければならないSQL Serverの:制約と外部キー

  1. は、特定の状況のエンティティ関係図を作成し、
  2. は図
を表現するためにSQLコードを書くの割り当てを持っています

私はSQL Serverを初めて使用していますが、プライマリキーCRN varchar(10)(UNN)と2つの外部キーを持つテーブルclassがあります。emp_id varchar(20) (NN)にはインストラクタとの1つの必須の関係があり、room_number varchar(5) (UNN)にも1と義務的な関係はClassroomです。

テーブルClassのための私のコードは:私は取得しています

CREATE TABLE class 
(
    CRN varchar(10) UNSIGNED NOT NULL, 
    emp_id varchar(20), 
    room_number varchar(5), 
    enrollment smallint UNSIGNED NOT NULL, 

    CONSTRAINT pk_class PRIMARY KEY (CRN), 
    CONSTRAINT fk_class 
     FOREIGN KEY (emp_id) REFERENCES instructor (emp_id), 
    CONSTRAINT fk_class 
     FOREIGN KEY (room_number) REFERENCES classroom (room_number) 
); 

エラーは次のとおりです。

制約 "FK_CLASS" は既に存在します。 SQL文:
TABLEクラスを作成
(CRNのはvarchar(10)UNSIGNED NOT NULL、
EMP_IDのVARCHAR(20)、
room_numberのVARCHAR(5)、
登録SMALLINT UNSIGNED NOT NULLと、
CONSTRAINT pk_class PRIMARY KEY (CRN)、
CONSTRAINT fk_class FOREIGN KEY(EMP_ID)REFERENCESインストラクター(EMP_ID)、FOREIGN KEY(room_number)REFERENCES教室(room_number)fk_class
CONSTRAINT)[90045から193]

私はテーブルに2つの外部キーがあるようにする方法について多くの異なる例を見てきましたが、運がありませんでした。私は間違って何をしていますか?

+1

各制約は、すべてのテーブルには、一意の名前を持つ必要があります同じように、固有の名前を持たなければなりません。たぶんfk_class_emp_idとfk_class_room_numberのようなものでしょうか? –

+1

各主キーと外部キーの制約には一意の名前が必要です。両方の外部キー制約に同じことを指定しました。したがって、エラー。あなたの名前は一般的にはあまりにも曖昧で一般的です。しかし具体的には、あなたのFKの名前は、FK関係が何であるかを示すべきです... FK_class_instructor、およびFK_class_classroomは考えられる提案です。 – pmbAustin

答えて

3

制約には一意の名前が必要であり、名前はfk_classを2回使用している必要があります。したがって、fk_instructorという名前とfk_classroomの名前を付けて問題を解決する必要があります。そのような問題を回避短い表記があること

注:

CREATE TABLE class (
    CRN varchar(10) PRIMARY KEY, 
    emp_id varchar(20) references instructor (emp_id), 
    room_number varchar(5) REFERENCES classroom (room_number), 
    enrollment smallint UNSIGNED NOT NULL 
);