【发布时间】:2018-05-24 15:12:36
【问题描述】:
+-------------+----------------------------+-------------------+-----------+-----------+-------------------+
| 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
城市:区号
地区:region_id
地区: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 获得上表。如果我想在“postalcode”之后加入“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
【问题讨论】:
-
嗨。 “规范化”一词用于表示两个不同的东西:放入本身没有固定含义的 1NF,以及根据 FD 和 JD 分解为更高的 NF。两者都不涉及用 id 替换值。那你为什么用这个词?你在关注什么参考,你认为这个词是什么意思以及你认为你想要完成什么?此外,关系模型中没有空值,所以你必须告诉我们你的参考资料说“规范化”是什么用空值。您的分解/重组在直觉上是合理的,但为什么您究竟要这样做?
-
PS 那么任何谷歌搜索告诉你关于使用 SQL 表别名的什么?
-
我想避免重复。
-
关于您的错误信息和评论:请在每个帖子中提出一个问题。请将说明编辑到帖子中,而不是 cmets。请阅读minimal reproducible example 并采取行动。了解 SQL
select distinct、how SQLcross/innerjoinworks 和natural join。
标签: mysql database-design database-normalization