如何将数据表规范化为3NF

时间:2014-03-04 09:03:46

标签: database data-modeling normalizing

我不明白如何将db表规范化为3NF?

FileName    FileName
Directory   Directory
FileType    FileType (Image, Archive, Movie)
PType           Freeware or shareware (need to be buyed)
UploadedDateTime Uploaded date time 
CheckedDateTime Checked date time
FileSize    size of file
Keywords    like: family, home, work, etc (something like tags)

据我所知,我们需要创建3个附加表(用于文件类型,用于PType和用于关键字)和3个连接表。我是对的吗?

1 个答案:

答案 0 :(得分:0)

您可以为FileType,PType和关键字保留单独的表。 例如,FileType有两列--id和type。 同样适用于Ptype和Keyword。

继续进行, 目录:FileName是1:N关系。因此,将有一个Directory表,以及一个目录ID为外键的FileName表。

FileName:Keyword和FileName:FileType是N:N关系。 我假设FileName:FileType是N:N,因为文件可能是压缩的电影(存档+电影)。

不确定FileName:PType是否为N:N。取决于你的用例。我认为它是1:N。 FileName可以是免费软件或共享软件,而不是两者。一个简单的外键关系就足够了,不需要“连接”表。

我假设日期将是FileName和Directory表的属性(列),不是吗?如果为目录(该目录中的所有FileNames的最大日期)派生日期,则在目录表中不需要该列,因为它是从其他字段计算的。

我希望这些足以让你开始。

更新:

文件名

+----+----------+-------+------+------------------+
| id | filename | dates | size | directoryid (FK) |
+----+----------+-------+------+-------------+----+

目录

+----+---------+-------+------+
| id | dirname | dates | size |
+----+---------+-------+------+
如果从文件名表

派生,则不需要

日期 如果从文件名表

派生,则不需要

大小

filename_keyword

+-----+-------------+-----------------+
| id  | fileid (FK) |  keywordid (FK) |
+-----+-------------+-----------------+

filename_ptype

+----+-------------+--------------+
| id | fileid (FK) | ptypeid (FK) |
+----+-------------+--------------+

如果filename只能有一个ptype,则将ptype_id作为外键添加到filename表中。不需要filename_ptype。

filename_filetype

+----+-------------+-----------------+
| id | fileid (FK) | filetypeid (FK) |
+----+-------------+-----------------+

p型

+----+-------+
| id | ptype |
+----+-------+

关键字

+----+---------+
| id | keyword |
+----+---------+

文件类型

+----+----------+
| id | filetype |
+----+----------+

filetype的可能值包括:图像,存档,电影,音频等