MySQL - 文件系统规范化还是非规范化?

时间:2013-03-12 20:18:26

标签: mysql filesystems normalization

我正在制作一款应用,允许用户上传媒体并将媒体整理到文件夹中。用户可以确定他们创建的文件夹的“类型”:文件夹,视频,图像,文档等

应用程序将根据其类型以不同方式显示任何给定文件夹的内容;视频文件夹将显示带有播放列表的视频播放器,图像文件夹将显示图库等

为所有不同类型的文件夹创建单独的表是否更好?或创建一个名为FOLDERS的大表,并使用列来指定类型?

实际媒体本身由其自己的名为MEDIA的表处理,然后使用media_ID链接到一个文件夹。

简而言之:操作系统如何处理这个问题?是否有一个名为FOLDERS的主“表”然后使用file_ID将各种文件链接到文件夹?

编辑:澄清一下,“单个文件夹表”方法将如何分解:

FOLDERS
...................
id
user_ID
parent_ID
type
date

MEDIA
...................
id
type
file
date

FOLDERS_link_MEDIA
...................
id
folder_ID
media_ID

因此,当用户将MEDIA添加到文件夹时,会在连接两者的FOLDERS_link_MEDIA表中创建一行。

另外,正如我所看到的那样,将有几个'文件夹'表FOLDERS_video,FOLDERS_audio,FOLDERS_images,FOLDERS_documents等。然后是每个文件夹类型的附带链接表; FOLDERS_video_link_MEDIA表,FOLDERS_images_link_MEDIA等。

此外,文件的实际数据不会存储在MEDIA表中,“文件”列只会存储指向文件存储在AWS S3上的URL。

感谢。

编辑2:SQL

以下是我如何遍历表格。如果我要提取文件夹的内容,我首先要确定是否有属于当前文件夹的子文件夹:

SELECT id FROM FOLDERS WHERE parent_ID='$this_folder_ID';

然后我会将这些文件夹显示给用户(顶部的文件夹!)。然后我会继续获取任何MEDIA内容:

SELECT media_ID FROM FOLDERS_link_MEDIA WHERE folder_ID='$this_folder_ID';

1 个答案:

答案 0 :(得分:1)

肯定的一种方式是FAT - 文件分配表。 (存在变化) 这告诉磁盘上文件的位置。

你所描述的听起来更像是'类型'而不是文件夹。您的MEDIA条目应该只有一个枚举类型 - 然后在您查询时它们将全部组合在一起。

例如,您尚未描述是否可以使视频不在视频文件夹中。

如果必须,则创建另一个类似于此的表'Folder':

FOLDER
------------
folder_id
type_id
name

然后使用与MEDIA相同的type_id值。

制作文件夹树,如下所示:

FOLDER_TREE
-------------
parent_folder_id
child_folder_id

将MEDIA添加到这样的文件夹:

FOLDER_CONTENT
-----------------
folder_id
media_id