将数据库转换为第三范式时与 city/country 混淆

Confusion with city/country when bringing database to third normal form

我正在尝试规范化一个 table 并将其转化为第三范式,但我对这种情况感到困惑:

就拿这个简单的 table:

stores
-------

id   name   type    city    country

country 是否通过 city 传递依赖于 id?我急忙答应,但转念一想,另一个国家可能存在同名城市。这是否意味着这个 table 是第三范式,或者有什么需要修改的?

我会说城市和国家需要一个单独的 table。认为城市可以更改名称(印度仍在重命名城市:孟买到蒙买发生在几年前,但似乎仍在发生)。苏格兰最近也举行了一次脱欧公投;他们投票 'stay',但问题似乎远未结束。

所以我将 city/country 放在单独的 table 中。我什至可以将它们放在两个单独的 table 中,但除非你有一些依赖于国家/地区的功能(例如税收计算),否则我可能会坚持使用一个。

有趣的问题。你是对的,country 不依赖于 city(例如 'Paris' 不足以确定国家 - 是法国还是美国德克萨斯州?)

city 列本身并不代表我们想要关联的域,但如果 city 和 country 的组合确实如此,那么我会认为 (city, country) 是一个复合值,类似于日期是 (day, month, year) 的组合。这意味着关系在 3NF 中有 3 个 FD:id->nameid->typeid->(city,country),因为依赖性 (city,country)->country 被认为是微不足道的。实际上,我会考虑在这种情况下引入代理键。

如果城市和国家的组合不是唯一的,那么我们仍然有一个 3NF table,其中包含 FD id->nameid->typeid->cityid->country 并且最后两个之间没有依赖关系。