Задать вопрос
ArBitr_exe
@ArBitr_exe
Начинающий Web-разработчик

Как организовано хранение статей сайта в бд?

Допустим есть статья, в которой помимо текста хранятся ссылки, картинки и т.д.. Каким образом организовано хранение данной статьи в бд? Точно знаю, что популярные CMS хранят в базе информацию со всеми тегами, но такой подход обычно ругают, да и он сам не выглядит серьезно. Какие еще есть варианты хранения "сложного" контента?
  • Вопрос задан
  • 7518 просмотров
Подписаться 12 Простой 11 комментариев
Решения вопроса 1
@Ambrosian
Arbitr,
А если в статье много картинок, при этом они идут по ходу текста, а не одна за другой, как тогда быть? Хранить тег Img прямо в тексте статьи?
почему нет?
причем, не обязательно прямо-таки именно чистый тег <IMG>.
а вполне можно хранить специальным тегом типа ![GitHub Logo](/images/logo.png) причем со ссылкой просто на идентификатор картинки, а конкретные пути к файлу будут подставляться при формировании страницы для посетителя.
это был пример из Markdown

Все зависит от задач


Если текст более никак не будет изменяться, то чего мудрить-то? проще (производительнее) будет хранить сразу конечный тег в тексте.

Если же предполагается редактирование и какой-то там Визивиг, то удобнее будет хранить специальным образом.

Почему теги нельзя хранить в текстах - это другая причина. Нельзя хранить произвольные теги в текстах. А жестко ограниченный набор тегов (например IMG, STRONG и т.п.) с запрещенными стилями - отчего нет?

Arbitr,
Когда искал вопрос, на форумах писали, что избыточное хранение тегов это не оч хорошо.


Речь о том, что теги могут влиять на форматирование.
Но если набор тегов ограниченный и они проходят контроль и очистку перед помещением в БД, то - можно.

P.S.:
Строго говоря, хранить имеет смысл не чистые теги HTML, а намеки на них. Например, текст:

Это некий текст. А вот тут картинка #img#id0234#

По сути это тоже тег. Но вы его преобразуете в <IMG> по определенным правилам. Сегодня у вас картинка лежит в http://example.com/images/id0234.jpeg, а завтра вы решили поместить картинки на отдельный сервер в облако и адрес будет https://images.example.com/id0234.jpeg
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Мыслите правильно!
Однозначно, весь текст статьи/публикации/материала нужно разбивать на модули:
1. Заголовки статьи: все уровни ("дерево" заголовков или, проще говоря, содержание)
2. Теги (1..N)
3. Параграф (1..N)
4. Изображение (1...N)
5. Видео (1..N)
6. Исходный код (1..N)
7. Спойлер (1..N)
8. Внутренний iframe (1..N)
9. Внешний виджет: ролик youtube, codepen.io, jsfiddle.com и т.д. (1...N)
10. Комментарии (1..N)
11. Линки (1..N)
и т.д.

И саму структуру статьи ("древовидный каракас"): где и что должно располагаться, что и куда должно быть вложено, и в каком порядке следовать друг за другом (разметка вместе с ID-шниками ресурсов).

Это поможет проще контролировать контент, сделать хороший поиск и использовать повторяющиеся элементы (в одной или разных публикациях) из одного источника (по ID).

И про правильное хранение текстовых данных (сегментацию): здесь
Ответ написан
@Katzuhiro_Akira
Если хотите узнать структуру хранения, то почему нельзя вскрыть сам движок?
У вордпресс, например хранения, вроде, вообще имеет прямые ссылки и идентификаторы внутри базы, которая состоит из 5-6 таблиц(по сути это одна таблица, которая раздроблема).
Каждый отдельный элемент хранится отдельно(текст1,текст2,картинка).

Для понимания рекомендую разобрать сами базы движков. У вордпресса это таблицы, которые в списке находятся рядом с _posts. Если проявить немного логики, то понять станет очень просто.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы