Minta adatbázis sémája¶
A félév során a gyakorlati példákat egy egységes mintapéldán keresztül szemléltetjük. A mintapélda egy egyszerű vevő-megrendelésnyilvántartási rendszer. Az alábbi leírás a Microsoft SQL Server relációs sémáját ismerteti, a MongoDB "séma" ennek átültetése.
Az adatbázis kontextusa¶
A rendszer termékek értékesítési folyamatának a követésére szolgál. A termékeket (product) kategóriákba (category) lehet sorolni, mely kategóriák hierarchikusan egymásra épülhetnek. A vevők (customer) megrendeléseiket (order) és azok státuszát (status) nyomon tudják követni.
Az ügyfeleknek több telephelyük (customer site) is lehet, az egyes megrendelések (order) feladásakor, tisztázni kell, hogy az ügyfél mely telephelyére történik meg a kiszállítás. Minden vevőnek kell rendelkeznie központi telephellyel, mely a számlázási címül is szolgál. Természetesen egy megrendeléshez több tétel (order item) is tartozhat, az egyes tételek státusza külön-külön is követhető, ezáltal a vevő látja, hogy esetleg mely termékre kell várnia. A kész megrendelésekről számlát (invoice) kell készíteni.
A számla (invoice) olyan bizonylat, melynek az adatai később nem változtathatók, valamint az első nyomtatást követően számlamásolatot lehet csak kiállítani. Figyelembe kell venni azt is, hogy az egyes termékek ÁFA besorolása (VAT = value added tax) ill. ÁFA kulcsa megváltozhat az idők során, viszont a kiállított számlákon természetesen már ez az információ sem változhat meg.
Adatmodell¶
Az alábbi ábra szemlélteti a nyilvántartórendszer adatmodelljét.
Táblák és attribútumok¶
Tábla | Oszlop | Leírás |
---|---|---|
VAT | ID | Automatikusan generált azonosító, elsődleges kulcs. |
Percentage | ÁFA kulcs értéke százalékban megadva. | |
PaymentMethod | ID | Automatikusan generált azonosító, elsődleges kulcs. |
Method | Fizetési mód megnevezése (pl.: Készpénz, Átutalás 8 napon belül). | |
Deadline | A fizetési módhoz tartozó határidő, azaz a számla teljesítési dátumához képest, hány nappal van később a fizetési határidő. | |
Status | ID | Automatikusan generált azonosító, elsődleges kulcs. |
Name | Megrendelés státusz megnevezése (pl.: új, feldolgozva, árura vár, csomagolva,…). | |
Category | ID | Automatikusan generált azonosító, elsődleges kulcs |
Name | Termékkategória megnevezése (pl.: élelmiszer, tejtermék, …). | |
ParentCategoryID | Kategória hierarchiát leíró idegen kulcs, egy adott kategória szülőjére mutat. A gyökérelemeknél, a szülőkategória azonosítója NULL. | |
Product | ID | Automatikusan generált azonosító, elsődleges kulcs. |
Name | Termék neve | |
Price | Termék nettó ára | |
Stock | A termékből a raktárban található mennyiség. | |
VATID | Idegen kulcs a termék ÁFA kulcsára (VAT tábla). | |
CategoryID | Idegen kulcs a termék kategóriájára (Category tábla). | |
Description | A termékhez tartozó XML formátumú leírás | |
Customer | ID | Automatikusan generált azonosító, elsődleges kulcs. |
Name | Vevő megnevezése. | |
BankAccount | Vevő bankszámla száma. | |
Login | Vevő login neve a webes rendszerhez. | |
Password | Vevő jelszava a webes rendszerhez. | |
Vevő email címe. | ||
MainCustomerSiteID | A vevő központi telephelyének azonosítója, külső kulcs a CustomerSite táblára. | |
CustomerSite | ID | Automatikusan generált azonosító, elsődleges kulcs. |
ZipCode | A cím irányítószám része. | |
City | A cím város része. | |
Street | A cím utca és házszám része. | |
Tel | A telephelyhez kapcsolódó telefonszám. | |
Fax | A telephelyhez kapcsolódó fax szám. | |
CustomerID | Külső kulcs a vevőre (Customer tábla). | |
Order | ID | Automatikusan generált azonosító, elsődleges kulcs. |
Date | Megrendelés dátuma. | |
Deadline | Vállalt szállítási határidő. | |
CustomerSiteID | Külső kulcs a vevő telephelyére, ide kell kiszállítani a megrendelt árukat (CustomerSite tábla). | |
StatusID | Külső kulcs a státuszra, ez mutatja, hogy mi a teljes státusza a megrendelésnek (Status tábla). | |
PaymentMethodID | Külső kulcs a fizetési módra. A megrendeléshez tartozó számlát az itt megadott módon fogják kiegyenlíteni (PaymentMethod tábla). | |
OrderItem | ID | Automatikusan generált azonosító, elsődleges kulcs. |
Amount | Mennyiség, azaz az adott áruból ennyi darabot rendeltek meg. | |
Price | Egy egység nettó ára. Alapértelmezésként a termékben található nettó ár másolódik ide, de ettől eltérhet az értékesítő. | |
OrderID | Idegen kulcs a megrendelésre, azaz ez azonosítja, hogy az adott tétel mely megrendeléshez tartozik (Order tábla). | |
ProductID | Idegen kulcs a Product táblára, ez azonosítja a megrendelt terméket. | |
StatusID | Idegen kulcs a Status táblára, ezzel lehet leírni a megrendelés tétel státuszát. | |
InvoiceIssuer | ID | Automatikusan generált azonosító, elsődleges kulcs |
Name | Cégnév, aki a kereskedést folytatja, ez szerepel a számlán. | |
ZipCode | A cím irányítószám része. | |
City | A cím város része. | |
Street | A cím utca része. | |
TaxIdentifier | A cég adószáma. | |
BankAccount | A cég bankszámlaszáma. | |
Invoice | ID | Automatikusan generált azonosító, elsődleges kulcs |
CustomerName | Megrendelő neve, ez az információ fog a számla vevő részén megjelenni. | |
CustomerZipCode | A vevő címének irányítószáma. | |
CustomerCity | A vevő címének város része. | |
CustomerStreet | A vevő címének utca része. | |
PrintedCopies | A számla hányszor lett kinyomtatva. | |
Cancelled | A számla sztornózva lett-e? | |
PaymentMethod | A számla fizetési módja. | |
CreationDate | A számla kiállításának kelte. | |
DeliveryDate | A számla teljesítési dátuma. | |
PaymentDeadline | A számla fizetési határideje. | |
InvoiceIssuerID | Idegen kulcs a számla kiállítóra (InvoiceIssuer tába). | |
OrderID | Idegen kulcs a megrendelésre, a számla ezen megrendelés alapján került kiállításra (Order tábla). | |
InvoiceItem | ID | Automatikusan generált azonosító, elsődleges kulcs |
Name | Termék neve, mely a számlatételben szerepel. | |
Amount | A vásárolt mennyiség. | |
Price | A tétel nettó egységára. | |
VATPercentage | A tétel ÁFA kulcsa | |
InvoiceID | Idegen kulcs a számlára, melyhez a számlatétel tartozik (Order tábla). | |
OrderItemID | Idegen kulcs a megrendelés tételre (OrderItem tábla), melyből a számlatétel keletkezett. |
Sajátosságok¶
Számlázás¶
Adatmodell sajátossága, a számlázási adatok tárolása. A számla adatait nem lehet megváltoztatni kinyomtatás után, számlát nem lehet törölni csak sztornózni. Ebből adódón a számlához tartozó összes információt az Invoice
és az InvoiceItem
táblák tartalmazzák, a számlakiállítás során minden információt le kell másolni a vonatkozó megrendelésből. Valamint az első nyomtatást követően a számlából már csak másolatot lehet nyomtatni, eredeti példányt nem.
Számla kiállító¶
Speciális a InvoiceIssuerID
attribútum az Invoice
táblában, mivel a cég saját adatai ritkán változnak. Viszont a változtathatatlanság követelménye miatt a számla kiállító adatait nem lehet módosítani, ha már van hozzá számla. Ebben az esetben a számla kiállító táblába új rekordot kell felvenni, ebből adódóan az aktuális cégadatokat mindig a legmagasabb ID-vel rendelkező számla kiállító rekord tartalmazza.
ÁFA¶
Egy termék ÁFA kulcsa (VAT
) bármikor megváltozhat, de ez a megrendelés során teljesen természetes, de a kiállított számlák ÁFA tartalma már nem változhat meg. Ezért a megrendelés során az ÁFÁ-ra idegen kulccsal kell hivatkozni, hogy a változást követni lehessen, viszont a kiállított számlában le kell tárolni a kiállítás pillanatában az aktuális ÁFA kulcsot.
Termék leírás¶
A termékekhez tartozhat egy XML formátumú leírás, ennek tartalmát szemlélteti az alábbi példa. Ezen leírás a termékhez tartozó egyéb extra információkat tartalmazza, amelyeket nem fejtettünk ki a relációs modellben
<product>
<product_size>
<unit>cm</unit>
<width>150</width>
<height>50</height>
<depth>150</depth>
</product_size>
<package_parameters>
<number_of_packages>1</number_of_packages>
<package_size>
<unit>cm</unit>
<width>150</width>
<height>20</height>
<depth>20</depth>
</package_size>
</package_parameters>
<description>
Requires battery (not part of the package).
</description>
<recommended_age>0-18 m</recommended_age>
</product>