【问题标题】:SQL Server 2008 - Is it possible to relate a primary key from one table to a generalised field in another?SQL Server 2008 - 是否可以将一个表中的主键与另一个表中的通用字段相关联?
【发布时间】:2012-12-20 14:23:29
【问题描述】:

我目前正在从事一项工作,在尝试关联两个表时遇到问题,其中一个表由于泛化而成为子类。

表 A 有一个主键 StaffID,我想将其与通用表(表 B)中的外键相关联。表 B 的超类(表 C)具有 staffID 字段,因此泛化应该将其从表 C 带到表 B。

但是,当使用图表视图设置 FK 关系时,当我查看 下拉字段,我只能看到表 B 中的属性,看不到任何超类(表 C)属性,因此看不到人员 ID。

为了提供更多的上下文,有两种类型的人员,一种可以在泛化的所有表中创建数据,因此通过人员ID直接链接到超类,但是另一种类型的人员只能添加数据到子类之一。

               Super Class C
                 (staffID)

Sub Class D                     Sub Class B(FK) ----------- table A (PK)
                                                              (staffID)

提前致谢

【问题讨论】:

  • 不能与不在表中的列建立 FK 关系。

标签: database sql-server-2008 tsql class-table-inheritance


【解决方案1】:

我不确定我是否理解您的问题。但是为了设置一个外键引用从 B 到 C,C.staffID 列必须要么是主键,要么必须有一个UNIQUE 约束。

This SO answer 可能会给你一些有用的指导。

【讨论】:

  • 抱歉含糊不清,staffID 不是超类 C 的 PK。它是另一个表的 FK,它是表 A 的超类,因此表 A 也有一个员工 ID 的 PK。
  • 如果 C.staffID 不是主键,并且如果 C.staffID 没有 UNIQUE 约束,则不能对其设置外键引用。如果您可以声明 C.staffID UNIQUE,那么您应该这样做。如果你不能,你的超类/子类模式是错误的——表“C”真的不是超类。
  • @Student5691:在我的回答中查看新链接。
猜你喜欢
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
相关资源
最近更新 更多