На сервере необходима информация о корзинах, избранном, просмотренных товарах и подобных данных. Поэтому хранить в куках и сессиях не вариант. Хранить совместно данные об обоих видах пользователях, через алиас пользователя (единый идентификатор для обоих) - не вариант.
В качестве решения выбрано: создать дублирующие таблицы. Зарегистрированные пользователи идентифицируются по целочисленному id, гости по uuid. Получается следующий список таблиц
user: id
cart: id, user_id, order_id
cart_item: id, cart_id, product_id
favorites: id, user_id, product_id
guest: uuid
guest_cart: uuid, guest_uuid
guest_cart_item: uuid, cart_uuid, product_id
guest_favorites: uuid, guest_uuid, product_id
В guest_cart отсутствует order_id, т.к. при создании заказа (при регистрации или авторизации) данные переносятся в пространство user, а из guest* всё удаляется.
Какие есть ещё варианты решений данной проблему? Чем плоха эта реализация?
С праздником))