Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用复合PK和FK的链接表_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

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