【问题标题】:Is it possible to make a foreign key without the field being a primary key?是否可以在字段不作为主键的情况下创建外键?
【发布时间】:2016-02-07 18:01:58
【问题描述】:

例如

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 是主键。
  • 我看到 Equipmenttype id PK。 RoomID 不是 PK。
  • 如果你想这样做,那么你已经在你的数据库设计中发现了一个缺陷。
  • 不需要 pk,备用键(唯一约束)也可以工作。
  • 任何表都应该包含一个PK,因为你的查询的性能已经

标签: sql sql-server sql-server-2008


【解决方案1】:

Equipmenttype主键,在它自己的表Equipment中,RoomID应该Room的主键。

所以RoomEquipment 是一个标准的多对多关系表。

【讨论】:

    【解决方案2】:

    您可以在PKUnuque 的列上创建foreign key

    所以你必须在RoomID上创建一个唯一索引:

    CREATE UNIQUE INDEX UI_Room_RoomID ON dbo.Room(RoomID); 
    

    现在您可以在表RoomEquipment 中创建foreign key

    【讨论】:

      【解决方案3】:

      一个 FOREIGN KEY 约束不必只链接到另一个表中的 PRIMARY KEY 约束;它也可以定义为引用另一个表中唯一约束的列。

      来源:Foreign Key to non-primary key

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-10
        • 2015-06-05
        • 1970-01-01
        • 2021-06-28
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        • 1970-01-01
        相关资源
        最近更新 更多