2015-02-24 196 views
0

我有一张会议桌。会议可以有相关会议的列表。这是什么被视为递归协会?SQL多对多递归关联?

这是通过让另一个表ConferenceAssociatedConference具有两个字段(ConferenceId,AssociatedConferenceId)并且这两个字段都是外键指向会议表的同一个ConferenceId字段来完成的吗?

我虽然以上是正确的,但创造和建设我的EDMX时,我得到:

错误6错误3034:问题在映射片段开始线875,982:两个实体可能具有不同的键映射到同一排。确保这两个映射片段将AssociationSet的两端映射到相应的列。

CREATE TABLE [dbo].[ConferenceAssociatedConference](
    [ConferenceId] [nvarchar](50) NOT NULL, 
    [AssociatedConferenceId] [nvarchar](50) NOT NULL, 
CONSTRAINT [PK_ConferenceAssociatedConference] PRIMARY KEY CLUSTERED 
(
    [ConferenceId] ASC, 
    [AssociatedConferenceId] 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].[ConferenceAssociatedConference] WITH CHECK ADD  CONSTRAINT [FkConfAssociatedConf_AssociatedConferenceId] FOREIGN  KEY([AssociatedConferenceId]) 
REFERENCES [dbo].[Conference] ([ConferenceId]) 
GO 

ALTER TABLE [dbo].[ConferenceAssociatedConference] CHECK CONSTRAINT  [FkConfAssociatedConf_AssociatedConferenceId] 
GO 

ALTER TABLE [dbo].[ConferenceAssociatedConference] WITH CHECK ADD  CONSTRAINT [FkConfAssociatedConf_ConferenceId] FOREIGN KEY([ConferenceId]) 
REFERENCES [dbo].[Conference] ([ConferenceId]) 
GO 

ALTER TABLE [dbo].[ConferenceAssociatedConference] CHECK CONSTRAINT [FkConfAssociatedConf_ConferenceId] 
GO 

回答

0

是的,你所描述的是正确的。你的DML是什么样的?

+0

嗨amahfouz,加入awnser – Alex808 2015-02-24 03:26:46

0

我见过的最简单的方法是用父母/孩子的概念。将“ParentConference”列添加到您的会议桌,并将其默认为空。可以通过使用主会议的ID填充新列来关联会议。对于贸易展览会这种常见的做法,通常有相关的专业会议或研讨会系列。限制是它需要任何给定组的记录作为组的父项,这可能不符合您的需求。

如果你不想这样做,我建议制作一个ConferenceType表并按照这种方式对你的会议进行分类。这很容易,而且比起多对多的流程来说更加麻烦。