【问题标题】:Link multiple table field to the same foreign key in TSQL将多个表字段链接到 SQL 中的同一个外键
【发布时间】:2012-01-15 04:06:50
【问题描述】:

我真的不知道这在逻辑上是否可行,但我有一张桌子:

PERSON: Id (PK), Name, SoldTo (FK), ShipTo (FK), BillTo (FK)

ADDRESS: AddrId (PK), Street, Number, Town, Type

Type in ADDRESS 将包含一个描述地址类型的字符串。我想将SoldTo, ShipToBillTo 链接到AddrId。当然他们也可以指向同一个记录。

但是在 SSMS 中,它禁止我这样做。

有人知道解决方法或更好的方法吗?谢谢

更新

要了解我对 “SSMS 禁止我这样做”的含义,请查看下面链接中的屏幕截图。将CMF_ContactInfo 视为ADDRESS,将CMF_AccountInfo 视为PERSON。如您所见,我可以将ContactId 添加到关系中一次...

【问题讨论】:

  • 为什么SSMS 禁止你这样做?你能告诉我们你想要做什么(在 T-SQL 中)吗?您是否收到错误 - 如果是:what 到底是什么错误??

标签: sql sql-server database-design foreign-keys primary-key


【解决方案1】:

不知道您是如何尝试在 SSMS 中做到这一点的(可能您正在尝试一些交互式工具,我对它们知之甚少),但这是您可以在普通 Transact-SQL 中做您想做的事情的方法:

CREATE TABLE Address (
  AddrId int CONSTRAINT PK_Address PRIMARY KEY,
  Street varchar(50),
  Number int,
  Town varchar(50),
  Type int
);

CREATE TABLE Person (
  Id int PRIMARY KEY,
  Name varchar(100),
  SoldTo int NOT NULL CONSTRAINT FK_Address_SoldTo FOREIGN KEY REFERENCES Address (AddrId),
  ShipTo int NOT NULL CONSTRAINT FK_Address_ShipTo FOREIGN KEY REFERENCES Address (AddrId),
  BillTo int NOT NULL CONSTRAINT FK_Address_BillTo FOREIGN KEY REFERENCES Address (AddrId)
);

不确定实际的类型,但你明白了。此外,您可能希望在不需要的地方删除 NOT NULL(或在必要时添加它)。

【讨论】:

  • +1 完全正确 - 使用这些列创建从 PersonAddress 的三个 FK 关系应该没有任何问题......
  • +1 给安德烈。我对@CiccioMiami 的问题:似乎有人在出售、运送(和计费)人员。奴隶制在迈阿密重新合法化了吗?
  • 啊哈哈,好一个!这只是一个例子。请参阅问题更新中的屏幕截图。谢谢
【解决方案2】:

您必须添加多个关系! (使用不同的名称)就像是不同的表一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多