@temporaryuser

SQL-запрос на получение похожих данных из двух таблиц?

Доброго времени суток, делаю небольшой Pet-проект и возникли затруднения, связанные с проектированием БД и написанием эффективных SQL-запросов, перейду сразу к сути:

Использую PostgreSQL, имеется следующий список таблиц:
Псевдокод на dbdiagram.io

// Таблица с аккаунтами
Table accs {
  id int [pk, increment]
}

// Таблица с магазинами
Table shops {
  id int [pk, increment]
}

// Таблица с товарами аккаунтов
Table accs_products {
  id int [pk, increment]
  owner_acc_id int [ref: > accs.id]
  name text
  product_uniq_field_first text
}

// Таблица с товарами магазинов
Table shops_products {
  id int [pk, increment]
  owner_shop_id int [ref: > shops.id]
  name text
  product_uniq_field_second text
}

// Таблица с избранными аккаунтами для каждого аккаунта
Table favourite_accs_for_accs {
  acc_id int [ref: > accs.id]
  fav_acc_id int [ref: > accs.id]
}

// Таблица с избранными магазинами для каждого аккаунта
Table favourite_shops_for_accs {
  acc_id int [ref: > accs.id]
  fav_shop_id int [ref: > shops.id]
}



Краткое описание назначения таблиц и логики:
В системе есть аккаунты и магазины(accs и shops), которые могут размещать у себя товары(accs_products и shops_products), то есть аккаунты и магазины представляют из себя 2 типа магазина.
Также аккаунты могут добавлять эти самые разные площадки(магазины и аккаунты) в избранное, чтобы потом в общей ленте смотреть все товары разных типов магазинов(favourite_accs_for_accs и favourite_shops_for_accs).
Товары аккаунтов и магазинов похожи и имеют общие поля(name), но при этом у товаров магазинов и аккаунтов есть и свои уникальные поля(product_uniq_field_first и product_uniq_field_second). И таких отличающихся полей может быть как 5, так и 10.
Помимо этого, может быть такая ситуация, что кроме товаров аккаунтов и магазинов, появятся товары ещё одной отдельной сущности, например, групп(groups, groups_products, favourite_groups_for_accs) -- третий тип магазинов.

Конкретные вопросы:
1. Как правильнее будет спроектировать таблицы в БД? Создать одну единую таблицу для всех продуктов всех типов магазинов с кучей опциональных NULL-полей или же на каждый тип магазина по отдельной таблице, как сейчас?
2. Ключевой: исходя из вопроса выше, как должен выглядеть правильный SQL-запрос(PostgreSQL или аналогия в MySQL) по best practices на получение товаров разных типов магазинов(которые есть у аккаунта в избранных в двух таблицах favourite_accs_for_accs и favourite_shops_for_accs) с пагинацией(со строгим количеством элементов на странице) в том или ином случае?

Никак не могу продумать этот момент, очень надеюсь на Вашу помощь, заранее благодарю.
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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