实现“多对多”数据库

时间:2010-06-11 18:01:15

标签: c# sql database-design many-to-many

问候,堆叠溢出

在我的数据库中,我已经有一个表,“联系人”,其中包含个人记录。我的数据库中还有其他几个表,它们代表包含表示特定技能的记录的“技能组合”。

1)我是否正确将此作为“多对多”关系? (每个联系人可以拥有多个技能组,每个技能组可以属于多个联系人)

2)我是数据库新手 - 我想链接表吗?

3)有没有办法在我的程序(C#+ windows窗体)中实现这一点,以便对于'contacts'表中的任何给定记录,所有相关的'技能组'表的名称​​或< / em>可以检索与“联系人”记录关联的所有“技能”记录吗?

(数据库位于SQL Server Express 2008上。通过VisualStudio 2008内置的“数据连接向导”从数据库中检索数据)

2 个答案:

答案 0 :(得分:10)

你是对的。那应该是多对多的关系。要在SQL中实现此目标,您应该有三个表:

联系 - 存储联系信息
SkillSet - 存储个人技能组信息
ContactSkillSet - 根据主键将技能集映射到联系人

关于你的上一个问题,有多种方法可以做到这一点。这完全取决于您访问数据的方式(DataSet,LINQ to SQL,Entity Framework等)。如果您提供更多详细信息,我们可以为您提供更具体的答案。

答案 1 :(得分:0)

您使用的链接表包含您需要链接在一起的两个表中的每个表中的主键。在两个键的组合上放置一个唯一索引或将组合组合为PK。