Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 德国城市、地区、地区等的数据库规范化_Mysql_Database Design_Database Normalization - Fatal编程技术网

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

Mysql 德国城市、地区、地区等的数据库规范化,mysql,database-design,database-normalization,Mysql,Database Design,Database Normalization,有时,city_district、district和region可以为空。小城市没有城区。一个城市(法兰克福美茵河畔)可以包括/是一个地区。一个城市(柏林)可以包括/是一个地区和一个地区 表为空,将根据已验证的用户输入填充。我为每一列创建了自己的表并将它们连接起来,如下所示: 邮政编码:城市标识 城市/地区:城市/地区id 城市:地区id 地区:地区id 地区:州id 州:姓名 +-------------+----------------------------+---------------

有时,city_district、district和region可以为空。小城市没有城区。一个城市(法兰克福美茵河畔)可以包括/是一个地区。一个城市(柏林)可以包括/是一个地区和一个地区

表为空,将根据已验证的用户输入填充。我为每一列创建了自己的表并将它们连接起来,如下所示:

邮政编码:城市标识
城市/地区:城市/地区id
城市:地区id
地区:地区id
地区:州id
州:姓名

+-------------+----------------------------+-------------------+-----------+-----------+-------------------+
| 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 |
+-------------+----------------------------+-------------------+-----------+-----------+-------------------+
这么好吗?过度正常化?如何使用空值联接表?我想得到上面的带有连接的表。如果我想在“postalcode”之后加入“citydistrict”,我会收到一条错误消息“Not unique table/alias”。如何正确地为这些表设置别名

邮政编码:
市区:
地区:
地区:

州:

德国大约有8K个邮政编码?如果不进行规范化,表的大小可能约为1-2MB——这是一个相当小的数量。根据您想要的索引,它可能会达到3MB

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

是否每个邮政编码都在一个
城市
?如果是这样,那么折衷方案是有两张表:

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;

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

您好。“normalize”一词用于表示两种不同的含义:放入1NF(本身没有固定的含义),以及根据FDs和JDs分解为更高的NFs。两者都不涉及用ID替换值。那你为什么用这个词呢?你在引用什么,你认为这个词的意思是什么&你认为你在努力实现什么?此外,关系模型中没有空值,因此您必须告诉我们您的引用中所说的空值“规范化”是什么。你的分解/重组在直觉上是合理的,但你为什么要这样做呢?PS,那么任何谷歌搜索都告诉你关于使用SQL表别名的信息吗?我想避免重复。回复你的错误消息和评论:请在每篇文章中问一个问题。请将澄清编辑成帖子,而不是评论。请阅读并采取行动。阅读SQL
选择distinct
,以及
自然连接
postal_code, city_district, city_id
city_id, city, district, region, state