Как хранить информацию в поле в базе данных? - PullRequest
2 голосов
/ 11 мая 2011

Хорошо, поэтому я в настоящее время создаю простую корзину для своего сайта и исследовал этот вопрос, но не смог найти ответ.

Пока у меня есть эти таблицы:

Item
------
id
categoryID
brandID
name
price



Categories
-----------
id
name



Brands
-------
id
name



Shopping Carts
--------------
id
userID
itemIDs
itemPrices
itemQuantities

Судя по другим ответам, которые я нашел, это кажется правильным, за исключением того, что я не уверен насчет таблицы Корзин. Я собирался сохранить информацию в этой таблице следующим образом:

id: 1
userID: 1
itemIDs: 1;2;3;5
itemPrices: 40;50;60;70
itemQuantities: 1;2;3;4

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

Ответы [ 3 ]

3 голосов
/ 11 мая 2011

В идеале вы хотите хранить информацию о корзине либо в файлах cookie, либо в сеансах.Если вы хотите сохранить каждую корзину покупок в своей БД, вы можете использовать следующую реализацию.

По сути, одна корзина покупок может иметь несколько товаров, причем каждый товар имеет цену и количество, связанные с ним.

Для хранения корзин на пользователя используйте следующую схему:

Корзины

cartID (первичный ключ) sessionID (уникальный идентификатор, идентифицирующий сеанс пользователя, в котором была создана корзина) куплено (логическое ИСТИНА / ЛОЖЬ, чтобы сохранить, была ли корзина куплена или выброшена)

Корзина покупок

id (первичный ключ) cartID (уникальный идентификатор, идентифицирующий корзину пользователя) userID : (используйте, только если вы знаете, что пользователь всегда будет входить в систему при добавлении товаров в корзину) itemID : Уникальный идентификатор товара в корзине. itemQuantity : Количество заказанного товара. itemPrice : (необязательно - используйте, только если цена товара настраивается, или извлекайте ее из таблицы предметов)

С помощью приведенной выше схемы, если пользователь добавляет 2 товара в корзину, позволяетскажем

  • элемент X (количество = 2 шт., itemID = 1001) и
  • элемент Y (количество = 1 шт., itemID = 1002).

Ваши записи в таблице будут выглядеть так:

id : 1 sessionID : abc1 itemID : 1001 itemQuantity : 2

id : 2 sessionID : abc1 itemID : 1002 itemQuantity : 1

Теперь, когда вы хотите получить заказ для корзины покупок - просто запросите информацию на основе ID сессии, который использовался, когда пользователь создавал корзину.

1 голос
/ 11 мая 2011

Нет, это обычно не очень хорошая идея.Здесь вы выполняете несколько значений в одном поле, и это не очень хорошо, если вы когда-нибудь захотите запросить это поле.

И для вашей насущной необходимости добавьте новую таблицу, например:

CartContent
-----------
cartId
itemId
itemCount

Также см. http://en.wikipedia.org/wiki/Database_normalization для хорошего учебника по нормализации базы данных.

0 голосов
/ 11 мая 2011

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

...