MySQL区域/国家关系和规范化

时间:2012-02-06 21:37:40

标签: mysql normalization

我正在创建与Region,Sub_Region,Country和Country_Regions的关系。

我想要4层的原因是为了缩小搜索范围。例如,着陆页将包含整个世界的Google地图,您可以点击任何区域(大陆),使用其Sub_Regions缩放到该大陆,单击Sub_Region以获取国家/地区,如果该国家/地区具有Country_Regions,它会缩放到那些......

我的问题不是所有地区/国家/地区关系都有Sub_Region。

Sub_Region的一个例子是

Region    |    Sub_Region         |    Country        |    Country_Region
Caribbean |    Lesser Antilles    |    Saint Martin   |    NULL
Europe    |    Iberian Peninsula  |    Spain          |    NULL

问题是如果我试图将美国纳入这个结构,它看起来像这样:

Region         |    Sub_Region         |    Country         |    Country_Region
North America  |    NULL               |    United States   |    Southeast

如何规范化,以便在没有Sub_Region或Country_Region的情况下,数据仍然一致,InnoDB会很高兴并帮助我提供参考资料?

2 个答案:

答案 0 :(得分:0)

标准化应如下所示:

表1:

<强>区域

id | region_name 

表2:

<强>国家

id | country_name | region_id 

表3:

<强> REGION_TYPE

 id | region_type  (Southeast,Southwest etc)

表4:

子区域

 id | sub_region  | country_id | region_type_id

答案 1 :(得分:0)

将您的所有位置信息仅存储在一个表中,并将它们放在树结构中

table location (
    id,
    title,
    location_type,
    fk_loc_parent,
)