2010-05-31 3 views
0

I новый в базе данных дизайн.Какие таблицы должны быть созданы для хранения всех видов файлов для онлайн-приложений?

У меня вопрос с моим собственным решением, как вы думаете?

Какие таблицы должны быть созданы для всех типов файлов, хранящихся в моем интернет-магазине (изображения, прикрепленные файлы электронной почты, текстовые файлы для тела электронной почты магазина и т. Д.)?

вариант 1: использовать отдельную таблицу для типов файлов

files{ 
id 
files_types_id FK 
file_path 
file_extension 
} 

files_types 
id 
type_name (unique) 
} 

вариант 2: использование поля BOOL для каждого типа файла

files{ 
id 
file_path 
file_extension 
is_image_main 
is_image_icon 
is_image_logo 
is_pdf_file 
is_text_file 
} 

вариант 3: использовать одно поле ENUM ' file_type 'для каждого типа файлов

files{ 
id 
file_path 
file_extension 
file_type (image_main,image_icon,image_logo,image_main,pdf,text) **enum** 
} 

Благодарим вас, Yosef

+0

Я не очень хорошо знаю mySql, поэтому я не могу говорить с функцией enum, но могу сказать, что вариант 2 - худший вариант. Каждый раз, когда вы решите добавить другой тип файла, вы будете изменять свою схему базы данных ... – Kendrick

+0

почему ее проблема в изменении схемы базы данных? Ее дополнительное значение, а не изменение шаблона таблицы. Пожалуйста, можете привести пример для вашего мнения (I только спросите знать beacause i new в дизайне базы данных) – Yosef

+0

Это проблема, потому что если вы начнете хранить видео, это новый столбец, если вы начнете хранить аудио, это новый столбец и т. д. – APC

ответ

2

Я бы выбрал вариант 1 - это «классическая» полностью нормализованная форма.

Я думаю, что вариант 3 как «нормализация бедных» - столбец по-прежнему ограничен ограниченным набором типов, но вы не делаете список возможных типов доступными для пользователей баз данных. (В SQL Server это будет сделано с ограничением CHECK.) В зависимости от вашего проекта и (отсутствия) релевантности данных это может стоить того, но информация типа «файл» полезна и важна, и я бы не стал хочу скрыть это.

Чтобы быть полным, я буду бросать в варианте 4: создать одну таблицу для каждого типа файла:

files_text{ 
id 
file_path 
file_extension 
} 

files_pdf{ 
id 
file_path 
file_extension 
} 

files_image_main{ 
id 
file_path 
file_extension 
} 

etc. 

Эта структура также может иметь место, но это, как правило, ужасный дизайн, и вы разумно не перечислить его. (Хм, что это делает?)

+0

thank у вас, есть ли у вас классический пример использования перечислений (я не видел использование emun в базе данных) – Yosef

+0

Я не знаком с MySql. Если вы собираетесь использовать «вариант 3», прочитайте ограничения по столбцам и таблицам. Должно быть одно, возможно, названное ограничение «проверка», которое ограничивает значения, которые могут быть введены в столбец. Проверки часто выглядят как «> 0», «от 1 до 10» или «in (« image_main »,« image_icon »,« image_logo »,« image_main »,« pdf, text ») –

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