sql >> Databáze >  >> RDS >> Database

Flexibilní a ovladatelné návrhy kusovníků (BOM).

Návrhový vzor kusovníku je zdánlivě jednoduchý, ale neuvěřitelně výkonný. Tento článek představí příklad, známý odborníkům v oblasti IT, o kterém jste si možná nemysleli, že se hodí do vzoru kusovníku. Představí také koncepty, které vám ukážou, jak učinit vaše struktury kusovníků flexibilnějšími a mnohem snazšími na správu.

Krátká rekapitulace kusovníku

kusovník má kořeny ve výrobě. Je to seznam surovin, podsestav, mezisložek, dílčích součástí, dílů a množství každého potřebného k výrobě konečného produktu.

Ve své nejjednodušší podobě, klasické struktuře kusovníku, vypadá takto:




Stejný druh struktury však lze použít k mnoha různým účelům , které sahají od něčeho přísně hierarchického a pevně spojeného až po něco poměrně plochého a volně spojeného. Další informace o struktuře kusovníku naleznete v tomto článku.

Schémata – každodenní příklad

Věřte tomu nebo ne, ale triplet typu třída-atribut a triplet typu tabulka-sloupec se také řídí vzorem kusovníku. Fyzický datový model níže obsahuje základní tabulky datového slovníku.





Tabulka Popis
dd_attribute Jedinečný atribut, nezávislý na jakékoli implementaci.
dd_attr_instance Instance atributu. Instance má dva odlišné vztahy:
1) Třída, do které patří, což může být logický nebo fyzický objekt. Instance je pro tuto třídu jedinečná.
2) Datový typ, který může být buď nativní typ, nebo jiný typ třídy.
dd_class Třída nebo objekt v obecném smyslu – skutečná implementace je dána parametrem class_type – který má sadu atributů.


Datový slovník neboli úložiště metadat je v IBM Dictionary of Computing definováno jako „centralizované úložiště informací o datech, jako je význam, vztahy k jiným datům, původ, použití a formát“.

Nyní zvažte následující definici schématu XML (XSD) pro aplikaci Java:



Definuje komplexní typy XSD, které mají atributy buď nativních typů XML – např. řetězec , NMTOKEN , jakýkoliSimpleType – nebo jiné složité typy.

Abychom mohli začít naplňovat datový slovník pro výše uvedený XSD, musíme nejprve zadat XML nativní datové typy jako třídy :


class_name stereotyp
logická hodnota Nativní
datum Nativní
dateTime Nativní
řetězec Nativní
verze Nativní
NMTOKEN Nativní
anySimpleType Nativní


Nyní máme vše, co potřebujeme, abychom mohli začít plnit náš datový slovník. V níže uvedeném příkladu je zobrazeno právě tolik, aby bylo možné plně definovat ConnectionConfigType komplexní typ.


dd_attribute of_class (prostřednictvím dd_attr_instance) type_class (prostřednictvím dd_attr_instance)
attr_name název_třídy stereotyp název_třídy stereotyp
klíč Typ vlastnosti XSDcomplexType řetězec Nativní
hodnota Typ vlastnosti XSDcomplexType řetězec Nativní
Vlastnost ConnectionConfigType XSDcomplexType Typ vlastnosti XSDcomplexType
driverClassName ConnectionConfigType XSDcomplexType řetězec Nativní
uživatel ConnectionConfigType XSDcomplexType řetězec Nativní
heslo ConnectionConfigType XSDcomplexType řetězec Nativní
poolName ConnectionConfigType XSDcomplexType řetězec Nativní


Všimněte si datového typu ConnectionConfigType.Property atribut je další komplexní typ, PropertyType . V XML mohou být komplexní typy tvořeny jinými komplexními typy. Není neobvyklé najít vnořené komplexní typy v dokumentech XML, zejména ve WSDL.

Tak co? ptáš se. Vzhledem k tomu, že XML má hierarchickou strukturu a složité typy lze znovu použít, XML se přirozeně řídí vzorem kusovníku .

A tento fenomén se neomezuje pouze na XML. Další schémata, jako jsou schémata pro JSON a objektově relační databáze, se také řídí vzorem kusovníku .

Začlenění flexibility do kusovníku

V klasické struktuře kusovníku produktu jsou do modelování toho, co se děje v reálném světě, zapojeny tři jemnější koncepty. Toto jsou alternativy , varianty a revizí .

Alternativa je náhradou za konkrétní položku. Například výrobce automobilů může mít pro určité položky různé dodavatele. V praxi to znamená, že výrobce může získat ekvivalentní palivová čerpadla z více zdrojů. Zákazníkovi tato možnost obvykle není dána, poskytuje však výrobci flexibilitu.

Použili jsme palivová čerpadla jako položky v tabulce níže, s Bosch a Lucas jako alternativy. Mít alternativu palivového čerpadla znamená jediné ze sestav budou vybrány v době výroby motoru.


