但是那里会有重复的数据,因为许多动物可能来自同一个国家,例如可能有很多老虎。
这表明您要跟踪单个动物,而不仅仅是动物种类。让我们假设动物园使用某种数字纹身或微芯片来识别个体动物。
假设该样本数据具有代表性。(不是,但可以用于教学。)
Animals
Predicate: Animal having microchip <chip_num> of species <species>
has name <name> and was born in <birth_country_code>.
chip_num name species birth_country_code
--
101234 Anita Panthera tigris USA
101235 Bella Panthera tigris USA
101236 Calla Panthera tigris USA
101237 Dingo Canis lupus CAN
101238 Exeter Canis lupus CAN
101239 Bella Canis lupus USA
101240 Bella Canis lupus CAN
该表中没有多余的数据。如果不从根本上改变该表的含义,就不能删除这些列。它有一个候选键:chip_num。它在 5NF 中。
值在非键列中重复。这就是非键(非主)列的定义。键列(或键列集)中的值是唯一的;非键列中的值不是。
如果要将“birth_country_code”中的值限制为有效的三字母 ISO 国家代码,可以添加一个有效的三字母 ISO 国家代码表,并为其设置外键引用。这通常是一件好事,但它与规范化无关。
iso_country_code
--
CAN
USA
你可以对“物种”再次做同样的事情。这通常也是一件好事,而且它也与规范化无关。