Структура таблицы базы данных для корзины покупок

Я новичок в SQL и работаю над одной из моих первых баз данных. Я пытаюсь создать очень урезанную корзину для покупок и в настоящее время работаю над созданием базы данных, прежде чем приступить к кодированию сайта.

Одна из вещей, с которой я борюсь, - это то, как структурировать продуктовую часть базы данных. Если бы все мои продукты были отдельными предметами, это было бы хорошо. Моя проблема в том, что мне также хотелось бы иметь возможность создавать «пакеты», которые бы объединяли несколько продуктов в один пакет / продукт с собственным уникальным идентификатором, но с другой ценой.

Кто-нибудь занимался этим раньше ... Черт, я уверен, что кто-то это сделал. Мой вопрос: есть ли лучший способ структурировать таблицы базы данных, чтобы учесть такого рода вещи? По логике я с трудом оборачиваюсь вокруг этого.

11.12.2008 21:13:59
4 ОТВЕТА
РЕШЕНИЕ

Ayende Rahien (из RhinoMocks) недавно делала серию по созданию корзины покупок, начиная здесь: http://ayende.com/Blog/archive/2008/12/07/designing-a-shopping-cart.aspx . Он использует диаграмму классов, но вы должны быть в состоянии преобразовать концепцию в диаграмму базы данных.

3
11.12.2008 21:37:40

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

1
11.12.2008 21:21:37

Все, что делает Айенде, будет делом новичка. Чтобы ответить на ваш вопрос, вам нужно 3 таблицы. Один для ваших продуктов, один для ваших пакетов и один для «связи» продуктов с пакетами. Я предполагаю, что у вас есть первые два. Третий называется отношениями «многие ко многим».

Он должен называться ProductsPackages и иметь два столбца (PackageId и ProductId). Вы должны создать ограничения внешнего ключа для таблиц Products и Packages.

Теперь, чтобы добавить товар в пакет, вставьте его идентификатор в таблицу ProductsPackages.

1
11.12.2008 22:08:22

Один из способов, который позволяет избежать лишних таблиц, но накладывает некоторые ограничения, состоит в том, чтобы просто добавить поле «ParentID» с собственной ссылкой в ​​таблицу продукта. Этот «ParentID» просто указывает на связанный продукт пакета. Поскольку это все одна и та же таблица, ваши пакеты имеют те же поля (цена и т. Д.), Что и ваши отдельные продукты. Чтобы узнать, какие продукты составляют пакет, просто запросите все продукты с помощью «ParentID» или «ProductID» пакета.

Ограничением является то, что продукты могут быть только частью одной упаковки. Поэтому, если вы продаете бейсбол, летучую мышь и перчатки, а также пакет «бейсбол», включающий все три, перчатки никогда не могут быть частью пакета «футбол».

Тем не менее, одним из преимуществ является то, что пакеты «бейсбол», «футбол» и «справочник тренера» могут быть частью пакета «полный спорт». И если вы удаляете летучую мышь из пакета «бейсбол», она также удаляется из пакета «полный спорт». Все без добавления одной таблицы.

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

1
11.12.2008 23:06:39