Структура таблицы базы данных для корзины покупок - PullRequest
2 голосов
/ 12 декабря 2008

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

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

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

Ответы [ 4 ]

3 голосов
/ 12 декабря 2008

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

1 голос
/ 12 декабря 2008

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

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

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

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

1 голос
/ 12 декабря 2008

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

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

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

1 голос
/ 12 декабря 2008

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

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