SQL中的关联表,2个主键

SQL中的关联表,2个主键,sql,sql-server-2012,Sql,Sql Server 2012,我正在上一门关于SQL的入门课程,但我被我们的一个实验室难住了。对于这个实验室,我们得到了一个ERD,我们需要通过SQL实现它。实验室要求我们创建两个用关联表连接在一起的表(SQL显然不喜欢多对多关系) 在这个关联表中,根据ERD,两个属性都需要是主键和外键(Pk,Fk)。这对我来说没有多大意义(不能有多个主键),因此到目前为止,我无法通过在表中创建多个主键来实现ERD。我在互联网上哪里出了问题 守则: CREATE Table dbo.TargetMailingList ( Targ

我正在上一门关于SQL的入门课程,但我被我们的一个实验室难住了。对于这个实验室,我们得到了一个ERD,我们需要通过SQL实现它。实验室要求我们创建两个用关联表连接在一起的表(SQL显然不喜欢多对多关系)

在这个关联表中,根据ERD,两个属性都需要是主键和外键(Pk,Fk)。这对我来说没有多大意义(不能有多个主键),因此到目前为止,我无法通过在表中创建多个主键来实现ERD。我在互联网上哪里出了问题

守则:

CREATE Table dbo.TargetMailingList
(
     TargetID INT NOT Null 
        Foreign Key References dbo.TargetCustomers(TargetID),

     MailingListsID INT Not NULL 
        Foreign Key References dbo.Mailinglists(MailingListID),

     Primary Key (MailingListID,TargetID), 
);

没有两个主键。这是一个复合键。这两列都是同一主键的一部分。查看更多信息。

没有两个主键。这是一个复合键。这两列都是同一主键的一部分。查看更多信息。

您可以创建一个复合键,如@Juru所述,并创建两个外键:

CREATE TABLE dbo.Table_link
    (
    ndIdTable1 int NOT NULL,
    ndIdTable2 int NOT NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Table_link ADD CONSTRAINT
    PK_Table_link PRIMARY KEY CLUSTERED 
    (
    ndIdTable1,
    ndIdTable2
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
ALTER TABLE dbo.Table_link ADD CONSTRAINT
    FK_Table_Table_1 FOREIGN KEY
    (
    ndIdTable1
    ) REFERENCES dbo.Table_1
    (
    ndIdTable1
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 

GO
ALTER TABLE dbo.Table_link ADD CONSTRAINT
    FK_Table_Table_2 FOREIGN KEY
    (
    ndIdTable1
    ) REFERENCES dbo.Table_2
    (
    ndIdTable2
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 

GO

您可以创建一个复合键,如@Juru所述,并创建两个外键:

CREATE TABLE dbo.Table_link
    (
    ndIdTable1 int NOT NULL,
    ndIdTable2 int NOT NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Table_link ADD CONSTRAINT
    PK_Table_link PRIMARY KEY CLUSTERED 
    (
    ndIdTable1,
    ndIdTable2
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
ALTER TABLE dbo.Table_link ADD CONSTRAINT
    FK_Table_Table_1 FOREIGN KEY
    (
    ndIdTable1
    ) REFERENCES dbo.Table_1
    (
    ndIdTable1
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 

GO
ALTER TABLE dbo.Table_link ADD CONSTRAINT
    FK_Table_Table_2 FOREIGN KEY
    (
    ndIdTable1
    ) REFERENCES dbo.Table_2
    (
    ndIdTable2
    ) ON UPDATE  NO ACTION 
     ON DELETE  NO ACTION 

GO

非常感谢你的帮助非常感谢你的帮助