我试图将表格标准化并将其置于第三范式,但我对这种情况感到困惑:
拿这个简单的表格:
stores
-------
id name type city country
country
通过id
过渡依赖于city
吗?我急忙说是,但后来我认为另一个国家可能存在同名的城市。这是否意味着此表格为第3范式,还是有需要修改的内容?
答案 0 :(得分:2)
有趣的问题。你是对的,country
并不依赖city
(例如,巴黎'不足以确定这个国家 - 是法国还是德克萨斯州,美国?)
城市列本身并不代表我们想要关联的域名,但如果城市和国家/地区的组合确实存在,那么我会将(city, country)
视为复合值,类似于date是(day, month, year)
的组合。这意味着该关系在3NF中具有3个FD:id->name
,id->type
和id->(city,country)
,因为依赖(city,country)->country
被认为是微不足道的。实际上,我会考虑在这种情况下引入代理密钥。
如果城市和国家/地区的组合不是唯一的,那么我们仍然有一个包含FD {3}},id->name
,id->type
和id->city
的3NF表格,最后两个之间没有依赖关系。
答案 1 :(得分:0)
我说城市和国家需要一张单独的桌子。认为城市可以改变他们的名字(印度仍在重命名城市:Bombay到Mombai多年前发生过,但似乎仍在发生这种情况)。苏格兰最近也进行了一次全民公决,将自己从英国撤出;他们选择“留下来”,但这个问题似乎远没有结束。
所以我把城市/国家放在一个单独的表中。我甚至可以将它们放在两个单独的表中,但除非你有一些依赖于国家的功能(例如税收计算),否则我可能会坚持使用。