gpt4 book ai didi

mysql 继承位置方案

转载 作者:行者123 更新时间:2023-11-30 01:19:53 27 4
gpt4 key购买 nike

我必须创建一个数据库来以这种方式存储地点:

countries: id, name
regions: id, name, countries_id
municipality: id, name, regions_id

同一数据库还有与此地点相关的其他表。问题是并不总是知道城市(最具体的位置值),有时我们只知道地区或国家。所以我们必须像这样创建其余的表:

user: id, name, municipality_id, regions_id, countries_id

由于关系重复,该方案存在问题。一个用户可以与一个地区和一个国家相关,但该地区也与一个国家相关。

处理这个问题的最佳方法是什么?一个可能的解决方案是这样的:

用户:id、名称、place_table、place_id

但是这个方法不允许使用外键,而且查询起来有点困难。

最佳答案

您不想在 user 表中存储三个字段。这引入了一致性问题。

一种解决方案是保留当前的表结构并扩展市镇表以包括地区和国家。因此,每个地区和每个国家都会出现在表中。 “国家”市政府(例如法国)将指“法国”地区,进而指“法国”国家。

我首选的解决方案是只有一张 table 。这使结构非规范化。然而,假设这个层次结构并没有真正改变太多(如果有的话)。使用一个名为 Places 的表来代替三个表,其中包含 idnametype 等列、市镇名称地区名称国家/地区名称

我意识到这与规范化数据库“背道而驰”(尽管它对应于维度分析中的维度)。假设值不变,对数据进行非规范化可能会产生最简单的数据结构和查询,而不会在维护数据上施加太多开销。

编辑:

我认为您的评论正在描述我上面提到的具有多列的表格。如果您希望用户从此类表中选择一个县,请使用select differentcountry_name from Places。如果您想要一个国家/地区的所有区域,则用户从“country_name = XXX”的地点中选择不同的“region_name”

关于mysql 继承位置方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18674028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com