2015-12-01 2 views
1

Я создаю веб-приложение laravel, где хочу, чтобы пользователи создавали альбомы и добавляли материалы в альбомы. Эти вещи, которые они могут записать в альбом, будут в основном изображениями, а также текстами, видеороликами YouTube, звуковыми дорожками и т. Д. (Далее). Каждый фрагмент контента будет элементом в альбоме.Разработка программного обеспечения: как хранить различные типы контента в базе данных

My 'solution': У меня есть таблица альбомов и таблица содержания. Строки таблицы содержимого - это все части содержимого, которые я хочу сохранить. Я думал о создании таблицы content_meta с внешним ключом в таблице содержимого (которая, в свою очередь, имеет внешний ключ к таблице альбома). в таблице содержимого содержится информация о типе содержимого, которое хранится (изображение, видео, текст, видео на YouTube), а в таблице content_meta содержится вся информация для каждого фрагмента контента.

Например изображение имеет строку содержимого таблицы:

id | album_id | user_id | content_type 
------------------------------ 
1231 | 311  | 973  | image 

и что изображение имеет следующие content_meta строки таблицы

id | content_id | meta_option | meta_value 
------------------------------------------- 
1231 | 1231  | thumb_url | http://example.com/img/1231/thumb.jpg 
1231 | 1231  | full_url | http://example.com/img/1231/thumb.jpg 
1231 | 1231  | description | what an image this is! 

Мой вопрос заключается в Как хранить эти элементы контента в базе данных «правильный путь»?. Решение, которое я придумал, является ли оно масштабируемым (для многих альбомов и многих пользователей)? Будет ли легко добавлять больше типов контента в будущем?

Я никоим образом не специалист по архитектуре/дизайну веб-приложений, поскольку я являюсь самообразованным «разработчиком». Я действительно хочу научиться правильно поступать!

Во многих примерах реальной жизни я столкнулся с другим решением, где увидел, что изображения хранятся в медиа-таблице. Но тогда, как я могу хранить видео на YouTube? Я бы создал другую таблицу для всех типов контента, которые я хочу хранить (таблицы для изображений, видео, видео Youtube, песни Soundcloud и т. Д.)?

Или мне нужно создать таблицу (для изображений и видео) и таблицу содержимого (для сохранения текстов и фрагментов html, например, видео на YouTube?)?

В моем приложении вы публикуете только один тип контента для элемента альбома. Не нравится на Facebook, где вы разместите изображение с текстом!

Вы бы действительно помогли мне, дав мне совет о том, как решить эту дилемму!

+0

Советуем вам не использовать модель EAV (значение атрибута сущности), она считается анти-шаблоном –

ответ

0

Это идеальное использование полиморфизма. Вы можете использовать таблицу для хранения различных типов носителей. Таблица морф будет хранить типы моделей средств массовой информации и т.д.

Прочитайте документацию здесь: http://laravel.com/docs/5.1/eloquent-relationships#polymorphic-relations

Кроме того, чтобы получить Вас в канавке Джефри Way имеет хорошее видео на нем: https://laracasts.com/lessons/polymorphic-huh

Адам Wathan сделать Хороший листинг на нем недавно: http://adamwathan.me/2015/09/03/pushing-polymorphism-to-the-database/

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

  • Нет связанных вопросов^_^