Разработка программного обеспечения: как хранить различные типы контента в базе данных

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

Мое «решение»:
У меня есть таблица альбомов и таблица содержимого. Строки таблицы содержимого — это все части содержимого, которые я хочу сохранить. Я думал о создании таблицы 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, где вы бы опубликовали изображение с текстом!

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

1

Решение

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

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

Также, чтобы помочь вам в этом, у Джеффри Уэй есть хорошее видео: https://laracasts.com/lessons/polymorphic-huh

И Адам Уотан недавно сделал хороший актерский состав: http://adamwathan.me/2015/09/03/pushing-polymorphism-to-the-database/

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]