如果我声明下表是否隐含暗示两个外键都是唯一的主键,还是我需要做更多的事情来使两个属性都成为主键?
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
)
本质上,这两个属性都是来自其他表的外键,它们一起将形成一个唯一键。
不,它没有。上表没有主键。如果要将字段用作主键,请使用:
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。