当前位置: 首页 > 知识库问答 >
问题:

SQL Server:约束和外键

益稳
2023-03-14

我有个任务我必须

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

我不熟悉SQL Server,但我有一个表class,它有一个主键CRN varchar(10)(UNN)和两个外键,emp\u id varchar(20)(NN)与讲师有一个强制关系,房间号varchar(5)(UNN)教室也有一个强制关系。

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_类”已存在;SQL语句:
创建表类
(CRN varchar(10)无符号非空,
emp_id varchar(20),
房间号varchar(5),
注册smallint无符号非空,
约束pk_类主键(CRN),
约束fk_类外键(emp_id)引用讲师(emp_id),
约束fk_类外键(房间号)参考教室(房间号))[90045-193]

我见过许多不同的例子,关于如何使一张桌子有两个外键,但没有运气。我做错了什么?


共有1个答案

梅跃
2023-03-14

合同必须有一个唯一的名称,并且您要使用namefk_class两次。因此,命名一个fk_讲师和另一个fk_教室应该可以解决这个问题。

请注意,有一个较短的符号,可以避免此类问题:

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
);
 类似资料:
  • mysql 5.7 外键约束 主表:部门表 从表:员工表 添加外键:从表 dep_id 关联 主表 id >[danger] CASCADE > 级联更新 主表数据更新从表会更新外键 级联删除 主表数据删除,从表会一起删除

  • 主要内容:在创建表时设置外键约束,在修改表时添加外键约束,删除外键约束MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西

  • 注意 当前章节中涉及的配置一般适用于关系数据库。这里展示的扩展方法在你安装了关系数据库提供程序之后就能获得(由Microsoft.EntityFrmeworkCore.Relational 程序包共享)。 外键约束是为模型中的关系引入的。 惯例 按照惯例,外键约束命名为 FK_<依赖实体类型名称>_<主实体类型名称>_<外键属性名称>。对于组合键,<外键属性名> 则为用下划线分隔的外键属性名。 数

  • 问题内容: 在事务SQL中,如何指定外键约束应为1:1关系?声明列UNIQUE是否足够?下面是我现有的代码。 问题答案: 具有UNIQUE和NOT NULL约束的外键列在另一个表中引用UNIQUE,NOT NULL列会创建1:(0 | 1)关系,这可能就是您想要的。 如果存在真正的1:1关系,则第一个表中的每个记录在第二个表中都会有一个对应的记录,反之亦然。在这种情况下,您可能只想制作一张表(除非

  • 问题内容: 我收到此错误消息: 第40行的错误1217(23000):无法删除或更新父行:外键约束失败 …当我尝试放置桌子时: …定义如下: 有趣的是, 我已经删除 了模式中具有外键的 所有其他表。实际上,除了表外,数据库是空的。 如果数据库中没有其他对象,怎么可能会有子行?据我所知,InnoDB不允许在其他模式上使用外键,对吗? (我什至可以运行命令:-?) 问题答案: 两种可能性: 在另一个架

  • 嗨,我知道有人问过这个问题,但我还没有找到正确的答案,为什么当我尝试做我的第二个插入: 我得到了错误: 错误1452(23000):无法添加或更新子行:外键约束失败(.,约束外键()引用()) 下面的DDL代码: