【问题标题】:SQL Server : constraints and foreign keysSQL Server:约束和外键
【发布时间】:2017-06-17 12:43:36
【问题描述】:

我有一个必须完成的任务

  1. 创建特定情况的实体关系图,并
  2. 编写 SQL 代码来表示图表

我是 SQL Server 的新手,但我有一个表 class,它有一个主键 CRN varchar(10)(UNN) 和两个外键,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 语句:
创建表类
(CRN varchar(10) UNSIGNED NOT NULL,
emp_id varchar(20),
房间号 varchar(5),
注册 smallint UNSIGNED NOT NULL,
约束 pk_class 主键 (CRN),
CONSTRAINT fk_class FOREIGN KEY (emp_id) REFERENCES 讲师 (emp_id),
约束 fk_class 外键 (room_number) 参考教室 (room_number) ) [90045-193]

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

【问题讨论】:

  • 每个约束必须有一个唯一的名称,就像每个表都必须有一个唯一的名称一样。可能是 fk_class_emp_id 和 fk_class_room_number 之类的?
  • 每个主键和外键约束都需要一个唯一的名称。您已将两个外键约束命名为相同的东西。因此错误。你的名字一般来说太模糊和笼统了。但具体来说,你的外键名称应该表明外键关系是什么... FK_class_instructor 和 FK_class_classroom 是可能的建议。

标签: sql sql-server foreign-keys constraints


【解决方案1】:

约束必须有一个唯一的名称,并且您使用名称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
);

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2016-06-04
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多