sql >> Database teknologi >  >> RDS >> Database

Fleksible og håndterbare styklister (BOM) designs

Styklistens designmønster er vildledende enkelt, men alligevel utroligt kraftfuldt. Denne artikel vil introducere et eksempel, kendt for it-professionelle, som du måske ikke troede passer til styklistemønsteret. Det vil også introducere koncepter for at vise dig, hvordan du gør dine styklistestrukturer mere fleksible og meget nemmere at administrere.

En kort sammenfatning af styklisten

En materialeliste har sine rødder i fremstillingen. Det er en liste over de råmaterialer, underenheder, mellemkonstruktioner, underkomponenter, dele og mængden af ​​hver, der er nødvendig for at fremstille et slutprodukt.

I sin enkleste form, den klassiske styklistestruktur, ser den sådan ud:




Den samme slags struktur kan dog bruges til en lang række forskellige formål , som spænder fra noget strengt hierarkisk og tæt koblet til noget ret fladt og løst koblet. For mere information om styklistestrukturen, se denne artikel.

Skemaer – et hverdagseksempel

Tro det eller ej, klasse-attribut-type-tripletten og tabel-kolonne-type-tripletten følger også styklistemønsteret. Den fysiske datamodel nedenfor indeholder kernetabellerne i en dataordbog.





Tabel Beskrivelse
dd_attribute En unik egenskab, uafhængig af enhver implementering.
dd_attr_instance En forekomst af en attribut. Forekomsten har to karakteristiske relationer:
1) Den klasse den tilhører, som kan være et logisk eller fysisk objekt. Forekomsten er unik for denne klasse.
2) Datatypen, som enten kan være en indbygget type eller en anden klassetype.
dd_klasse En klasse eller et objekt i generisk forstand – den faktiske implementering er givet af class_type – der har et sæt attributter.


En dataordbog eller metadatalager er defineret i IBM Dictionary of Computing som et "centraliseret lager af information om data såsom betydning, relationer til andre data, oprindelse, brug og format".

Overvej nu følgende XML Schema Definition (XSD) for en Java-applikation:



Den definerer XSD-komplekse typer, som har egenskaberne for enten native XML-typer – f.eks. streng , NMTOKEN , anySimpleType – eller andre komplekse typer.

For at begynde at udfylde dataordbogen for ovenstående XSD, skal vi først indtaste XML native datatyper som klasser :


klassenavn stereotype
boolesk Native
dato Native
datoTid Native
streng Native
version Native
NMTOKEN Native
anySimpleType Native


Vi har nu alt, hvad vi behøver for at begynde at udfylde vores dataordbog. I eksemplet nedenfor vises lige nok til fuldt ud at definere ConnectionConfigType kompleks type.


dd_attribute of_class (via dd_attr_instance) type_class (via dd_attr_instance)
attr_name klassenavn stereotype klassenavn stereotype
tast Ejendomstype XSDcomplexType streng Native
værdi Ejendomstype XSDcomplexType streng Native
Ejendom ConnectionConfigType XSDcomplexType Ejendomstype XSDcomplexType
driverklassenavn ConnectionConfigType XSDcomplexType streng Native
bruger ConnectionConfigType XSDcomplexType streng Native
adgangskode ConnectionConfigType XSDcomplexType streng Native
poolnavn ConnectionConfigType XSDcomplexType streng Native


Bemærk hvordan datatypen for ConnectionConfigType.Property attribut er en anden kompleks type, PropertyType . I XML kan komplekse typer bestå af andre komplekse typer. Det er ikke ualmindeligt at finde indlejrede komplekse typer i XML-dokumenter, især i WSDL.

Hvad så? du spørger. I betragtning af at XML er hierarkisk i struktur og komplekse typer kan genbruges, XML følger naturligvis styklistemønstret .

Og dette fænomen er ikke begrænset til XML. Andre skemaer, som dem for JSON og objektrelationelle databaser, følger også styklistemønsteret .

Integrering af fleksibilitet i en stykliste

I den klassiske produktstyklistestruktur er tre finere koncepter involveret i modelleringen af, hvad der sker i den virkelige verden. Disse er alternativer , varianter og revisioner .

Et alternativ er en erstatning for en bestemt vare. For eksempel kan en bilproducent have forskellige leverandører til visse varer. I praksis betyder det, at producenten kan få tilsvarende brændstofpumper fra flere kilder. Normalt får kunden ikke denne mulighed, men det giver producenten fleksibilitet.

Vi har brugt brændstofpumper som elementer i eksempeltabellen nedenfor, med Bosch og Lucas som alternativerne. At have et brændstofpumpealternativ betyder, at en og kun én af samlingerne vil blive udvalgt på tidspunktet for motorens fremstilling.


