Как правильно организовать базу данных?

Привет.
Я хочу спарсить и сохранить в бд города, рестораны и продукты с сайтов delivery club и yandex eda для отслеживания истории цен на продукты. Я должен иметь возможность находить продукты с определенного сервиса/города/ресторана и смотреть их историю цен.

Если б я парсил только один из сервисов, было бы легко:
Была бы таблица cities с городами, потом таблица restaurants с ресторанами, где каждый ресторан привязан к городу из cities и потом была бы таблица products с продуктами, привязанными к ресторанам из restaurants.
Схема:
627cb146461f4552248594.png
Для истории цен была бы отдельная таблица с product_id, ценой и датой.

Но когда добавляется второй сервис доставки задача усложняется, я не знаю как все организовать. Имена городов, ресторанов, продуктов совпадают и там и там, но цены продуктов могут отличаться.

Была такая идея: добавить в таблицу cities колонку service_id (1 или 2) и просто дублировать совпадающие продукты, города и т. д, но давать им разные айди в МОЕЙ базе (поле с авто инкрементом). И сджоинив все таблицы можно было бы отфильтровать продукты только из определенного сервиса. Но мне не нравится в этом подходе, что тут куча дублированной информации: названия городов, ресторанов, продуктов их описания и т.д., в общем всё повторяется.
Вторая идея: не дублировать повторяющиеся сущности (различать их по имени), а цены хранить как-то в отдельной таблице, но эту идею еще до конца не продумал.

Как бы вы решили эту задачу?
Если есть идеи, то хотелось бы увидеть схему, например, можете нарисовать здесь как я: https://drawsql.app
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Посмотрите следующую схему:
https://sqlize.online/sql/psql14/6c2181146b63205b7...
Ответ написан
Ваш ответ на вопрос

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

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