Sql 是否可以在字段不是主键的情况下生成外键?
比如说Sql 是否可以在字段不是主键的情况下生成外键?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,比如说 create table Equipment ( Equipmenttype nvarchar(1, Description nvarchar(10), Primary Key (Equipmenttype) ) Create table Room ( RoomID nvarchar(8), Capacity numeric(3), Roomtype(fk,nvarchar(2) ) 我想创建下表 create table RoomEquipment( (RoomID here
create table Equipment (
Equipmenttype nvarchar(1,
Description nvarchar(10),
Primary Key (Equipmenttype)
)
Create table Room (
RoomID nvarchar(8),
Capacity numeric(3),
Roomtype(fk,nvarchar(2)
)
我想创建下表
create table RoomEquipment(
(RoomID here)
(Equipmenttype here)
但是
Equipmenttype
不是主键。Equipmenttype
在它自己的表Equipment
中是主键,RoomID
应该是房间的主键
所以RoomEquipment
是一个标准的多对多关系表 Equipmenttype
在其自己的表Equipment
中是一个主键,RoomID
应该是Room
的主键
所以RoomEquipment
是一个标准的多对多关系表 您可以在PK
或unque
列上创建外键
:
因此,您必须在RoomID
上创建一个唯一索引:
CREATE UNIQUE INDEX UI_Room_RoomID ON dbo.Room(RoomID);
现在,您可以在表RoomEquipment
中创建外键
,您可以在PK
或unque
列上创建外键
:
因此,您必须在RoomID
上创建一个唯一索引:
CREATE UNIQUE INDEX UI_Room_RoomID ON dbo.Room(RoomID);
现在,您可以在表RoomEquipment
中创建外键
,外键约束不必仅链接到另一个表中的主键约束;还可以将其定义为引用另一个表中唯一约束的列
来源:外键约束不必仅链接到另一个表中的主键约束;还可以将其定义为引用另一个表中唯一约束的列
来源:否。您不能仅为任何列创建外键。这没有任何逻辑意义。当然,在您的示例中,您声明EquipmentType是主键。RoomID不是PK。如果您想这样做,那么您在数据库设计中发现了一个缺陷。不需要PK,一个备用键(唯一约束)也应该可以工作。任何表都应该包含PK,这已经是因为您查询的sNo性能。不能仅为任何列创建外键。这没有任何逻辑意义。当然,在您的示例中,您声明EquipmentType是主键。RoomID不是PK。如果要这样做,则发现数据库设计中存在缺陷。无需PK,备用键(唯一约束)也应起作用。任何表都应包含PK,这已经是因为查询的性能