2013-03-12 135 views
-1

我正在研究一个应用程序,该程序将允许用户上传媒体并将其媒体整理到文件夹中。用户可以确定他们创建的文件夹的“类型”:文件夹,视频,图像,文档等。MySQL - 文件系统规范化还是非规范化?

该应用程序将根据不同的类型显示不同的文件夹内容;视频文件夹将显示带有播放列表的视频播放器,图像文件夹将显示图库等。

为所有不同类型的文件夹创建单独的表,还是创建一个名为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 

因此,当用户添加媒体的排在FOLDERS_link_MEDIA表中创建连接的文件夹他们俩。

另一种方法,就像我看到的那样,应该有几个“文件夹”表FOLDERS_video,FOLDERS_audio,FOLDERS_images,FOLDERS_documents等。然后为每个文件夹类型附带一个链接表; FOLDERS_video_link_MEDIA表,FOLDERS_images_link_MEDIA等

此外,文件的实际数据将不会存储在MEDIA表中,'文件'列只存储一个指向AWS S3上文件存储位置的URL。

谢谢。

EDIT 2:SQL

而这里的我怎么会去遍历表(一个或多个)。如果我拉了一个文件夹的内容我会首先确定是否有属于当前文件夹的任何子文件夹:

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

然后我将显示在上面这些文件夹的用户(文件夹! )。然后我会继续获取任何媒体内容:

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

这取决于你打算在数据库中存储的数据。你打算在数据库中存储哪些数据? – 2013-03-12 20:22:33

+0

嗨马克。数据对于任何给定文件夹都很基本:id,parent_ID,标题,日期。我已经在上面编辑来说明。 – AJB 2013-03-12 20:37:40

+1

您提出的结构看起来很好,只有一个明显的问题:MySQL不支持递归CTE,因此假设您可以在文件夹中包含文件夹,则单个查询将无法遍历整个文件层次结构。 (每种文件夹类型的专用表也不能解决此问题。)您可能需要查看http://en.wikipedia.org/wiki/Nested_set_model。 – 2013-03-12 20:46:29

回答

1

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

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

例如,您尚未描述是否有可能存在不在视频文件夹中的视频。

如果必须,然后创建另一个表“文件夹”与此类似:当你为媒体做

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

然后用同样的TYPE_ID值。

,使文件夹树,像这样:

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

将媒体添加到文件夹是这样的:

FOLDER_CONTENT 
----------------- 
folder_id 
media_id 
+0

嗨,兰迪。是的,用户可以将任何类型的媒体放入任何类型的文件夹中。例如,如果您将视频放入文档文件夹中,系统不会抛出异常。文件夹类型用于确定呈现的界面:用于视频类型文件夹的视频播放器,用于图像类型文件夹的图像库等。 因此,如果用户将视频放置在图像文件夹中,则应用本身不会“ t抛出一个例外,只是媒体不会播放,因为它是一个试图被视为图像的视频文件。 – AJB 2013-03-12 20:40:48

+0

所以这通常是通过类型(mime类型)与注册以打开该类型的应用程序列表的关联完成的 - 所有这些都在文件级别上,而不是在文件夹级别上。作为一个用户,我会困惑,如果我的图像没有出现,因为我把它放在一个视频文件夹.. – Randy 2013-03-12 20:46:22

+0

感谢兰迪,但我认为我们之间有一些混淆。媒体类型/文件夹类型关系不那么重要。我真正想弄明白的是,如果将任何*文件夹类型拆分为多个表格或者所有文件夹类型都应该放在一个表中并使用“类型”列表示其类型的良好做法。实质上:操作系统是否将其所有文件夹存储在一个大表中,或者每种类型都有多个表。例如,OSX有一个下载文件夹,一个Documents文件夹,一个Images文件夹等(续)... – AJB 2013-03-12 20:50:47