我正在研究一个应用程序,该程序将允许用户上传媒体并将其媒体整理到文件夹中。用户可以确定他们创建的文件夹的“类型”:文件夹,视频,图像,文档等。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';
这取决于你打算在数据库中存储的数据。你打算在数据库中存储哪些数据? – 2013-03-12 20:22:33
嗨马克。数据对于任何给定文件夹都很基本:id,parent_ID,标题,日期。我已经在上面编辑来说明。 – AJB 2013-03-12 20:37:40
您提出的结构看起来很好,只有一个明显的问题:MySQL不支持递归CTE,因此假设您可以在文件夹中包含文件夹,则单个查询将无法遍历整个文件层次结构。 (每种文件夹类型的专用表也不能解决此问题。)您可能需要查看http://en.wikipedia.org/wiki/Nested_set_model。 – 2013-03-12 20:46:29