-1

我不明白如何将 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 个附加表(用于文件类型、PTypes 和关键字)和 3 个连接表。我对吗?

4

1 回答 1

0

您可以为 FileType、PType 和关键字保留单独的表。例如,FileType 有两列 - id 和 type。Ptype 和关键字也是如此。

进一步, Directory : 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 表的属性(列),不是吗?如果日期是为目录派生的(该目录中所有文件名的最大日期),您将不需要目录表中的该列,因为它是根据其他字段计算的。

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

更新:

文件名

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

目录

+----+---------+-------+------+
| id | dirname | dates | size |
+----+---------+-------+------+

如果从文件名表派生,则不需要日期

如果从文件名表派生,则不需要大小

文件名关键字

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

文件名_ptype

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

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

文件名_文件类型

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

类型

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

关键词

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

文件类型

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

文件类型的可能值是:图像、存档、电影、音频等。

于 2014-03-04T09:17:31.710 回答