Projektowanie bazy danych produktów z pakietami produktów

14

Buduję system baz danych dla mojej działalności detalicznej. Ustawiłem kilka tabel, które są:

  • Produkt
  • Zakup
  • Obroty
  • Saldo

Wszystkie są ze sobą połączone i są w stanie pokazać mój poziom zapasów.

Problem, który mam, polega na tym, że sprzedaję również pakiety produktów, które mają inne ceny niż ich indywidualne ceny.
Przykład: sprzedaję pomarańczę za 1 USD, jabłko za 1,2 USD; Sprzedaję pakiet owoców 1 (2 pomarańcze i 2 jabłka) za 3,8 USD, pakiet 2 (4 pomarańcze i 4 jabłka) za 7 USD.

Czy istnieje właściwy sposób na stworzenie relacji dla tych pakietów produktów?

PS: Używam tego FileMaker Pro.

shandery
źródło

Odpowiedzi:

16

Opisany wzór jest często nazywany „ eksplozją części ” lub „ zestawieniem materiałów ”. Jest to część wykresów i części drzew w badaniu struktur danych. Istotą tego rozwiązania jest uświadomienie sobie, że każdy „produkt” może składać się z innych „produktów”. Projekt jest wówczas strukturą sieciową, w której znajduje się Producttabela z wierszem dla każdego produktu - niezależnie od tego, czy składa się z innych produktów, czy nie, a następnie Product Componenttabela z wierszem dla każdego produktu, który składa się z innych produktów i każdy odpowiadający produkt, który jest składnikiem tego produktu. W twoim przypadku każdy produkt ma swoją cenę. Więc miałbyś coś takiego

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       |
----------------------------------------------------------

Ten projekt jest lepszy niż pojedyncza tabela ze skojarzeniem rekurencyjnym, ponieważ dokładnie oddziela to, co tak naprawdę jest dwoma typami jednostek - węzły i łącza. W naszym przypadku produkty są węzłami, a komponenty produktu są linkami.

Chociaż projekt sieci jest powszechną strukturą, tworzenie zapytań jest problematyczne, ponieważ po całkowitym wypełnieniu jest strukturą rekurencyjną o różnej głębokości. Siły przemysłowe DBMS, takie jak Oracle i SQL Server, mają specjalne elementy językowe (CONNECT BY Oracle i rekurencyjne CTE SQL Server), aby pomóc w zadeklarowaniu zapytania. Biorąc pod uwagę, że używasz File Maker Pro, o którym niewiele wiem, możesz nie mieć takich konstrukcji językowych, aby pomóc i być może będziesz musiał napisać kod procedury, aby przejść przez sieć. Problem ten można jednak złagodzić, jeśli okaże się, że sieć ma stałą głębokość - powiedzmy, że każdy produkt nie ma żadnych komponentów lub ma jeden poziom komponentów. Oto kilka odniesień dotyczących struktur sieci w projekcie bazy danych:

  1. Praktyczne problemy w zarządzaniu bazami danych - Fabian Pascal . Rozdział 7 zawiera najlepsze i najbardziej zrozumiałe wyjaśnienie, jakie znalazłem.
  2. Joe Celko's Trees and Hierarchies in SQL for Smarties, wydanie drugie . To cała książka na temat specyficzny dla standardu SQL.
  3. Wzory modeli korporacyjnych - David Hay . Książka o wzorcach wspólnych dla wszystkich organizacji (niestety diagramy ER są przedstawione w języku UML, ale można je pokonać) istnieje kilka przykładów struktur sieciowych.
Todd Everett
źródło