SQL中的关联表,2个主键

时间:2015-05-16 19:58:41

标签: sql sql-server-2012

我正在上一门关于SQL的入门课程,我在我们的一个实验室里难以接受。在本实验中,我们得到了一个需要通过SQL实现的ERD。实验室要求我们创建两个连接在一起的表和一个关联表(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), 
);

2 个答案:

答案 0 :(得分:4)

没有两个主键。这是一个复合键。这两列都是同一主键的一部分。查看http://en.wikipedia.org/wiki/Compound_key了解详情。

答案 1 :(得分:0)

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

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