繁体   English   中英

MySQL数据库基础设计

[英]MySQL database basic design

我有3个实体:

  • 建筑物
  • 活动
  • 地址

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

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

但是我只想要一个地址表。

假设以下属性:

建筑物(标识,电话,电子邮件,图像,评论)<-我应该输入address_id吗? 活动(标识,说明)<-我应该输入address_id吗?

地址(id,街道,城市,州,邮政编码)<-还是应该在此处放置center_id和activity_id?

先感谢您!

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

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

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表(请参阅上面的问题)吗?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM