Лучший дизайн базы данных для хранения клиентов в белом списке - PullRequest
0 голосов
/ 23 января 2019

У меня есть случай, когда на рынке много рекламы. Каждая акция распространяется только на клиентов из белого списка. Существует вероятность того, что клиент внесен в белый список для более чем одного продвижения. Кроме того, он должен обрабатывать большой трафик, поскольку клиент всегда вводил промо-код, чтобы узнать, подходит ли он для этого или нет. В настоящее время я реализовал таблицу whitelist_customer со столбцом customer_id с уникальным индексом и столбцом values ​​с типом данных массива text []. Например, в одной строке я могу хранить customer_id '1', и этот клиент может участвовать в трех рекламных акциях, поэтому я сохраняю 'значения' с помощью 'PROMOCODE1', 'PROMOCODE2', 'PROMOCODE3'.

Поэтому, когда customer_id '1' вводит код PROMOCODE2, он запрашивает соответствие требованиям, выполняя поиск по его customer_id, а затем выполняет поиск с помощью @> (содержит).

Является ли этот подход лучшим решением?

1 Ответ

0 голосов
/ 24 января 2019

Нет.массивы нарушают правило First Normal Form в дизайне базы данных (повторяющиеся значения).Кроме того, для поиска в массиве требуется время.

Лучшее решение было бы с таблицей, где каждое продвижение находится в отдельной строке.Эта таблица будет иметь составной первичный ключ (это означает, что будет также индекс для двух столбцов)

CREATE TABLE customer_promotion (
    cust_id int,
    promotion varchar(50),
    PRIMARY KEY(cust_id, promotion)
);

поиск определенного cust_id, и продвижение становится тривиальным

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