我有 MySQL 数据库,其中包含一张 GreatPlaces 表。这张表有 100 行,每行代表地球上不同的历史重要地点,例如北京的故宫或埃及的金字塔。它具有以下属性:
ID - integer, primary key
NAME - varchar, candidate key
COUNTRY - varchar, containing duplicities
CONTINENT - varchar, containing duplicies
TYPE - varchar, containing duplicities
LONGITUDE - decimal, containing duplicities (some historical sites are in the same city)
LATITUDE - decimal, containing duplicities (same as for an attribute LONGITUDE)
STORY_PATH - varchar, candidate key, an URL link to the file system
DESCRIPTION_PATH - varchar, candidate key, an URL link to the file system
PICTURES_PATH - varchar, candidate key, an URL link to the file system
VIDEO_PATH - varchar, candidate key, an URL link to the file system
我的表是否标准化?为了满足 1NF,所有字段都必须是原子的。唯一的问题可能是属性 NAME 的值,例如“胡夫金字塔和狮身人面像”可以分解为字符串,但我想这应该没问题(?)。然后我读到如果表在 1NF 中,则表在 2NF 中,并且每个非主属性都依赖于每个完整的主键。问题是我不知道如何找出哪个属性是非主属性。我读到非主属性是不能参与创建候选键的属性。但是在这里,在我的表中,我看到每个属性都可以与 ID 一起生成候选键,例如 {ID, LATITUDE} 可以生成候选键。
所以我的问题是我的假设是否正确,即我在表中没有任何非主要属性。然后我假设数据库应该自动在 2NF 和 3NF 中。这是正确的吗?