2.7.1. Gyártás
Egy cég rendeléseket vesz fel dátum időpontra a raktárán lévő alkatrészekből összeszerelhető termékeire.
A vevő nem regisztrált.
10. ábra
A rövid leírás és a kapcsolati ábra szerint a következőket lehet tudni:
Minden Terméknek van kódja, neve és aktuális ára; minden Alkatrésznek van azonosítója, neve, mértékegysége, aktuális egységára és pillanatnyi készlete. A Termék törzs kulcsa (a kód) külső kulcsként megtalálható a Szerkezetben, illetve az Alkatrész kulcsa (az azon) is külső kulcs a Szerkezetben. A 2 törzs közti viszonyt a Szerkezet kapcsolótábla oldja meg, amiben tárolásra kerül, hogy bármelyik egységnyi termékhez melyik alkatrészből mennyi szükséges annak mértékegysége szerint. A Rendelés valójában rendeléstétel-tábla, mert a kulcsa nemcsak a rendszám (és benne nem a bizonylat fej- és lábléc-adatai vannak), de mivel semmilyen rendelésfejbe illő adatot nem tárolunk, Rendelés a neve. Ebbe a rendelés alkalmával generált rendszám mellé különféle termékkódokat vihetünk fel, amelyekről azt tároljuk, hogy hány egységet és mikorra kérik.
A kapcsolatban álló táblák között nyíl látható, mely mindig a sokból mutat az egybe (rajta pedig a kapcsoló tulajdonság helyezkedik el).
A függőségi család pedig ugyancsak kiolvasható az adatbázis tábláiból, miután minden táblán belül a kulcs meghatározza a többi tulajdonságot:
{kód} → {név, ár}
{azon} → {neve, m_egys, egys_ár, készlet}
{kód, azon} → {mennyi}
{rend_szám, kód} →
{darab, dátum}
Láttuk az előzőekben, hogy meglevő függőségekből újakat
lehet származtatni, és egy függőségről el lehet dönteni, hogy következik-e a
meglevőkből.
Fennállnak-e az alábbi egyértelmű meghatározások?
-
{rend_szám, kód} → {név, ár}
igen; a bal oldal meghatározza önmaga részeit, tehát a kódot is, ami pedig meghatározza a nevet és árat
-
{rend_szám} → {darab}
nem; a bal oldal semmit sem határoz meg egyértelműen (a darabhoz szükséges a rend_számon túl a kód is)
-
{azon, kód} → {név, neve, mennyi}
igen; a bal oldal egyik tagja az alkatrész nevét, másik tagja a termék nevét, a két tag együtt pedig a szerkezet mennyiségét határozza meg
-
{dátum, kód} → {rend_szám}
nem; egy napra ugyanabból a termékből többen is rendelhettek, vagyis a rend_szám nem egyértelmű (csak a rend_szám és kód ismeretében biztos a dátum)
-
{rend_szám, kód} → {készlet}
nem; a készlethez ismerni kell az azonosítót, ami nincs a bal oldalon, és a bal oldal semmilyen része sem határozza meg az azonosítót (rend_számtól függetlenül bármelyik terméknek több alkotója lehet a szerkezet alapján, tehát nem egyértelmű az alkotó aktuális készlete)
Készítsünk mintasorokat az adott adatbázisra!
A legfontosabb megszorítás az, hogy az egyes táblákban a kulcstartalom csak egyszer fordulhat elő (összetett kulcs esetén az összefűzött jelsorozat egyedi), majd az adatbázis épsége miatt a külső kulcsok tartalma csak olyan érték lehet, ami már létezik abban a táblában kulcsként, ahova mutat.
TERMÉK
kód |
név |
ár |
111 |
termék1 |
2000 |
123 |
termék2 |
2000 |
134 |
termék3 |
15000 |
141 |
termék4 |
45000 |
156 |
termék5 |
1890 |
176 |
termék7 |
5600 |
RENDELÉS
rendszám |
kód |
darab |
dátum |
977889 |
123 |
3 |
97.02.12 |
977889 |
134 |
1 |
97.02.12 |
977890 |
156 |
2 |
97.02.23 |
977891 |
134 |
1 |
97.03.11 |
977891 |
141 |
5 |
97.02.23 |
977891 |
176 |
3 |
97.02.23 |
ALKATRÉSZ
azon |
neve |
me |
eár |
készl |
12333 |
alkatrész12 |
kg |
1200 |
30 |
23230 |
alkatrész23 |
l |
90 |
12 |
34555 |
alkatrész34 |
db |
450 |
21 |
44555 |
alkatrész44 |
m |
5600 |
19 |
56789 |
alkatrész56 |
kg |
380 |
120 |
87900 |
alkatrész87 |
g |
12 |
51 |
SZERKEZET
kód |
azon |
mennyi |
123 |
56789 |
2.50 |
123 |
34555 |
0.25 |
134 |
12333 |
1.30 |
134 |
56789 |
3.00 |
134 |
44555 |
0.75 |
134 |
23230 |
0.10 |
A mintasorokból kiolvasható, hogy pillanatnyilag:
- 7-féle terméket és 6-féle alkatrészt tartunk nyilván
- a 123-as termék 2, a 134-es pedig 4 alkotóból áll
- az 56789-es alkatrész 2 termékbe is beépül
- valójában 3 rendelés tételeit látjuk: a 977889-es rendelésszámon 2 terméket, a 977890-esen 1-et és a 977891-esen 3 tételt kértek
- a 134-es termékről 2 megrendelés is szól; az egyik 97.02.12-re 1 db, a másik 97.03.11-re 1db
- minden alkatrészből nullánál nagyobb készlet van a megfelelő mértékegység szerint
- valójában a termék- és alkatrésznevek semmitmondóak, de szintén egyediek
Lehetséges kimenet a mintasorok alapján:
|
Az adatbázisból (mintasoraitól függetlenül) sokféle lekérdezést készíthetünk, egyelőre saját algoritmusunkat követve, mely inkább a hagyományos fájlkezelést imitálná, mint az SQL nyelvet. Pl.
- melyik termékből rendelték eddig a legkevesebbet
- adott napra miből mennyit kell elkészíteni
- melyik alkatrész a leggyakoribb az alkotók között
- adott termékből maximum hány készíthető el a pillanatnyi készletek alapján
- a holnapra elkészítendő megrendelésekhez mennyi hiányzik a szükséges alkotókból
- az egyes termékek által hozott haszon (árbevétel-önköltség)
- a legdrágább termék
- a legköltségesebb termék
- minden termék legdrágább alkotója
- a legforgalmasabb nap (amikorra a legtöbb megrendelés szólt)
- az a nap, amikorra csak egyféle terméket kellett készíteni
- mihez kell egy adott nevű alkatrész
- mi a szerkezete egy adott nevű terméknek
(A lekérdezéseket a következő részben SQL-ben meg fogjuk tudni oldani.)
Bővítsük a fenti adatbázist (legyen CUKRÁSZDA) azokkal a
mintasorokkal, amelyek a következő eseményt
tükrözik:
„A mai napon két vevő is rendelt holnapra 1 Dobostortát, de az egyik
még 2 adag Sarokházat is kért."
A feladat 2 termékről és 2 rendelésről szól, melyből az egyik 1, a másik 2 tételből áll. A 2 termék receptje nem került említésre, ezért tetszőlegesen készítjük azt el. Az az információ, hogy a mai napon vesszük fel a rendelést, nem tárolódik, hiszen fizikai sorrendben kerülnek fel a rendeléstételek, melyek elkészülésének csak a dátuma lényeges az ügyvitelben.)
A termékek (cukrászkészítmények) kódját mi generáljuk, az árat tetszőlegesen választjuk:
kód |
név |
ár |
101 |
Dobostorta |
2200 |
106 |
Sarokház |
550 |
A recept leírásához előbb az alkotókat kell felvenni, melyek leíróinak értéke ugyancsak tetszőleges:
azon |
neve |
me |
eár |
készl |
12345 |
cukor |
kg |
180 |
30 |
23456 |
liszt |
kg |
90 |
42 |
34567 |
tejszín |
dl |
110 |
20 |
45678 |
csokoládé |
dkg |
5 |
100 |
A recept legyen (természetesen már létező termékkódokkal illetve alkatrész-azonosítókkal) pl.:
kód |
azon |
mennyi |
101 |
12345 |
1.00 |
101 |
23456 |
1.00 |
101 |
45678 |
5.50 |
106 |
34567 |
5.00 |
106 |
45678 |
15.00 |
A rendeléstételek (ha pl. a mai dátum 2001.12.09.):
rendszám |
kód |
darab |
dátum |
018821 |
101 |
1 |
01.12.10 |
018821 |
106 |
2 |
01.12.10 |
018822 |
101 |
1 |
01.12.10 |