SQL中的多对多关系?

时间:2017-10-07 13:42:32

标签: sql sql-server many-to-many relationship

我对SQL很陌生,我正试图建立一些关系并遇到以下问题。

我有3张桌子 - 人 - 电话号码 - PhoneNumberCategories

我认为人和电话号码是不言自明的,而我用来表示电话号码是用于办公室,家庭,移动电话,传真等。

现在我制作了第4张表,以实现这种多对多的关系。该表有4列:

  • ID
  • 是PersonID
  • PhoneNumberID
  • PhoneNumberCategoryID

我在这里建立了3个关系。除ID列之外的所有列都有一个。它似乎有用,但它只是给我一种奇怪的感觉。有人可以告诉我,如果我是在正确的轨道上,或者我是否对此完全错了。

我想要的原因如下。当然,我需要将一个人与电话号码联系起来。但是,我可能有一个电话号码是一般办公室(这将是行'OfficeGeneral')号码,因此我链接到我,因为我在那里工作。我还有一个直接的办公室(这将是'OfficeDirect'行)号码。这当然也与我有关。然而,一般数字与办公室中的所有人都是“OfficeGeneral”。除了接待员,这里它将链接为“OfficeDirect”。这就是我提出这种多对多关系的原因。我在网上找不到太多关于它的东西。这就足以怀疑这是否是正确的方法。无论如何,这只是一个例子。我想确保我很灵活,并且可以捕获尽可能多的例外情况。我相信一旦数据库正在使用,人们就会遇到我没有预料到的情况。人们擅长多年来我学到的东西。

对以下评论的回应澄清:

  • 人可以拥有超过1个PhoneNumber。
  • PhoneNumber可以有超过1个人。
  • 拥有PhoneNumber的人可以拥有1个以上的PhoneNumberCategory(即用于电话和传真的私人电话。)
  • 可以使用不同的PhoneNumberCategories将多个人链接到同一个PhoneNumber。 (即OfficeMain对我来说是接待员的OfficDirect。)

期待收到大家的回复。

1 个答案:

答案 0 :(得分:1)

你的模特看起来很好。或许你的描述不是。

PersonPhoneNumber有很多关系。反过来,这种关系与PhoneNumberCategory是1-many,除非给定的电话号码可以在多个类别中。

我希望Person / PhoneNumber在此表中声明为唯一,因此一个人只能使用一次特定的电话号码。但是,这可能不是您查看结构的方式。