Разработка базы данных для продуктов с наборами продуктов

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

  • Продукт
  • Покупка
  • Продажа
  • Баланс

Все связаны друг с другом и могут показывать мой уровень запасов.

Проблема, с которой я столкнулась, - это также продавать пакеты продуктов, которые имеют разные цены, чем их индивидуальные цены.
Пример: Я продаю апельсин за 1 доллар, яблоко за 1,2 доллара; Я продаю пакет фруктов 1 (2 апельсина и 2 яблока) за 3,8 долл. США, пакет 2 (4 апельсина и 4 ябца) за 7 долл. США.

Есть ли правильный способ создания отношений для этих пакетов продуктов?

PS: Я использую FileMaker Pro, создавая это.

12 голосов | спросил shandery 18 FebruaryEurope/MoscowbThu, 18 Feb 2016 10:29:37 +0300000000amThu, 18 Feb 2016 10:29:37 +030016 2016, 10:29:37

1 ответ


13

Образец, который вы описываете, часто называют « фрагмент частей "или" спецификация материалов «. Он является частью графов и деревьев в исследовании структур данных. Суть решения заключается в том, чтобы понять, что любой данный «продукт» может состоять из других «продуктов». Дизайн представляет собой структуру сети, где есть таблица Product, которая имеет строку для каждого продукта - будь то из других продуктов или нет, а затем таблицу Product Component, которая имеет строку для каждого продукта, состоящую из других продуктов и каждого соответствующего продукта, который является компонент этого продукта. В вашем случае у каждого продукта есть цена. Итак, у вас будет что-то вроде этого

Product
-----------------------------------
|Name             |Price          |
-----------------------------------
|Orange           |1             |
|Apple            |1.20          |
|Fruit Package    |3.80          |
-----------------------------------

Product Component
----------------------------------------------------------
|Product               |Contains                |Quantity|
----------------------------------------------------------
|Fruit Package         |Orange                  |2       |
|Fruit Package         |Apple                   |2       |
----------------------------------------------------------

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

В то время как сетевой дизайн является общей структурой, запрос его проблематичен, поскольку при его полном заполнении он является рекурсивной структурой различной глубины. Промышленные сильные СУБД, такие как Oracle и SQL Server, имеют специальные языковые элементы (Oracle CONNECT BY и рекурсивный CTE SQL Server), чтобы помочь сделать запрос декларативным. Учитывая, что вы используете File Maker Pro, о котором я мало что знаю, у вас могут не возникнуть такие языковые конструкции, которые могут помочь и, возможно, придется написать код процедуры для прохождения по сети. Однако эта проблема может быть уменьшена, если сеть окажется фиксированной глубиной - скажем, каждый продукт не имеет ни компонентов, ни одного уровня компонентов. Вот несколько ссылок на сетевые структуры в дизайне базы данных:

  1. Практические проблемы в управлении базами данных - Fabian Pascal . В главе 7 представлено лучшее и наиболее понятное объяснение, которое я нашел.
  2. Деревья и иерархии Джо Селко в SQL для Smarties, второе издание . Это целая книга по теме, относящейся к стандарту SQL.
  3. Шаблоны модели предприятия - Дэвид Хэй . Книга о шаблонах, общих для всех организаций (к сожалению, ER-диаграммы представлены в UML, но это можно преодолеть), есть несколько примеров сетевых структур.
ответил Todd Everett 19 FebruaryEurope/MoscowbFri, 19 Feb 2016 15:37:26 +0300000000pmFri, 19 Feb 2016 15:37:26 +030016 2016, 15:37:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132