Ответы пользователя по тегу Проектирование баз данных
  • Нужна ли общая таблица?

    @Vitsliputsli
    По требованиям описанным в задаче:
    запросы на исполнение услуги
    Users (Пользователи)
    -Id

    Services (услуги)
    -Id

    UserServices(услуга, которую может выполнить пользователь)
    -Id
    -User.Id

    Requests (запрос пользователя на услугу, которую требуется выполнить для него )
    -Id
    -Users.Id (запрашивающий пользователь)
    -Services.Id (запрашиваемая услуга)

    Responses (Отклики пользователя на предоставление услуги или на запрос)
    -Users.Id (откликнувшийся пользователь)
    -Requests.Id (запрос, на который отклкинулся)


    По требованиям, с учетом комментария "Пользователь может как откликнуться на заказ, так и выбрать исполнителя, не создавая свой заказ".
    поиск исполнителья или нанимателя
    Users (Пользователи)
    -Id

    Services (услуги)
    -Id

    UserServices(услуга, которую может выполнить пользователь)
    -Id
    -User.Id

    Requests (запрос пользователя на услугу, которую требуется выполнить для него )
    -Id
    -Users.Id (запрашивающий пользователь)
    -Services.Id (запрашиваемая услуга)
    -Status (статус: открыт или завершен)

    Deals (Заключенная сделка)
    -Users.Id (пользователь-наниматель)
    -Users.Id (пользователь-исполнитель)
    -Services.Id (услуга для исполнения)
    Ответ написан
    Комментировать
  • Проектирование БД, какую СУБД выбрать?

    @Vitsliputsli
    Вполне нормальная структура. Нагрузка низкая. СУБД та, которую лучше знаете (это актуально и для высоких нагрузок, тот же MySQL прекрасно себя показывает на высоких нагрузках, если вы его используете как базу данных, и не требуете приготовления кофе). Схемы здесь задействовать ни к чему. ClickHouse - это вообще про другое, забудьте до тех пор, пока не понадобится аналитика по большим объемам данных. Главное, не забудьте построить индексы по тем полям, по которым будете формировать выборки.
    Ответ написан
    Комментировать
  • Как лучше сохранять дату и время?

    @Vitsliputsli
    Вариант с таблицей дат, вы вероятно подсмотрели где-то, где в одной таблице хранятся агрегаты разной гранулярности. Только в этом случае такие манипуляции имеют смысл. Но хорошим я бы такое решение все равно не назвал бы. Сделать несколько таблиц агрегатов выгоднее, чем все свалить в кучу и потом терять в чтении и записи, на манипуляции с дополнительной таблицей. Или еще лучше, запихнуть все в колоночное хранилище, которое само будет управлять агрегатами.
    Но вы ведь вообще не агрегаты собираете, а просто данные, так что все это ни к чему.
    Ответ написан
    Комментировать
  • Как правильно оформить базу данных для сервиса чек листов?

    @Vitsliputsli
    users:
    - user_id
    - name

    checklists:
    - checklist_id
    - user_id - связь с users

    tasks:
    - task_id
    - checklist_id - связь с checklists
    - task_message
    Ответ написан
    Комментировать
  • В чем польза шардирования БД при наличии индексов?

    @Vitsliputsli
    В общем, в чем конкретно выигрыш от шардирования?

    Шардирование не предназначено для ускорения доступа к данным, поэтому нет смысла сравнивать с индексами, во всяком случае не в таком контексте как вы описали. Шаридирование - это вариант горизонтального масштабирования. Когда вы не сможете больше увеличивать мощность одного сервера СУБД под возросшие потребности, то придется задуматься о нескольких серверах СУБД, т.е. о горизонтальном масштабировании, а шардирование один из его вариантов.
    Ответ написан
  • Как хранить два состояния одного объекта в базе данных?

    @Vitsliputsli
    Кроме дублирования таблиц что бы хранить Проверенную и Не проверенную инфу какие есть варианты?

    1) партиционирование;
    2) построить индексы.
    Ответ написан
    Комментировать
  • Как наложить нетривиальное ограничение уникальности на поле?

    @Vitsliputsli
    Создавать связь по city_id плохой вариант. Да, вы решите вопрос с уникальностью, но потеряете принадлежность районов к определенному городу в рамках таблицы ТР.
    Поэтому решайте с помощью внешнего языка программирования или хранимых процедур. Триггеры не очень явная штука, я бы лучше создал отдельную процедуру для заведения новых ТР, если выберите 2 вариант.
    Ответ написан
    Комментировать
  • Спроектировать таблицу?

    @Vitsliputsli
    В зависимости от того, как будете использовать. Если будете забирать все вместе по id, то нет резона дробить, особенно с учетом возможного изменения ключей. В таком случае, я бы положил все в json, если СУБД поддерживает такой тип данных. Если же ключи имеют такое значение, что рано или поздно по ним будут строятся запросы, то тогда используйте преимущества хранения данных реляционных СУБД.
    Ответ написан
    Комментировать
  • Что значит "опыт прямой работы с базами данных без прослоек"?

    @Vitsliputsli
    Написание SQL без использования ORM. Либо у работодателя очень нагруженный сервер СУБД и тогда нужно ещё и понимание работы СУБД (как оптимизатор выбирает оптимальный план, как писать более производительные запросы и почее), либо ребята просто не умеют работать с ORM и боятся его.
    Ответ написан
    Комментировать
  • MYSQL - Где размещать дополнительные поля?

    @Vitsliputsli
    Подскажите, на сколько это правильно? На сколько это целесообразно?

    А что именно сейчас смущает в существующей структуре? Исходите из того, что реально может помочь, а не то, что "правильно". Разбиение на несколько таблиц это затраты на join. Нет идеальных решений, любая оптимизация это жертвование чем-то, ради чего-то еще. Никто лучше вас не знает вашу систему, что произойдет после преобразований? Насколько усложнятся или упростятся запросы к БД, как по производительности, так и по читаемости?
    Как вы хотите представить эти данные в новой таблице? Attribute-Entity-Value? Если да, то прикиньте насколько усложнится система и отяжелеют запросы. "Счетчиков будет гораздо больше 2," это сколько? 10-20? Тогда даже не стоит заморачиваться, если больше 100, тогда, да, можно уже сейчас начать изменять струкутуру.
    Ответ написан
  • Структура таблицы бд?

    @Vitsliputsli
    Зависит от того, как будете использовать, я так понимаю это одна и та же сущность (проект не может находиться одновременно в 2 статусах) - значит храните в одном поле. Если речь о том, в каком варианте съэкономите место, то не стоит этим заморачиваться, усложнение кода в угоду сомнительной оптимизации плохая практика. Какой выигрыш будет на 10млн базе? 10Мб? 20Мб? - это несерьезно. Зато как усложнится работа с такими данными и их обработка - потеряете больше, чем приобретете.
    Ответ написан
    Комментировать
  • Нормально ли хранить в базе данных json?

    @Vitsliputsli
    Вам нужно будет получать данные изнутри json прямо из БД? Если не нужно, то вполне нормальное решение. Даже если нужно и БД поддерживает json, то можно, если, конечно, вы не будете делать отбор по этим сущностям.
    Ответ написан
    Комментировать
  • Как создать таблицу, для хранения истории изменений?

    @Vitsliputsli
    Наверное, самое оптимальное сделать поле с временем изменений. Если оно заполнено, то это история, если не заполнено, то актуальное состояние. Чтобы не усложнять запросы, создать триггеры на выборку, update/delete, выполняющие операции с этим полем, а для пользователя его как бы и нет, кроме специфических вопросов по истории. И, конечно, настроить партиционирование таблицы чтобы актуальное и история хранились физически отдельно.
    Ответ написан
    Комментировать