2013-03-12 180 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