MySQL数据库基本设计

时间:2011-10-07 20:43:11

标签: mysql

我有3个实体:

  • 建筑物
  • 活动
  • 地址

我不知道如何对表之间的关系进行外键操作。

建筑物位于地址。 活动在地址(一次一个地址)进行。

但我只想要一个地址表。

假设下一个属性:

建筑物(身份证,电话,电子邮件,图片,评论)< - 我应该放置address_id吗? 活动(id,description)< - 我应该把address_id吗?

地址(id,街道,城市,州,邮政编码)< - 或者我应该将center_id和activity_id放在这里吗?

提前谢谢!

3 个答案:

答案 0 :(得分:1)

您应该在建筑物和活动表中使用 address_id 地址是独一无二的,而许多建筑物和许多活动可以位于同一地址!!

答案 1 :(得分:0)

您的问题意味着多个建筑物可以位于同一地址 - 这是您想要的吗?如果是这样,请相应地对其进行标准化:

Address是您的'根实体':

ADDRESS(address_id,street,city,state,postcode)

Building只能位于一个Address,因此请加上Address的引用,即外键:

BUILDING(building_id,phone,email,image,comments,address_id)

活动仅在一个地址执行,外键引用Address

ACTIVITY_ID(activity_id,description,address_id)

也许你应该考虑是否:

  • 地址中缺少街道号码?
  • 是否可以在指定地址拥有多个建筑?
  • 某个建筑物的多个地址是可能的(是的,我见过这个)?
  • 确实需要单独的ADDRESS表(见上述问题)?

答案 2 :(得分:0)

Alex,你应该在两个表中都有ID,正如你在问题中所说的那样。没有必要将它们放在单独的表中,因为实际上建筑物的地址将是执行活动的地方,对吗?

如果您担心两栋建筑物位置相同,请在建筑物表格的address_id栏中添加uniq索引。

向前移动一点。你有没有建筑物的地址吗?如果是这种情况,那么您甚至可以将地址数据(列)添加到buildings表中。因为它是一对一的关系,没有其他实体需要使用地址表而是建筑物之一。这样你就可以摆脱地址表