2013-03-12 4 views
-1

Я работаю над приложением, которое позволит пользователям загружать медиафайлы и организовывать их медиа в папки. Пользователь может определить «тип» создаваемой папки: папка, видео, изображения, документы и т. Д.MySQL - Нормализованная или денормализованная файловая система?

Приложение отобразит содержимое любой папки по-разному в зависимости от ее типа; папка Video отобразит видеоплеер с плейлистом, папка с изображениями отобразит галерею и т. д.

Было бы лучше создать отдельные таблицы для всех типов папок или создать одну большую таблицу под названием FOLDERS с для присвоения типа?

Реальный носитель обрабатывается собственной таблицей MEDIA, а затем связан с папкой media_ID.

Вкратце: как ОС справляется с этим? Есть ли одна главная «таблица», называемая FOLDERS, а затем различные файлы связаны с папкой с помощью file_ID?

EDIT: Для того, чтобы уточнить, вот как «единичные папки таблицы» подход сломается:

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, в столбце «файл» просто сохраняется URL-адрес, указывающий, где хранится файл на AWS S3.

Спасибо.

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

Это зависит от того, какие данные вы собираетесь хранить в базе данных. Какие данные вы собираетесь хранить в базе данных? –

+0

Привет, Марк. Данные довольно простые для любой заданной папки: id, parent_ID, title, date. Я отредактировал выше, чтобы проиллюстрировать. – AJB

+1

Ваша предлагаемая структура выглядит так, как есть, с одной очевидной проблемой: MySQL не поддерживает рекурсивные CTE, поэтому один запрос не сможет пересечь всю иерархию файлов, предполагая, что вы можете иметь папки в папках. (Выделенные таблицы для каждого типа папок также не разрешали бы эту проблему.) Вы можете посмотреть в http://en.wikipedia.org/wiki/Nested_set_model. –

ответ

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

+0

, так что это обычно делается с помощью ассоциации типа (тип mime) в список приложений, которые регистрируются, чтобы открыть этот тип - все на уровне файла, а не на уровне папки. как пользователь, я был бы сбит с толку, если бы мой образ не отображался, потому что я помещал его в папку с видео. – Randy

+0

Спасибо Рэнди, но я думаю, что есть какая-то путаница между нами. Связь между медиа-типом и папкой менее важна. То, что я действительно пытаюсь понять, заключается в том, если его хорошая практика разбивать типы * любых * на несколько таблиц или все типы папок должны находиться в одной таблице с столбцом типа, чтобы обозначить ее тип. По существу: ОС хранит все свои папки в одной большой таблице или имеет несколько таблиц для каждого типа. Например, в OSX есть папка «Загрузки», папка «Документы», папка «Изображения» и т. Д. (Продолжение) ... – AJB

Смежные вопросы