Vare Alternativ
Forælder Barn Mængde
V6 (Samling) Brændstofpumpe (alternativ) 1
Brændstofpumpe (alternativ) Bosch Pumpe (Samling)
Brændstofpumpe (alternativ) Lucas Pump (Samling)


En variant er en anden type vare, men denne gang træffer kunden valget. En bilkøber kan vælge forskellige karrosserityper – 3-dørs, 5-dørs eller stationcar (stationcar eller vogn). De kan også vælge mellem to forskellige motortyper – en V6 eller en V8. I vores eksempel skal køberen vælge én og kun én af samlingerne under varianten.


Vare Variant
Forælder Barn Min. valg Maksimalt valg
Bil (montage) Krop (variant) 1 1
Krop (variant) 3-dørs (samling)
Krop (variant) 5 dør (samling)
Krop (variant) Ejendom (forsamling)
Bil (montage) Motor (variant) 1 1
Motor (variant) V6 (Samling)
Motor (variant) V8 (Samling)


På andre domæner er antallet af valg mere varieret. Tag uddannelse som eksempel. For at opnå en bestemt kvalifikation skal en studerende gennemføre et bestemt antal grupper. For hver gruppe kan de vælge mellem flere moduler.

Antag for eksempel, at en studerende skal gennemføre to grupper for at få et eksamensbevis. De kan vælge to moduler fra en liste på seks for at fuldføre den første gruppe. Derefter skal de vælge tre moduler fra fem for at fuldføre den anden gruppe. (Hvis dette er en sektor, du gerne vil se mere detaljeret, er et fleksibelt design blevet offentliggjort af UK's Information Standard Board.)

Begge ovenstående eksempler følger det enkle mønster vist nedenfor. Dette mønster egner sig til strukturer, der er ret statiske. Varianter og alternativer er indsat i hierarkiet for at indikere, at der skal foretages en eller anden form for valg blandt emnerne umiddelbart under dem.



Hvor ting har en tendens til at ændre sig over tid, så er følgende mønster mere fleksibelt og lettere at vedligeholde. På den negative side er det lidt mere uhåndterligt at krydse (eller navigere).



Ved at transformere ovenstående logiske model til en fysisk model, begynder tingene at se sådan ud:




I denne model er en genstand enten en udelelig del eller en samling. Dele og samlinger er organiseret i hierarkier. Dog alternativer , varianter og revisioner har deres egne særskilte forhold, fordi de har tendens til at ændre sig en del over tid. Dette minimerer hierarki omorganisering.

For eksempel udvikler bilproducenter løbende deres biler. Det følger heraf, at delalternativer ændrer sig over tid, ligesom de varianter, der stilles til rådighed for kunden. Når der sker en ændring i en samling, bliver samlingen revideret. En revision angiver ændringshistorikken for elementet. Overvej dette eksempel:


Artikelnummer Version Forudgående Efterfølgende
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


Fortællingen for ovenstående tabel lyder sådan her:et element har mindst én revision - dens originale version. Den originale version af produktet bruges til at skabe den anden version. Den anden blev videreudviklet til at skabe version tre, som ikke fungerede. Så ingeniørerne reviderede den originale version og skabte version fire. Efter omfattende test viste dette sig også at være mindre end ideelt. Så ingeniørerne besluttede at tage aspekter af den anden og tredje version og skabe version fem, det endelige produkt.

Hvis du ser på de foregående og efterfølgende nøgler, vil du se, hvorfor ændringshistorikken har brug for en mange-til-mange forhold mellem elementer og revisioner. Det samme princip gælder mellem varer, alternativer og varianter.

Et sidste ord om styklistemønstret

Mit håb er, at denne serie af artikler har hjulpet dig med at genkende styklistemønstret. Når det vises i dine projekter, vil du forstå, hvordan du bedst modellerer det i dit specifikke domæne.

Bemærk dog, at den strenge styklistestruktur har fordele og ulemper. Fordel:hierarkier kan genbruges. Ulemper:hierarkier kan genbruges. Dette er måske eller måske ikke en dårlig ting i dit tilfælde, men det er bestemt noget, du skal være opmærksom på.

Det gode er, at hierarkier ikke behøver at være hugget i sten. Ved at bruge alternativer, varianter og revisioner kan du modellere domæner, hvor der findes muligheder, hvor den historiske position skal bibeholdes, og i sidste ende hvor den eneste konstant er forandring.


  1. Oracle fejlhåndtering

  2. to_sql pyodbc count felt forkert eller syntaksfejl

  3. Hvordan returnerer jeg en jsonb-array og en række objekter fra mine data?

  4. Hvordan fjerner jeg ikke-afbrydende mellemrum fra en kolonne i SQL-serveren?