Как правильно спроектировать базу данных для сайта?

Хочу попробовать написать сайт для организации, в которой работаю и честно говоря впал в ступор при проектировании БД. До этого к сожаления опыта в проектировании таких БД не было.
Сайт, должен содержать:
- модуль документов, отслеживающий действующие и утратившие силу документы;
- модуль постов (в него входят новости, фотогалерея, видеогалерея ...);
- модуль статических страниц (главная, контакты, и других страниц, которые будут создаваться в дальнейшем при необходимости).

Соответственно я хочу получить подобную структуру, которая также будет отображаться в меню:

Главная страница
Новости
Фотогалерея
Видеогалерея
Документы
-Постановления
-Распоряжения
... и т.д.

Я накидал структуру БД на рисунке ниже. На сколько правильно я сделал?

5e219a7d457d3209500080.png

И да у меня получилось что таблица" документы" связана с таблицей "изменения" связью он ко многим 2 раза. Можно ли так делать? (Этим действием я хотел связать один документ который вносит изменения в другой документ таблицы "документы").
  • Вопрос задан
  • 765 просмотров
Решения вопроса 1
syschel
@syschel
freelance/python/django/backend
Мне кажется вы немного перемудрили, излишне усложнив.
Смотря на ваше "меню", как вижу таблицы в БД я:
+ pages = id, url(ЧПУ, если выводить в адресной строке хотим не ИД), title(заголовок), text(тело страницы, то есть текст)
+ news = id, url, date, title, short_text(этот текст выводим в списке новостей, он короткий), text(это уже на странице новости), image(картинка новости)
+ photo_category(если нужны альбомы для набора фотографий) = id, title, text(описание альбома), image(превьюшка альбома)
+ photos = id, name(если нужно название или описание), image(путь до файла), category(ссылка на photo_category, если нужны альбомы, иначе поле не создаём)
+ videos = id, video(ссылка на видео файл)
+ document_category = id, name
+ documents = id, category(ссылка на document_category ), ISBN(какой-то идентификатор документа вне бд), created(дата_тайм создания), update(дата_тайм обновления/изменения)

Если изменений у документов несколько, в разные периоды, то я бы выносил поле update в отдельную таблицу
+ document_modifed = id, document(ссылка на документ), date, comment(комментарий иб изменениях, если он нужен)

Ещё можно было бы добавить пользователей, пускай не на уровне пользователей сайта, а просто как список, то добавил бы. Чтобы указывать автора документа, автора изменений документа(если это нужно отслеживать).

Поля category в таблице photos и document_category , у меня подразумевают, что категория у них может быть выбрана одна из, а не множество из. Если нужно именно множественный, то да, создавать отдельную таблицу и указывать там связи
Я сделал специально независимые таблицы "категорий", так как скорее всего они и будут независимыми, не пересекающимися. Тогда при создании под объекта, можно выбирать из списка категории только его типа, а не копаться во всех категориях скопом. То есть, создавая запись об документе, не надо выбирать среди "фоточки с корпаратива 2018", "протяжные валы", "зарплаты", "отмечаем юбилей", "отчёты".
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
tsklab
@tsklab
Здесь отвечаю на вопросы.
Документ: Код, КодОсновногоДокумента, если КодОсновногоДокумента пустой, то это основной документ, иначе — изменение.
Ответ написан
@shmaroder
https://creditpower.ru
Как не проектируй, все равно потом переделывать. :)

9fb5e6.jpg
Ответ написан
Тебе надо понять что такое структура данных, и прочитать вузовский учебник для инженеров по проектированию БД

и начинающему программисту лучше сделать свою первую БД самостоятльно, не используя готовую СУБД
научись структурировать свои данные и сохранять их в файлах и папках
- только так ты станешь настоящим программистом, а не чесальщиком-мотальщиком

после этого можешь попробовать любую готовую СУБД
и не обязательно использовать реляционную - иногда удобнее другие типы
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы