德国城市,地区,地区等的数据库规范化

时间:2017-12-11 05:49:34

标签: mysql database-design database-normalization

+-------------+----------------------------+-------------------+-----------+-----------+-------------------+
| postal_code | city_district              | city              | district  | region    | state             |
+-------------+----------------------------+-------------------+-----------+-----------+-------------------+
| 60313       | Innenstadt                 | Frankfurt am Main | NULL      | Darmstadt | Hessen            |
| 10719       | Charlottenburg-Wilmersdorf | Berlin            | NULL      | NULL      | Berlin            |
| 73773       | NULL                       | Aichwald          | Esslingen | Stuttgart | Baden-Württemberg |
+-------------+----------------------------+-------------------+-----------+-----------+-------------------+

有时,city_district,district和region可以为NULL。小城市没有城区。一个城市(法兰克福)可以包括/成为一个区。一个城市(柏林)可以包括/成为一个区域和一个地区。

表格为空,将从验证的用户输入中填充。我为每个列创建了自己的表并加入了它们,如下所示:

邮政编码:city_id
city_district:city_id
city:district_id
地区:region_id
region:state_id
州:名称

SELECT 
    *
FROM
postalcode
    LEFT JOIN
city ON postalcode.city_id = city.id
    LEFT JOIN
district ON city.district_id = district.id
    LEFT JOIN
region ON district.region_id = region.id
    LEFT JOIN
state ON region.state_id = state.id;

那太好了吗?过度正常化?如何使用NULL值连接表?我想用Joins获得上面的表格。如果我想在“邮政编码”之后加入“citydistrict”,我会收到一条错误消息“Not unique table / alias”。我如何正确地对表格进行别名?

邮政编码:https://en.wikipedia.org/wiki/Postal_codes_in_Germany
市区:https://en.wikipedia.org/wiki/Stadtbezirk
区: https://en.wikipedia.org/wiki/Districts_of_Germany
地区:https://en.wikipedia.org/wiki/Regierungsbezirk
州:https://en.wikipedia.org/wiki/States_of_Germany

1 个答案:

答案 0 :(得分:0)

德国约有8K邮政编码?使用 no 规范化时,表可能大约为1-2MB - 这是一个非常小的数量。根据您想要的索引,最高可达3MB。

每个级别的规范化都过度规范化。

每个postal_code都在city吗?如果是这样,那么妥协就是有两个表:

postal_code, city_district, city_id
city_id, city, district, region, state

这样做可能会将磁盘占用空间减少一半。