В настоящее время я создаю собственный сайт электронной коммерции (в php, но это не актуально для этого вопроса).
Я только что создал корзину покупок и не могу решить между двумя следующими вариантами:
вариант 1:
Таблица корзин:
В этом случае у меня будет одна строка для каждого пользователя, со всеми элементами и количествами, хранящимися в поле items.
Этот формат уже используется в корзине на основе cookie для пользователей без регистрации, поэтому синтаксический анализ поля элементов не представляет проблемы.
вариант 2:
Таблица Basket_items:
В этой опции у меня будет одна строка за элемент в корзине.
вариант 3:
предложить лучшую идею.
вывод
Обе эти опции одинаково легко реализуются, поэтому возникает вопрос, который будет более эффективным/удобным для обновления корзины.
Спасибо за любые ответы, Нико
Вариант 2 - путь. Сохранение всех элементов и количества в поле элементов (вариант 1) означает, что вы идете против реляционного характера MySQL. Вам нужно будет определить формат и проанализировать его с помощью опции 1, дополнительного кода, который у вас нет, с параметром 2. Кроме того, с Вариантом 2 вы сможете делать другие вещи проще, например, вычислять итоговые значения, суммы доставки и т.д., а также отчетность о проданных предметах (просто простой запрос).
Конечно, если бы я писал это, я также спросил бы, есть ли библиотека для этого - зачем изобретать такие общие функции, как корзина покупок. Я не из мира PHP, поэтому я не знаю, какие есть варианты, но я уверен, что вы должны снова использовать его. Поэтому, в конечном счете, я бы посоветовал вам выбрать вариант 3 - не реализовывать его самостоятельно, если вы его избегаете: -)
Используйте вариант 2 - вы не можете реально поддерживать изменения в корзине покупок, используя вариант 1, или сообщить об этом.
Вам понадобится, как минимум, стол для корзины и таблица basket_items. Тележки для покупок становятся по своей сути раздутыми, и вы скоро поймете, что вам понадобятся дополнительные таблицы отношений, чем вы ожидали. Разбивание таблиц таким образом обеспечивает отношение "1 ко многим" для каждой корзины пользователей к своим товарам.
Это позволит вам делать что-то в будущем, например, применять рекламные коды к каждой корзине пользователей.
корзины
basket_items
Вариант 1 потребует, чтобы вы сериализовали данные в столбце элементов, которые, как правило, не одобряются по причинам сложности и производительности.
Вы используете БД для его возможностей связывания, поэтому можете использовать их. Ваша таблица cart_items должна работать очень красиво. Таким образом, каждая тележка может указывать на пользователя, и все предметы в корзине могут указывать на корзину.
Варианты 2 являются предпочтительным вариантом.
"item_id" может быть идентификатором таблицы, в которой хранятся все элементы (таблица сохранения) и где для этого элемента доступно полное описание и другая информация. Но я бы добавил к этой корзине ценник для каждого элемента, и часто имеет смысл добавить в эту корзину также идентификатор сеанса id/md5. Таким образом, строка запроса SQL для PHP для создания такой таблицы может быть примерно такой:
$sql="CREATE TABLE ".$table_prefix."Basket (
id int(11) NOT NULL auto_increment,
sid varchar(50) default NULL,
item_id int(10) default NULL,
quantity int(10) default 1,
price varchar(10) default NULL,
PRIMARY KEY(id)
) $collate_charset;";
$collate_charset: что-то вроде $collate_charset="DEFAULT CHARACTER SET utf8";
$table_prefix: часто полезно иметь префикс для таблиц типа $table_prefix="myshop_";
С такой таблицей вы можете воспользоваться функциями SQL, такими как "Sum", чтобы получить быстрый промежуточный итог пользователю или всем пользователям без большого количества кода ( "Выберите сумму (количество * цена) WHERE sid
= '1234'" ).
Если эта корзина также предназначена для "гостей", вам нужна другая таблица, в которой хранится идентификатор сеанса и дата создания, поэтому вы можете регулярно очищать корзину от неиспользуемых записей.
Вариант 2. Это лучший вариант и обеспечивает хорошую нормализацию данных. Это уступит место возможным будущим расширенным выборам и фильтрации корзины пользователей.