Položka Alternativa
Rodič Dítě Množství
V6 (Sestava) Palivové čerpadlo (alternativní) 1
Palivové čerpadlo (alternativní) Čerpadlo Bosch (sestava)
Palivové čerpadlo (alternativní) Lucasovo čerpadlo (sestava)


Varianta je jiný typ zboží, ale tentokrát si vybere zákazník. Kupující vozu si může vybrat různé karosářské styly – 3-dveřový, 5-dveřový nebo kombi (kombi nebo kombi). Mohou si také vybrat ze dvou různých typů motorů – V6 nebo V8. V našem příkladu si kupující musí vybrat jednu a pouze jednu ze sestav pod variantou.


Položka Varianta
Rodič Dítě Minimální výběr Maximální výběr
Auto (montáž) Tělo (varianta) 1 1
Tělo (varianta) 3 dveře (sestavení)
Tělo (varianta) 5 dveří (sestavení)
Tělo (varianta) Majetek (sestava)
Auto (montáž) Motor (varianta) 1 1
Motor (varianta) V6 (Sestava)
Motor (varianta) V8 (Sestava)


V jiných doménách je počet možností pestřejší. Vezměte si jako příklad vzdělání. Pro získání konkrétní kvalifikace musí student absolvovat stanovený počet skupin. Pro každou skupinu si mohou vybrat z několika modulů.

Předpokládejme například, že student potřebuje dokončit dvě skupiny, aby získal diplom. Pro dokončení první skupiny si mohou vybrat dva moduly ze seznamu šesti. Poté si musí vybrat tři moduly z pěti, aby dokončili druhou skupinu. (Pokud se jedná o sektor, který byste rádi viděli podrobněji, britský informační standard zveřejnil flexibilní návrh.)

Oba výše uvedené příklady se řídí jednoduchým vzorem uvedeným níže. Tento vzor se hodí pro struktury, které jsou dosti statické. Varianty a alternativy jsou vloženy do hierarchie, aby indikovaly, že je třeba provést nějaký výběr z položek bezprostředně pod nimi.



Tam, kde se věci v průběhu času mění, je následující vzor flexibilnější a snáze se udržuje. Na druhou stranu je trochu nepraktické procházet (nebo navigovat).



Transformací výše uvedeného logického modelu na fyzický model začnou věci vypadat takto:




V tomto modelu je položka buď nedělitelnou součástí, nebo sestavou. Díly a sestavy jsou organizovány do hierarchií. Nicméně alternativy , varianty a revizí mají své vlastní odlišné vztahy, protože mají tendenci se v průběhu času dost měnit. To minimalizuje reorganizaci hierarchie.

Například výrobci automobilů neustále vyvíjejí svá auta. Z toho vyplývá, že alternativy dílů se v průběhu času mění, stejně jako varianty zpřístupněné zákazníkovi. Když v sestavě dojde ke změně, sestava bude revidována. Revize označuje historii změn položky. Zvažte tento příklad:


Číslo dílu Verze Předcházející Následné
123456-1 1 123456-1 123456-1
123456-2 2 123456-1 123456-2
123456-3 3 123456-2 123456-3
123456-4 4 123456-1 123456-4
123456-5 5 123456-2, 123456-3 123456-5


Popis výše uvedené tabulky vypadá takto:položka má alespoň jednu revizi – svou původní verzi. K vytvoření druhé verze se použije původní verze produktu. Druhá byla dále vyvinuta, aby vytvořila verzi tři, která nefungovala. Inženýři tedy upravili původní verzi a vytvořili verzi čtyři. Po rozsáhlém testování se také ukázalo, že to není ideální. Inženýři se tedy rozhodli vzít aspekty druhé a třetí verze a vytvořit verzi 5, konečný produkt.

Když se podíváte na předchozí a následující klíče, uvidíte, proč historie změn potřebuje many-to-many vztah mezi položkami a revizemi. Stejný princip platí pro položky, alternativy a varianty.

Poslední slovo o vzoru kusovníku

Doufám, že vám tato série článků pomohla rozpoznat vzor kusovníku. Když se objeví ve vašich projektech, pochopíte, jak jej nejlépe modelovat ve vaší konkrétní doméně.

Upozorňujeme však, že přísná struktura kusovníku má své klady i zápory. Pro:hierarchie jsou opakovaně použitelné. Proti:hierarchie jsou opakovaně použitelné. To může, ale nemusí být ve vašem případě špatná věc, ale rozhodně je třeba si toho uvědomit.

Dobrá věc je, že hierarchie nemusí být vytesány do kamene. Pomocí alternativ, variant a revizí můžete modelovat domény, kde existují možnosti, kde musí být zachována historická pozice a kde je jedinou konstantou změna.


  1. SQL Server 2005 Pivot na neznámý počet sloupců

  2. jQuery UI Sortable, pak zapište pořadí do databáze

  3. Převést „smalldatetime“ na „datum“ v SQL Server (příklady T-SQL)

  4. pgpredict – Prediktivní analytika v PostgreSQL