Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在sql中创建外键时是否一直出错?_Sql_Sql Server 2008 - Fatal编程技术网

尝试在sql中创建外键时是否一直出错?

尝试在sql中创建外键时是否一直出错?,sql,sql-server-2008,Sql,Sql Server 2008,创建桌子室( RoomID nvarchar(8)主键, 容量数字(3) ) 创建表格房间类型( RoomType nvarchar(2)主键, 说明nvarchar(20), nvarchar责任(20) ) 更衣室 添加约束fk_类型外键(类型)引用RoomType(类型) 主要错误0x80040E11,次要错误0 更衣室 添加约束fk_类型外键(类型)引用RoomType(类型) 无效的列ID。[类型] 可以创建组合RoomID和EquipmentType的表RoomEquipment,如

创建桌子室( RoomID nvarchar(8)主键, 容量数字(3)

)

创建表格房间类型( RoomType nvarchar(2)主键, 说明nvarchar(20), nvarchar责任(20) )

更衣室

添加约束fk_类型外键(类型)引用RoomType(类型)

主要错误0x80040E11,次要错误0

更衣室 添加约束fk_类型外键(类型)引用RoomType(类型) 无效的列ID。[类型]


可以创建组合RoomID和EquipmentType的表RoomEquipment,如下所示:

create table RoomEquipment (
  RoomID int,
  EquipmentType nvarchar(1),
  primary key (roomid, equipmenttype),
  constraint fk_roomequipment_equipment_type 
             foreign key (equipmenttype) 
             references equipment(equipmenttype),
  constraint fk_roomequipment_equipment_roomid
             foreign key (roomid) 
             references room(roomid)
);
-- I prefer using char datatype for predictable number of characters in a field
CREATE TABLE RoomType (
Roomtype nvarchar(2) NOT NULL,
Description nvarchar(20),
Responsibility nvarchar(20),
primary key (Roomtype)
);

-- You could use char(1) instead of nvarchar(1) for type; I'd prefer using int instead
create table Equipment (
Equipmenttype nvarchar(1) NOT NULL,
Description nvarchar(10)
);

-- Added a unique key to assist with good foreign key relationship
alter table Equipment add constraint uk_equipment_equipmenttype unique (equipmenttype);

-- Just use an int or char if roomID length is predictable
Create table Room (
RoomID nvarchar(8),
Capacity numeric(3),
Roomtype(fk,nvarchar(2)
);

alter table room add constraint uk_room_id unique (roomid);
其他表可能如下所示:

create table RoomEquipment (
  RoomID int,
  EquipmentType nvarchar(1),
  primary key (roomid, equipmenttype),
  constraint fk_roomequipment_equipment_type 
             foreign key (equipmenttype) 
             references equipment(equipmenttype),
  constraint fk_roomequipment_equipment_roomid
             foreign key (roomid) 
             references room(roomid)
);
-- I prefer using char datatype for predictable number of characters in a field
CREATE TABLE RoomType (
Roomtype nvarchar(2) NOT NULL,
Description nvarchar(20),
Responsibility nvarchar(20),
primary key (Roomtype)
);

-- You could use char(1) instead of nvarchar(1) for type; I'd prefer using int instead
create table Equipment (
Equipmenttype nvarchar(1) NOT NULL,
Description nvarchar(10)
);

-- Added a unique key to assist with good foreign key relationship
alter table Equipment add constraint uk_equipment_equipmenttype unique (equipmenttype);

-- Just use an int or char if roomID length is predictable
Create table Room (
RoomID nvarchar(8),
Capacity numeric(3),
Roomtype(fk,nvarchar(2)
);

alter table room add constraint uk_room_id unique (roomid);

示例如下:

您想为您试图创建的表命名什么?您希望该表中包含哪些字段?哪些表和字段应该参与外键关系?我希望我要创建的表中的RoomID和Equipmenttype将房间与设备关联,这样新表将被称为RoomEquipment@Zedfoxus好的,房间设备在桌子上。它将有RoomID和EquipmentType字段。RoomEquipment的设备类型字段将与设备的设备类型字段相关。RoomEquipment的RoomID字段是否与任何内容相关?是,RoomID字段与房间表相关@zedfoxusOmg我忘了为房间添加桌子。我已经添加了桌子房间。请检查我使用适当外键创建
RoomEquipment
表格的第一块代码。这对你有用吗?在我的作业中,它说我们不允许合并任何表格,但这确实有帮助。谢谢。很高兴这是有帮助的。更新后的SQLFiddle示例如下所示,以供将来参考: