我有 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?
提前谢谢您!
您应该在建筑物和活动表中使用address_id。
地址是唯一的,而许多建筑物和许多活动可以位于同一地址!!
您的问题意味着多个建筑物可以位于同一地址 - 这是您想要的吗?如果是这样,只需相应地标准化它:
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
表真的有必要吗(见上面的问题)?Alex,正如您在问题中所说,您应该在两个表中都有 ID。无需将它们放在单独的表中,因为实际上建筑物的地址将是进行活动的地方,对吗?
如果您担心两座建筑物具有相同的位置,请在建筑物表的address_id列中添加uniq索引。
向前移动一点。你能有一个没有建筑物的地址吗?如果是这种情况,那么您甚至可以将地址数据(列)添加到建筑物表中。因为这将是一种一对一的关系,除了建筑物之外,没有其他实体需要使用地址表。这样你就可以摆脱地址表