Разработка схемы базы данных - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть таблица купонов в Postgres, которая имеет более 50 столбцов.

Схема БД имеет вид:

  • id: String,
  • code: String,
  • restrict_to_user: text [] // хранилище массиваидентификатор профиля пользователя, для которого действителен купон,
  • restrict_to_hotel: text [] // массив отелей, для которых действителен купон, и многие другие записи.

В настоящее время поле restrict_to_user хранит массив userId, но когда поле restrict_to_user становится большим, в этом случае запрос замедляется.

Как сохранить поле restrict_to_user в БД.Также в будущем появятся новые ограничения.Как с ними обращаться?

1 Ответ

0 голосов
/ 06 февраля 2019

С точки зрения согласованности данных вы можете нормализовать свою схему, а не перечислять пользователей, отели и т. Д. В массивах.Например, есть таблица соединения между вашими таблицами coupons и users, которая отслеживает пользователей, которые ограничены определенным купоном.Вы можете добавить уникальное ограничение на комбинацию внешних ключей купона и пользователя, чтобы избежать записи дубликатов.При использовании массива вы склонны к дублированию, поэтому вам захочется обработать ваш массив либо в вашем запросе (например, unnest() с последующим group by), либо в коде приложения.

ВВ больших масштабах существуют также потенциальные проблемы производительности с массивами типов переменной длины.Это если вы придерживаетесь text[], который, я подозреваю, должен быть integer[].Смотри https://heapanalytics.com/blog/engineering/dont-iterate-over-a-postgres-array-with-a-loop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...