MySQL数据库基础设计

问题描述 投票:0回答:3

我有 3 个实体:

  • 建筑物
  • 活动
  • 地址

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

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

但我只想要一张地址表。

假设以下属性:

建筑物(ID、电话、电子邮件、图片、评论)<- should I put address_id ? Activities(id,description) <- should I put address_id?

地址(ID、街道、城市、州、邮政编码)<- or should I put center_id and activity_id here?

提前谢谢您!

mysql database-design
3个回答
1
投票

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


0
投票

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

Address
是你的“根实体”:

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

A

Building
可以恰好位于一个
Address
,因此请包含对
Address
(外键)的引用:

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

一项活动仅在一个地址执行,通过外键引用

Address

ACTIVITY_ID(activity_id,description,address_id)

也许你应该考虑是否:

  • 地址中缺少街道号码?
  • 在给定地址是否可以拥有多于一栋建筑物?
  • 一栋给定建筑物可能有多个地址(是的,我见过这个)?
  • 一个单独的
    ADDRESS
    表真的有必要吗(见上面的问题)?

0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.