将数据库引入第三范式时与城市/国家的混淆

时间:2015-12-07 21:11:14

标签: relational-database database-normalization

我试图将表格标准化并将其置于第三范式,但我对这种情况感到困惑:

拿这个简单的表格:

stores
-------

id   name   type    city    country

country通过id过渡依赖于city吗?我急忙说是,但后来我认为另一个国家可能存在同名的城市。这是否意味着此表格为第3范式,还是有需要修改的内容?

2 个答案:

答案 0 :(得分:2)

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

城市列本身并不代表我们想要关联的域名,但如果城市和国家/地区的组合确实存在,那么我会将(city, country)视为复合值,类似于date是(day, month, year)的组合。这意味着该关系在3NF中具有3个FD:id->nameid->typeid->(city,country),因为依赖(city,country)->country被认为是微不足道的。实际上,我会考虑在这种情况下引入代理密钥。

如果城市和国家/地区的组合不是唯一的,那么我们仍然有一个包含FD {3}},id->nameid->typeid->city的3NF表格,最后两个之间没有依赖关系。

答案 1 :(得分:0)

我说城市和国家需要一张单独的桌子。认为城市可以改变他们的名字(印度仍在重命名城市:Bombay到Mombai多年前发生过,但似乎仍在发生这种情况)。苏格兰最近也进行了一次全民公决,将自己从英国撤出;他们选择“留下来”,但这个问题似乎远没有结束。

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