我正在上一门关于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),
);
答案 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