繁体   English   中英

SQL多个外键作为主键

[英]SQL Multiple Foreign Keys as Primary Keys

如果我声明下表,是否暗示两个外键都构成唯一的主键,还是需要做更多的事情才能将两个属性都设置为主键?

CREATE TABLE Report_has_Items
(
    ReportID int REFERENCES Report(ReportID) NOT NULL,
    ItemID int REFERENCES Item(ItemID) NOT NULL
)

本质上,这两个属性都是来自其他表的外键,它们共同构成一个唯一键。

不,不是。 上表没有主键。 如果要将字段用作主键,请使用:

CREATE TABLE Report_has_Items(
    ReportID int REFERENCES Report(ReportID) NOT NULL,
    ItemID int REFERENCES Item(ItemID) NOT NULL,
    PRIMARY KEY (ReportID, ItemID)
)

或类似的东西,具体取决于您的sql字典。

让我们命名约束吧?

CREATE TABLE dbo.Report_has_Items(
    ReportID int NOT NULL,
       CONSTRAINT [FK_RHI_Report] (ReportId) REFERENCES dbo.Report(ReportID),
    ItemID int NOT NULL,
       Constraint [FK_RHI_Item] (ItemId) REFERENCES dbo.Item(ItemID),
    CONSTRAINT [PK_RHI] PRIMARY KEY (ReportID, ItemID)
)

我不确定我是否完全理解您的问题,但是我假设您正在尝试创建一个复合主键(具有多个属性的主键)。 您可以执行以下操作。

CREATE TABLE Report_has_Items(
  ReportID int references Report(ReportID),
  ItemID int references Item(ItemID),
  PRIMARY KEY (ReportID , ItemID )
);

注意 :对(ReportID,ItemID)对在表中必须是唯一的,并且两个值都不能为NULL。

这是一个非常有用的SQL查询链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM