2011-10-07 52 views
0

我有3个实体:MySQL数据库的基本设计

  • 建筑
  • 活动
  • 地址

而且我不知道如何向外国键表之间的关系。

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

但我只想要一个地址表。

假设下一个属性:

建筑物(ID,电话,电子邮件,图片,评论)< - 我应该把ADDRESS_ID? 活动(编号,说明)< - 我应该把address_id?

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

预先感谢您!

+0

如果这是一个家庭作业问题,你应该这样标记它。 – Zkoh

回答

1

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

+0

你的答案可能有2个或更多的建筑物引用相同的address_id否?我不认为你的回答是正确的 – alex

0

你的问题意味着多个建筑物可以位于同一地址 - 这是你想要的吗?如果是这样,就归它据此:

Address是你的“根实体”:

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

一个Building可以位于正好一个Address,所以包括参考Address,外键:

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

的活动是由外键正好一个地址进行引用

ACTIVITY_ID(activity_id,description,address_id) 

也许你应该想想是否:在地址门牌号

  • 缺什么?
  • 应该在一个给定的地址有多个建筑物可以吗?
  • 给定建筑物的多个地址是可能的(是的,我见过这个)?
  • 单独的ADDRESS表真的很有必要(见上面的问题)?
0

亚历克斯,你应该在两个表中都有ID,就像你在问题中所说的那样。没有必要将它们放在单独的表格中,因为实际上建筑物的地址将成为执行活动的地方,对吗?

如果您担心两个建筑物具有相同的位置,请在建筑物表的address_id列中添加一个uniq索引。

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