SQL多个外键作为主键

时间:2013-04-12 00:36:26

标签: sql sql-server sql-server-2008 foreign-keys composite-primary-key

如果我声明下面的表格是否隐含地暗示两个外键都是唯一的主键,还是我需要做更多的事情才能将这两个属性作为主键?

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

基本上这两个属性都是来自其他表的外键,它们将形成一个唯一的密钥。

3 个答案:

答案 0 :(得分:11)

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

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

或类似的东西取决于你的sql dilect。

答案 1 :(得分:6)

让我们命名我们的约束,嗯?

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)
)

答案 2 :(得分:3)

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

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

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

Here is a very useful link for SQL Queries