Sql 使用复合PK和FK的链接表
我正在尝试创建一个链接表。链接的两个表是Sql 使用复合PK和FK的链接表,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我正在尝试创建一个链接表。链接的两个表是Person和Address。两个表的主键都是ID CREATE TABLE LinkedTable ( EntryID INT NOT NULL IDENTITY, PersonID INT NOT NULL FOREIGN KEY REFERENCES Person(ID), AddressID INT NOT NULL FOREIGN KEY REFERENCES Address(ID), PRIMARY KEY(EntryI
Person
和Address
。两个表的主键都是ID
CREATE TABLE LinkedTable
(
EntryID INT NOT NULL IDENTITY,
PersonID INT NOT NULL FOREIGN KEY REFERENCES Person(ID),
AddressID INT NOT NULL FOREIGN KEY REFERENCES Address(ID),
PRIMARY KEY(EntryID, PersonID, AddressID)
)
可以在这样的表脚本中同时设置外键约束和复合主键吗?您尝试过吗?发生了什么事?@jarlh老实说,我的计算机上没有sql server,所以我现在无法尝试使用复合键,我相信您需要将其添加为表create中的自己的约束行(而不是与每个列内联)。依我看,这是首选的方法。我希望你也能说出你的密钥。@TomH你认为有必要在这个表中加入
EntryID
?我可以使用复合键(PersonID,AddressID)创建一个只包含这两个id的链接表吗?就我个人而言,我没有EntryID。我不是那种“每个表都需要一个标识主键”的阵营。在这种情况下,它所做的只是允许您以重复条目结束。
CREATE TABLE [dbo].[LinkedTable] (
[EntryID] [int] IDENTITY(1,1) NOT NULL
, [PersonID] [bigint] NOT NULL
, [AddressID] [int] NOT NULL
, CONSTRAINT [PK_LinkedTable] PRIMARY KEY CLUSTERED (
[EntryID] ASC
) WITH (
PAD_INDEX = OFF
, STATISTICS_NORECOMPUTE = OFF
, IGNORE_DUP_KEY = OFF
, ALLOW_ROW_LOCKS = ON
, ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[LinkedTable] WITH CHECK ADD FOREIGN KEY([PersonID])
REFERENCES [dbo].[Person] ([ID])
GO
ALTER TABLE [dbo].[LinkedTable] WITH CHECK ADD FOREIGN KEY([AddressID])
REFERENCES [dbo].[Address] ([ID])
GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_LinkedTable] ON [dbo].[LinkedTable] (
[PersonID] ASC
, [AddressID] ASC
) WITH (
PAD_INDEX = OFF
, STATISTICS_NORECOMPUTE = OFF
, SORT_IN_TEMPDB = OFF
, IGNORE_DUP_KEY = OFF
, DROP_EXISTING = OFF
, ONLINE = OFF
, ALLOW_ROW_LOCKS = ON
, ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
GO