【问题标题】:How to normalize data table to 3NF如何将数据表标准化为 3NF
【发布时间】:2014-04-05 17:02:32
【问题描述】:

我不明白如何将 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 个连接表。我说的对吗?

【问题讨论】:

标签: database data-modeling normalizing


【解决方案1】:

您可以为文件类型、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) |
+----+-------------+-----------------+

ptype

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

关键字

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

文件类型

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

filetype 的可能值有:image、archive、movie、audio 等。

【讨论】:

  • 所以。我有 7 张桌子。文件类型、PType 和关键字、它们的连接表(如 TypeId-FileId 等)和主表(文件名、目录、日期和大小)对吗?
  • 好的。我们有表:FileTypes、PTypes、Keywords、Directorys 和 FileNames 以及连接表和 PrimaryTable。对不起,我不熟悉数据库架构师
  • 什么是 PrimaryTable ? [[对不起,我不熟悉数据库架构师]] - 没有问题,我也不是数据库架构师 :-)
  • 我不明白如何连接我的表:文件类型、PType、关键字、目录和文件名?主表包含日期和大小。或者我也需要拆分它们?
  • 我在上面更新了我的答案。我认为不需要任何primaryTable。对主表有要求吗?
猜你喜欢
  • 2013-02-16
  • 2015-01-03
  • 2015-06-15
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2021-01-24
相关资源
最近更新 更多