SQL Server:约束和外键

时间:2017-01-31 22:11:45

标签: sql sql-server foreign-keys constraints

我有一个必须

的作业
  1. 创建特定情况的实体关系图,
  2. 编写SQL代码以表示图
  3. 我是SQL Server的新手,但我有一个表class,它有一个主键CRN varchar(10)(UNN)和两个外键emp_id varchar(20) (NN),它与教师有一个强制关系,并且room_number varchar(5) (UNN)Classroom也有1个强制关系。

    表格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语句:
      CREATE 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),
      CONSTRAINT fk_class FOREIGN KEY(room_number)参考教室(room_number))[90045-193]

    我已经看到很多不同的例子,说明如何让一个表有两个外键,但没有运气。我做错了什么?

1 个答案:

答案 0 :(得分:3)

Contraints必须具有唯一名称,并且您使用名称fk_class两次。因此,命名一个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
);