В нашем приложении есть интернет-магазин и другие функции, и пользователям обычно предлагается зарегистрироваться до завершения продажи, создавая уникальный customer_ID
в процессе.Когда они вернутся, они смогут войти в систему, и их контактные данные и история транзакций будут извлечены из базы данных.
Сейчас мы изучаем, что делать в случае «анонимного» или «гостевого» клиента, открываяИнтернет-магазин для клиентов, которые не хотят регистрироваться, а также для продаж, зарегистрированных в бэкэнд-приложении, где получение электронной почты, почтового адреса и т. д. потребителя занимает слишком много времени.В решении также есть приложения вне интернет-магазина.
Несколько компаний используют одну и ту же базу данных, и база данных построена на структуре party model , поэтому мы рассмотрели несколько вариантов:
- Храните всех анонимных клиентов под одним предопределенным
customer_ID
в таблице transaction
: customer_ID = 0
для каждого анонимного пользователя и customer_ID > 0
для каждого реального пользователя - Это просто для жесткого кода в приложение
- Но более важно определить, какие клиенты принадлежат к какой компании
- Должны ли детали для
customer_ID = 0
существовать в customer
таблица в базе данных или как объект в приложении? - Если в базе данных какие ограничения на уровне базы данных могут быть сделаны для обеспечения ее постоянного существования?
- Если нет в базе данных, то ограничения внешнего ключа от
transaction.customer_ID
до customer.customer_ID
больше не работает
customer_ID
совпадает с компанией party_ID
- Проще определить совокупные продажи для каждой компании и т. д.
- Это может привести к путанице, поскольку может показаться, что компания является собственным клиентом, а не другими уникальными клиентами
- Создание уникального
customer_ID
для каждого нового анонимного клиента (за сеанс) - Что, если тот же физический пользователь вернется?Будет много записей, повторяющих один и тот же тип данных;адрес электронной почты, адрес доставки и т. д.
- Используйте другой уникальный ключ, например адрес электронной почты, для ссылки на клиента
- Не всегда надежно, поскольку люди иногда используют более одногоадрес электронной почты или оставьте старые адреса.
- Что делать, если адрес электронной почты не берется, как в случае с торговым залом, счетами-проформами и т. д.?
- Некоторые другие решения, основанные на переполнении стека!
Добавление
В другом месте была предложена комбинация № 2 и № 3 - попытка сохранить одинзапись для каждого клиента, используя адрес электронной почты, если это возможно, или новую запись при каждом посещении, если нет.
Я должен отметить, что нам не нужно , чтобы хранить записи для каждогоанонимный клиент, но кажется, что реляционная база данных была создана для работы со связями, поэтому наличие в таблице transaction
значения NULL или customer_ID
, который не ссылается на фактическую запись клиента, кажется неправильным ...
Я должентакже подчеркните, что цель этого вопроса состоит в том, чтобы определить, какие существуют реальные решения для записи «случайных» транзакций, в которых не указывается ни почтовый адрес, ни адрес электронной почты (представьте, как в супермаркете), а также транзакции интернет-магазина, где адрес электронной почты и почтовый адреспредоставляются независимо от того, хранятся они или нет.
Какие решения использовали SO-сообщества в прошлом?