2008-12-11 3 views
2

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

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

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

ответ

3

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

1

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

1

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

Его следует называть ProductsPackages и иметь две колонки (PackageId и ProductId). Вы должны создать ограничения внешнего ключа для таблиц «Продукты и пакеты».

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

1

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

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

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

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

Смежные вопросы