我正在研究一個應用程序,該程序將允許用戶上傳媒體並將其媒體整理到文件夾中。用戶可以確定他們創建的文件夾的「類型」:文件夾,視頻,圖像,文檔等。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