Одна или несколько строк MySQL? (корзина) - PullRequest
0 голосов
/ 06 декабря 2009

В настоящее время я создаю собственный сайт электронной коммерции (на php, но это не очень актуально для этого вопроса).

Я только что приступил к созданию корзины покупок и не могу выбрать один из следующих двух вариантов:

вариант 1:
Корзина столовая:

  • ID
  • Пользователь
  • товар

В этом варианте у меня будет по одной строке для каждого пользователя, и все позиции и количества будут храниться в поле товаров.

Этот формат уже используется в корзине на основе файлов cookie для пользователей, не вошедших в систему, поэтому анализ поля элементов не представляет проблем.

вариант 2:
Таблица Basket_items:

  • ID
  • Пользователь
  • пункт
  • количество

В этом варианте у меня будет по одной строке на элемент в корзине.

вариант 3:
предложить лучшую идею.

заключение

Обе эти опции одинаково просты для меня, поэтому возникает вопрос, который был бы более эффективным / удобным для обновления корзины.

Спасибо за любые ответы, Нико

Ответы [ 6 ]

3 голосов
/ 06 декабря 2009

Вариант 2 - это путь. Хранение всех предметов и количеств в поле предметов (опция 1) означает, что вы идете против реляционной природы MySQL. Вам нужно определить формат и проанализировать его с помощью опции 1, дополнительный код, который вы не написали, с помощью опции 2. Кроме того, с помощью опции 2 вы сможете делать другие вещи проще, например, вычислять итоги. , суммы отгрузки и т. д., а также отчеты о проданных количествах изделий (простой запрос).

Конечно, если бы я писал это, я бы также спросил себя, есть ли доступная библиотека для этого - зачем изобретать такую ​​распространенную функциональность, как корзина для покупок. Я не из мира PHP, поэтому я не знаю, какие есть варианты, но я уверен, что должно быть что-то, что вы можете использовать повторно. В конечном итоге, я бы посоветовал вам выбрать вариант 3 - не используйте его самостоятельно, если вы его избегаете: -)

2 голосов
/ 06 декабря 2009

ВАРИАНТ 3

Вам понадобится как минимум , таблица корзины и таблица basket_items. Корзины для покупок становятся раздутыми, и вы скоро поймете, что вам понадобится больше таблиц отношений, чем вы ожидали. Разделение таблиц таким образом обеспечивает отношение «один ко многим» для каждой корзины пользователя и его товаров.

Это позволит вам в будущем делать такие вещи, как применять промо-коды к корзине каждого пользователя.

Корзина

  • ID
  • user_id

basket_items

  • ID
  • basket_id
  • item_id
  • количество
2 голосов
/ 06 декабря 2009

Использование варианта 2 - вы не можете реально поддержать изменения в корзине покупок, используя вариант 1, или сообщить о нем.

1 голос
/ 06 декабря 2009

Вариант 1 потребует от вас сериализации данных в столбце элементов, который обычно вызывает неодобрение по причинам сложности и производительности.

Вы используете БД для ее возможностей связывания, поэтому давайте использовать их. Ваша таблица cart_items должна работать очень хорошо. Таким образом, каждая корзина может указывать на пользователя, а все элементы в корзине могут указывать на корзину.

0 голосов
/ 07 декабря 2009

Варианты 2 являются предпочтительными.

"item_id" может быть идентификатором таблицы, в которой хранятся все элементы (таблица Store) и где доступно полное описание и другая информация для этого элемента. Но я бы добавил ценник в эту корзину для каждого товара, и часто имеет смысл добавить к этой корзине также хэш сессии пользователя 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, такими как «Сумма», чтобы получить быстрый промежуточный итог для пользователя или всех пользователей без большого количества кода («Выберите сумму (цена * количество) ГДЕ sid =« 1234 »»). Если эта корзина также предназначена для "гостей", вам нужна другая таблица, в которой хранятся идентификатор сессии и дата создания, чтобы вы могли регулярно очищать корзину от неиспользуемых записей.

0 голосов
/ 06 декабря 2009

Вариант 2. Это лучший вариант и обеспечивает хорошую нормализацию данных. Это даст возможность для будущих расширенных выборок и фильтрации корзины пользователей.

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