TALLINNA TEHNIKAÜLIKOOL
Infotehnoloogia teaduskond
Informaatikainstituut
Infosüsteemide õppetool
Online
Restoran Andmebaaside
programmeerimine IDU0120
Juhendaja :
Erki
Eessaar Tallinn
2011
Sisukord
Sisukord 4Sissejuhatus 81. Strateegia etapp 91.1 Terviksüsteemi üldvaade 91.1.1 Organisatsiooni eesmärgid 9
1.1.2 Infosüsteemi eesmärgid 9
1.1.3
Lausendid 9
1.1.4 Põhiobjektid 10
1.1.5 Põhiprotsessid 10
1.1.6 Põhilised sündmused 10
1.1.7 Tegutsejad 11
1.1.8 Asukohad 11
1.1.9 Terviksüsteemi tükeldus allsüsteemideks 12
1.2 Tellimuse funktsionaalne allsüsteem 131.2.1 Eesmärgid 13
1.2.2 Allsüsteemi kasutavad pädevusalad 13
1.2.3 Allsüsteemi poolt kasutavad
registrid 13
1.2.4 Allsüsteemi põhiprotsessi
tegevusdiagramm 14
1.2.5 Allsüsteemi kasutusjuhtude eskiismudel 15
1.2.6 Täiendavad nõudmised 17
1.3 Tellimuse register 191.3.1 Eesmärgid 19
1.3.2
Registrit kasutavad pädevusalad 19
1.3.3 Registrit teenindavad
funktsionaalsed allsüsteemid 19
1.3.4
Infovajadused 19
1.3.5 Seosed teiste registritega 19
1.3.6 Ärireeglid 19
1.3.7 Registri kontseptuaalne eskiismudel 20
2. Detailanalüüsi etapp 212.1 Tellimuse funktsionaalne allsüsteem 212.1.1 Kasutusjuhtude mudel 21
2.2 Tellimuse register (laiendatud kujul) 252.2.1 Kontseptuaalne
andmemudel 25
2.2.2 Andmebaasioperatsioonide
lepingud 29
OP3.2. Tellimuse loomine (kliendi_id) 29
OP3.4. Menüü rea lisamine (tellimuse_id, menuu_rida_id) 29
OP3.8. Tellimuse_rea kustutamine (tellimuse_id, tellimuse_rida_id) 29
OP3.10. Tellimuse kustutamine (tellimuse_id) 30
OP4.3. Tellimuse kinnitamine (tellimuse_id) 30
OP4.5. Tellimuse mittekinnitamine (tellimuse_id) 30
OP5.3. Tellimuse
arhiveerimine (tellimuse_id) 30
OP5.4. Tellimuse mittetäidetuks muutmine (tellimuse_id) 31
2.2.3 Registri põhiobjekti seisundidiagramm 32
2.3 CRUD maatriks 332.4 Infosüsteemi rollide kirjeldused 343. Loogiline disain 353.1 Tellimuse funktsionaalne allsüsteem 353.1.1 Realiseeritavad töökohad 35
3.1.2 Reaalsete kasutusjuhtude kirjeldused 35
3.2.1 Loogiline andmebaasi skeem 39
4. Süsteemi tehniline arhitektuuur 504.1 Esmane prototüüp 504.2 Töötav süsteem 505. Tellimuse funktsionaalne allsüsteemi kasutatavate registrite füüsiline disain 525.1 Transaktsioonanalüüs 525.1.1 OP3.2. Tellimuse loomine (@ klient ) 525.2 Andmemahtude hinnang 535.3 Vaated 545.4 Salvestatud protseduurid ja funktsioonid 555.5 Indeksid 565.5.1
Oracle 56
5.6 Julgeolekumeetmete disain 565.6.1 Oracle 56
5.7 Esialgne andmete varundamise ja taastamise strateegia 585.7.1 Oracle 59
5.8 Klassifikaatorite väärtustamise SQL laused 596. Realisatsioon Oracle’s 616.1 Andmebaasi kohandamine keele- ja kultuurikeskkonnale 616.2 Skeemid 616.3 Tabelid 616.4Arvujada generaatorid 686.5Tabelite ja arvujada generaatorite sidumine 686.6 Vaated 706.7 Sünonüümid 716.8 Paketid , salvestatud protseduurid ja funktsioonid 716.9 Trigerid 746.10 Täiendavate testandmete lisamine 776.11 Indeksid 806.11.1 Välisvõtmetele lisatavad indeksid 80
6.11.2 Mitte-võtmeveergudele lisatavad indeksid 80
6.11.3 Funktsioonil põhinevad indeksid 80
Funktsioonil põhinevaid indekseid käesolevas projektis ei looda. 806.12Andmebaasi statistika kogumine 816.13 Päringu täitmisplaani näide 826.14 Andmebaasiobjektide kustutamise SQL laused 826.14.1
Tabelite kustutamine 82
6.14.2 Arvujada generaatorite kustutamine 83
6.14.3 Vaadete kustutamine 83
6.14.4 Indeksite kustutamine 83
6.14.6
Trigerite ja funktsioonide kustutamine 84
AutorideklaratsioonDeklareerin,
et käesolev töö on minu iseseisva töö tulemus ja selle alusel ei
ole varem hinnet/
arvestust taotletud.
Sissejuhatus
Antud
töös realiseeritakse olnline restorani kliendi ja tellimuse
vastuvõtja töökoht kasutades Oracle
11g Enterprise Edition
Release 1 andmebaasisüsteemi.
Rakendus on
loodud kasutades
java programeerimis keelt ning
Eclipse IDE-d.
Andmebaasi
server : hektor8.ttu.ee:1521
Kasutajanimi:
TUD26
Parool :
J85LR1
Rakenduse toimimiseks peab kasutaja arvutis olema instaleeritud
Apache Tomcat
7.
Rakenduse
sisselogimiseks võib kasutada järgnevaid kasutajanimesid/paroole:
Kliendina sisselogimiseks:
Kasutajanimi:
klient
Parool:
klient
Tellimuse
vastuvõtjana sisselogimiseks:
Kasutajanimi:
kasutaja
Parool:
kasutaja
Veebirakenduse URL:
http://localhost:8080/restoran Registreerides
uut kasutajat pöördub rakendus
T061859_FUNK_ISIKUKOOD
funktsiooni poole, mis kontrollib
sisestatud isikukoodi õigsust.
Kliendina
sisselogituna:Vajutades linki
Loo uus tellimus
rakendus pöördub
T061859_FUNK_CAN_MAKE_ORDER
funktsiooni poole, mis kontrollib kas kliendil on õigus koostada uut
tellimust .
Peale
igat muudetust tellimuses (lisades/muutes/kustutades menüü ridu)
pöördub rakendus
T061859_GET_TELLIMUSE_HIND
funktsiooni poole, mis
arvutab tellimuse kogu hinna.
Sisselogimisel
ning tellimuste arvu muutmisel (lisades/kustutades tellimusi) pöördub
rakendus
T061859_FUNK_TELLIMUSTE_KOGUS
funktsiooni poole, mis
tagastab kliendi tellimuste arvu.
1. Strateegia etapp
1.1 Terviksüsteemi üldvaade
Järgnevalt
esitatakse ülevaade restorani toimimisest.
1.1.1 Organisatsiooni eesmärgid
Restorani
eesmärgid on:
- Raha teenimine
- Kliendi vajaduste kiire ja täpne rahuldamine
- Menüü täiendamine ja muutmine
1.1.2 Infosüsteemi eesmärgid
- Saada ülevaade restorani töötajatest
- Saada ülevaade restorani klientidest
- Saada ülevaade restorani menüüst
- Saada ülevaade klientide tellimustest
- Võimaldada koostada tellimust elektrooniliselt
1.1.3 Lausendid
Restoranis on töötajad.
Restoranis on juhataja.
Juhataja võtab tööle töötajaid.
Töötaja on tellimuste vastuvõtja.
Töötaja on
autojuht .
Restoranis on menüü.
Menüüs on toidud (menüüread).
Menüüridadel on hinnad.
Menüüridadel on nimetused.
Menüüridadel on kirjeldus.
Menüü read on gruppides.
Klient tellib restoranist menüü
ridu.
Tellitud menüürida moodustab
tellimuse rea.
Tellimuse real on hulk.
Klient tasub tellimuse eest.
Autojuht tarnib tellimuse kliendile.
Autojuht võtab makse vastu.
Autojuht kinnitab makse.
1.1.4 Põhiobjektid
- Klient
- Isik
- Töötaja
- Amet
- Menüü rida
- Menüü grupp
- Tellimus
- Tellimuse rida
1.1.5 Põhiprotsessid
- Tellimuse koostamine
- Tellimuse kinnitamine
- Tellimuse arhiveerimine
- Töötaja töölevõtmine
- Kliendi registreerimine
- Menüü muutmine
1.1.6 Põhilised sündmused
- Klient soovib tellida toitu koju.
- Klient tahab lisada menüü ridu oma tellimusse.
- Autojuht tarnis tellimust kliendile ja sai selle eest raha.
1.1.7 Tegutsejad
- Klient
- Autojuht
- Tellimusevastuvõtja
- Juhataja
1.1.8 Asukohad
- Klient kasutab isiklikku arvutit ning avalikke internetti punkte.
- Autojuht kasutab sülearvutit sõidukis.
- Tellimusevastuvõtja ja juhataja töötavad restoranis neile spetsiaalselt ettenähtud kohas.
1.1.9 Terviksüsteemi tükeldus allsüsteemideks
Tegemist on restorani infosüsteemiga.
1.1.9.1 Pädevusalad
Organisatsiooni sisesed pädevusalad:
- Autojuhi pädevusala
- Tellimuse vastuvõtja pädevusala
- Administraatori pädevusala
Organisatsiooni välised pädevuslad:
1.1.9.2 Funktsionaalsed
allsüsteemid
Sisulised
allsüsteemid:
- Kliendi funktsionaalne allsüsteem
- Tellimuse funktsionaalne allsüsteem
- Menüü funktsionaalne allsüsteem
Administratiivsed allsüsteemid:
- Töötajate funktsionaalne allsüsteem
1.1.9.3 Registrid
Sisulised
registrid:
- Kliendi register
- Tellimuse register
- Menüü register
Administratiivsed registrid:
- Töötajate register
- Klassifikaatorite register
1.2 Tellimuse funktsionaalne allsüsteem
1.2.1 Eesmärgid
- Võimaldada klientidel luua tellimusi.
- Võimaldada saada ülevaade menüüst.
- Võimaldada kinnitada tellimust.
- Võimaldada saada ülevaade klientide tellimustest.
- Võimaldada registreerida tasumist tellimuse eest.
1.2.2 Allsüsteemi kasutavad pädevusalad
- Klientide pädevusala
- Tellimuse vastuvõtja pädevusala
- Autojuhi pädevusala
1.2.3 Allsüsteemi poolt kasutavad registrid
Allsüsteem
teenindab Tellimuse
registrit.
Allsüsteem kasutab:
- Menüü register
- Isikute register
- Tellimuse register
- Klassifikaatorite register
1.2.4 Allsüsteemi põhiprotsessi tegevusdiagramm
Tellimuse allsüsteemi
põhiprotsess on
„Tellimuse loomine”.
Joonis 1. Tellimuse funktsionaalse allsüsteemi põhiprotsessi tegevusdiagramm.
1.2.5 Allsüsteemi kasutusjuhtude eskiismudel
Joonis 2. Tellimuse funktsionaalse allsüsteemi kasutusjuhtude eskiismudel. Kasutusjuht :
Kasutaja identifitseerimine
Tegutsejad: Klient, tellimuse
vastuvõtja, autojuht
Kirjeldus: Subjekt identifitseerib ennast. Selleks sisestab ta kasutajanime ja
parooli .
Süsteem autendib subjekti. Kui subjekt on identifitseeritud siis
lubatakse subjekt süsteemi siseneda, vastasel juhul mitte.
Kasutusjuht: Menüü vaatamine
Tegutsejad: Klient
Kirjeldus: Süsteemi sisenedes
saab klient vaadata menüüd mille alusel koostab oma tellimust.
Kasutusjuht: Tellimuse
koostamine
Tegutsejad: Klient
Kirjeldus: Klient soovib antud
restoranis teha tellimus. Süsteem
algatab kasutaja õiguste
kontrolli. Klient koostab tellimuse ja säilitab andmebaasi.
Andmebaasis tekib uus tellimus seisundiga „loodud”.
Kasutusjuht: Tellimuse
kinnitamine
Tegutsejad: Tellimuse
vastuvõtja
Kirjeldus: Kui kliendi
tellimus on nõuete kohaselt koostatud, siis tellimuse vastuvõtja
kinnitab tellimuse. Kui tellimus on kinnitatud, siis asub autojuht
tellimust kliendile tarnima.
Kasutusjuht: Tellimuse
arhiveerimine
Tegutsejad: Autojuht
Kirjeldus: Autojuht peab
vajalikuks tellimuse arhiveerimist. Süsteem algatab kasutaja õiguste
kontrolli. Kui autojuht on tellimuse kohale viinud ning selle eest
tasu saanud, arhiveerib ta tellimuse. Ning sellega on kliendi
tellimus lõpetatud.
1.2.6 Täiendavad nõudmised
TüüpNõudmisedtarkvara Süsteem peab andmete hoidmiseks kasutama
andmebaasisüsteemi abil loodud andmebaasi (st. kõne alla ei tule failipõhine lahENDus).
Serverite operatsioonisüsteemiks peaks olema
Linux , et
vähendada süsteemi maksumust.
keel
Süsteemi
kasutajaliides ja dokumentatsioon peavad olema
eesti keeles. Süsteem tuleks üles ehitada nii, et ei oleks väga
raske lisada kasutajaliidesesse uusi keeli (inglise keel).
töökiirus
Päringu tegemisel ei tohi vastuse kuvamine võtta aega
rohkem kui 5 sekundit.
Andmete
muudatuse salvestamine süsteemi poolt ei tohi võtta aega rohkem kui 5 sekundit.
kasutajaliides
klientidele mõeldud kasutajaliides peab olema igal juhul
veebipõhine.
kujundus
Kasutada tuleb
silmale pehmeid värve.
arendusvahendid
Arendusvahendina tuleks kasutada organisatsioonile
hangitud
CASE tarkvara
Rational Rose.
usaldusväärsus
Tellimuste haldamise süsteemi tõrgeteta töö on
hädavajalik organisatsiooni tõrgeteta töötamiseks. Tõrked
tekitaksid suurt finantsilist kahju ja ka moraalset kahju.
varukoopiad
Kuna hallatavad andmed on organisatsiooni jaoks
olulised ning sellepärast tuleb vähemalt kord nädalas teha
andmetest
varukoopia .
turvalisus
Määran tellimuse haldamise süsteemi turvaklassi
põhinedes väljatöötataval Infosüsteemi turvameetmete
süsteemil:
http://www.dp.gov.ee/ (
http://math.ut.ee/~kamm/turvanouded/index.php?ptk=lisa2 )
Tellimuse registri turvaklass võiks olla:
K2T1S2
K2 - töökindlus – 99% (lubatud
summaarne seisak nädalas
~ 2 tundi); lubatav nõutava reaktsiooniaja kasv
tippkoormusel – minutid (1÷10).
T1 - info allikas, selle muutmise ja hävitamise fakt peavad
olema tuvastatavad; info õigsuse, täielikkuse ja ajakohasuse
kontroll erijuhtudel ja vastavalt vajadusele;
S2 - salajane info: info kasutamine on lubatud ainult teatud
kindlatele kasutajate gruppidele, juurdepääs teabele on
lubatav juurdepääsu taotleva isiku õigustatud huvi korral;
1.3 Tellimuse register
1.3.1 Eesmärgid
Säilitada informatsiooni tellimuste
kohta sellises mahus, et oleks tagatud
tellimuse funktsionaalses
allsüsteemis defineeritud eesmärkide täitmine.
1.3.2 Registrit kasutavad pädevusalad
Registrit kasutavad tellimuste
vastuvõtja, autojuht ja kliendid.
1.3.3 Registrit teenindavad funktsionaalsed allsüsteemid
Tellimuse registri andmeid kasutab ja
uuendab tellimuse funktsionaalne allsüsteem.
1.3.4 Infovajadused
- Klientide nimekiri
- Tellimuste nimekiri
- Menüü ridade nimekiri
1.3.5 Seosed teiste registritega
Menüü register – Menüü
registriga on tellimus seotud olemitüübi
Menüü rida kaudu.
Tellimuse abil klient kinnitab
omalt poolt valitud menüü ridu.
Isikute register – Isikute
registriga on tellimus seotud olemitüübi
Klient kaudu. Iga
tellimus koostatakse kindla kliendi poolt.
Klassifikaatorite register – Klassifikaatorite registriga on tellimuse seotud olemitüübi
Tellimuse seisundi liik kaudu. Igal tellimusel on üks kindel
seisund.
1.3.6 Ärireeglid
Ühel tellimusel on üks kindel
klient.
Ühel kliendil saab olla null või
rohkem tellimust.
Ühes tellimuses saab olla null või
rohkem menüü ridu.
Tellimust mis on seisundis
arhiveeritud, mittetäidetud või kinnitatud ei ole lubatud muuta.
Tellimuse tarnimise kuupäev ei tohi
olla kinnitamisele saatmis kuupäevast suurem kui üks kuu.
Mitteaktuaalseid menüü ridu ei tohi
näidata kliendile ja neid ei tohi lisada uutele tellimustele.
Kliendil saab olla maksimaalselt 10
tellimust, mis võivad olla seisundis „loodud“ või „vajab
parandust “.
1.3.7 Registri kontseptuaalne eskiismudel
Tegemist on esimese versiooniga
analüüsi andmemudeli
olemi -suhte diagrammist.
Sellel on välja toodud põhiobjektid.
Joonis 3. Tellimuse registri kontseptuaalne eskiismudel.
2. Detailanalüüsi etapp
2.1 Tellimuse funktsionaalne allsüsteem
2.1.1 Kasutusjuhtude mudel
Kasutusjuht: Kasutaja
identifitseerimine
Primaarne kasutaja: Klient,
tellimuse vastuvõtja, autojuht – (edaspidi subjekt).
Osapooled ja nende huvid:- Klient, tellimuse vastuvõtja, autojuht: soovivad siseneda
süsteemi ja teha tegevusi neile antud volituste piires.
Käivitatav sündmus: Subjekt
soovib süsteemi siseneda.
Eeltingimused: Subjekt on
süsteemis kasutajaks registreeritud.
Järeltingimused: On tehtud
kindlaks, kas subjektil on õigus süsteemi siseneda või mitte.
Subjekt on autentitud ja talle on antud võimalus kasutada süsteemi
nendele antud
volituse piires.
Stsenaarium (tüüpiline sündmuste
järjestus):1. Subjekt soovib siseneda
süsteemi.
2.
Süsteem palub subjektil
ennast identifitseerida.
3. Subjekt identifitseerib
ennast (sisestades kasutajanime, parooli).
4.
Süsteem kontrollib, kas
esitatud volitustõendiga (antud juhul parooliga) subjekti
andmed on süsteemis olemas või
mitte (OP1.1).
5.
Süsteem annab subjektile
volituse süsteemi kasutada.
Laiendused (või alternatiivne sündmuste käik)4a. Kui süsteem ei leia esitatud
volitustõendiga subjekti siis, ei saa subjekt õigust
süsteemi kasutada.
Süsteem kuvab subjektile teate, et taolist kasutajat ei leidu ja ei anna talle õigust süsteemi kasutada.
Kasutusjuht: Menüü
vaatamine
Primaarne kasutaja: Klient
Osapooled ja nende huvid:
- Klient: Soovib vaadata
restorani menüüd.
Käivitatav sündmus: Klient
soovib restorani menüüst valida tooteid tellimiseks .
Eeltingimused: Klient on
identifitseeritud.
Järeltingimused: Tooted on
valitud.
Stsenaarium (tüüpiline sündmuste
järjestus):
1. Klient soovib näha
restorani menüüt.
2. Süsteem kuvab kliendile
menüüt (OP2.1), kus on kõik
pakkutavad restorani tooted.
Klient saab korrata samme 1-2
niimitu korda kui soovib.
Kasutusjuht: Tellimuse
koostamine
Primaarne kasutaja: Klient
Osapooled ja nende huvid:
- Klient: Soovib kiiresti ja mugavalt teha tellimust, ilma et
peaks tulema restorani. Soovib kinnitust, et tema tellimus on
vastuvõtud.
- Tellimuse vastuvõtja: Soovib, et kliendil tellimuse
esitamisel ei tekiks probleeme, sest muidu valesti koostatud tellimus
võib restoranile kahju tuua.
Käivitatav sündmus: Klient
soovib koostada tellimust.
Eeltingimused: Klient on
identifitseeritud.
Järeltingimused: Tellimus on
koostatud ja sellesse on valitud tooteid (menüü_ridu).
Stsenaarium (tüüpiline sündmuste
järjestus):
1. Klient alustab tellimuse
koostamist.
2. Süsteem kontrollib, kas
kliendil on juba tellimusi, mis on olekus „loodud“ või „vajab
parandust“ ning, kas nende arv ei ületa 10 tükki (OP3.1),
kui mitte, siis loob uue tellimuse (OP3.2).
3. Süsteem väljastab
tellimuse koostamise maketi . (OP3.3).
4. Klient valib tooteid (ehk
menüü_rida), mis tahab tellida (käivitub kasutusjuht menüü
vaatamine).
5. Klient lisab uue toote oma
tellimusse.
6. Süsteem salvestab andmed
(OP3.4).
7. Süsteem arvutab välja
tellimuses olevate toodete hindade summa (OP3.5)
ja kuvab selle kliendile.
Klient saab korrata samme 4-7
niimitu korda kui soovib.
Laiendused (või alternatiivne
sündmuste käik)
2. Kliendi loodud tellimuste limiit
on täis.
Süsteem kuvab teate, et kliendil on juba 10 tellimust, mis on seisundis „loodud“ või „vajab parandust“ ning kuvab ka neid tellimusi (OP3.6) ning ei lase koostada uut tellimust. Klient saab valida talle vajaliku tellimuse ning asuda seda muutma , mis on kirjeldatud punktides 4-7, 4-7a ja 4-7b.
4-7a. Klient soovib toote (ehk
tellimuse_rida) oma tellimusest kustutada .
Klient valib toote, mis soovib tellimusest kustutada.
Süsteem salvestab andmed (OP3.8).
Süsteem arvutab tellimuses olevate toodete kogu maksumuse (OP3.9) ja kuvab selle kliendile.
4-7b. Klient soovib loodud tellimust
kustutada.
Klient annab korralduse loodud tellimust kustutada.
Süsteem salvestab andmed (OP3.10).
Kasutusjuht: Tellimuse
kinnitamine
Primaarne kasutaja: Tellimuse
vastuvõtja
Osapooled ja nende huvid:
- Tellimuse vastuvõtja: Saada ülevaade saadud tellimustest.
- Klient: Saada kiiresti teada oma tellimuse seisundist.
Käivitatav sündmus:
Tellimuse vastuvõtja kontrollib klientide tellimusi. Kui tellimus on
korras, siis kinnitab selle.
Eeltingimused: Tellimuse
vastuvõtja on identifitseeritud.
Järeltingimused: Kõigi
esitatud tellimuste seisund on määratud.
Stsenaarium (tüüpiline sündmuste
järjestus):
1. Tellimuse vastuvõtja
avaldab soovi näha klientide tellimusi ning kinnitada neid.
2. Süsteem kuvab kõikide
klientide tellimusi, mis on seisundis „kinnitamiseks saadetud “
(OP4.1).
3. Tellimuse vastuvõtja valib
ühe tellimuse.
4. Süsteem kuvab valitud
tellimuse sisu (OP4.2).
5. Tellimuse vastuvõtja
vaatab tellimust üle, kui kõik on korras, siis kinnitab tellimuse.
6. Süsteem salvestab andmed
(OP4.3).
Tellimuse vastuvõtja võib korrata
samme 1-6 niimitu korda kui soovib.
Laiendused (või alternatiivne
sündmuste käik)
5a. Kui tellimuse vastuvõtja leiab
tellimust vigaseks, siis muudab tellimust mittekinnitatuks.
Süsteem salvestab andmed (OP4.5).
Kasutusjuht: Tellimuse arhiveerimine
Primaarne kasutaja: Autojuht
Osapooled ja nende huvid:
- Autojuht: Saada kiiresti ning lihtsalt arhiveerida
tellimust.
Käivitatav sündmus: Autojuht
soovib arhiveerida tellimust.
Eeltingimused: Autojuht on
identifitseeritud.
Järeltingimused: Tellimus on
arhiveeritud.
Stsenaarium (tüüpiline sündmuste
järjestus):
1. Autojuht avaldab soovi
arhiveerida tellimust.
2. Süsteem kuvab kõikide
klientide tellimusi, mis on seisundis „kinnitatud“ (OP5.1).
3. Autojuht valib vajaliku
tellimuse.
4. Süsteem kuvab valitud
tellimuse sisu (OP5.2).
5. Autojuht arhiveerib
tellimust.
6. Süsteem salvestab andmed
(OP5.3).
Autojuht võib korrata samme 1-6
niimitu korda kui soovib.
Laiendused (või alternatiivne
sündmuste käik)
5a. Mingil põhjusel jäi kaup
kliendini viimata Autojuht muudab tellimuse seisundit mittetäidetuks.
1. Süsteem salvestab andmed
(OP5.4).
2.2 Tellimuse register (laiendatud
kujul)
2.2.1 Kontseptuaalne andmemudel
2.2.1.1 Olemi-suhte diagramm
Joonis 4. Laiendatud tellimuse registri olemi-suhte diagramm.
2.2.1.2 Olemitüüpe definitsioonid
Olemitüübi nimi
Kuuluvus registrisse
Definitsioon
Tellimus
Tellimuse register
Kliendi poolt koostatud soov tellida restoranist mingit hulka toitu (menüü ridu).
Tellimuse seisundi liik
Klassifikaatorite register
Seisundid, mis tellimus võib omada infosüsteemis.
Tellimuse seisundi liik võib olla:
- loodud
- kinnitamiseks saadetud
- kinnitatud
- vajab parandust
- arhiveeritud
- mittetäidetud
Tellimuse rida
Tellimuse register
Seob tellimusi ja menüü ridu.
Isik
Isikute register
Füüsilise isiku üldistus.
Klient
Isikute register
Füüsiline isik, kes on registreeritud infosüsteemis ja kellele on lubatud koostata ja muuta oma tellimusi.
Tootaja
Isikute register
Füüsiline isik, kes töötab restoranis mingil ametil .
Amet
Klassifikaatorite register
Restorani töötaja töölepingus
sätestatud ametikohustuse üldnimetus.
Menuu rida
Menuu register
Toode menüüs.
Menuu grupp
Menuu register
Toidu gruppid menüüs.
Menuu rida seisundi liik
Klassifikaatorite register
Seisundid, mis menüü rida võib omada infosüsteemis.
Menuu rida seisund võib olla:
Atribuutide definitsioonid
Olemitüübi nimi
Atribuudi nimi
Atribuudi definitsioon
Näiteväärtus
Tellimus
loomise_aeg
Kuupäev ja kella aeg, millal klient lõi uut tellimust.
12:00 01/01/2011
Tellimus
tarnimise_aeg
Kuupäev ja kella aeg, millal autojuht peab tarnima tellimust kliendile.
12:00 01/01/2011
Tellimus
arhiveerimise_aeg
Kuupäev ja kella aeg, millal autojuht tarnis tellimust kliendile.
12:00 01/01/2011
Tellimus
tarnimise_aadress
Aadress kuhu autojuht peab tarnima tellimust.
Mustamäe tee 100-100
Tellimuse seisundi liik
nimetus
loodud
Tellimuse rida
kogus
Kui palju klient tahab sellist menüü ridu.
10
Isik
isikukood
Isikukood on isiku soo ja sünniaja
alusel moodustatud isiku üheselt
kindlaksmääramist võimaldav arv.
(allikas "Rahvastikuregistri
seadus”).
38204010231
Isik
eesnimi
Mati
Isik
perenimi
Mets
Isik
sugu
Sugu võib olla:
0 – Ei ole teada
1 - Mees
2 – Naine
1
Isik
kasutajatunnus
Isiku kasutajatunnus süsteemis.
mati2000
Isik
parool
Parool, millega isik sisestab süsteemi.
1q2w3e4r
Isik
e-mail
[email protected]
Isik
telefon
65656565
Tootaja
aadress
Töötaja kodu aadress.
Mustamäe tee 100-100
Amet
nimetus
Autojuht
Menuu rida
nimetus
Toode nimetus menüüs.
Kartuli salat
Menuu rida
kirjeldus
Toode kirjeldus menüüs.
Sisaldab kartulit.
Menuu rida
hind
Hind on eurodes (EUR).
10.00
Menuu grupp
nimetus
eelroog
Menuu rida seisundi liik
nimetus
aktuaalne
2.2.2 Andmebaasioperatsioonide lepingud
OP3.2.
Tellimuse loomine (kliendi_id)
Eeltingimused:
- Toimub tellimuse koostamine.
- Klient on registreeritud.
Järeltingimused:
- On loodud Tellimus.
- Tellimus on seotud Kliendiga kes seda koostab.
- Tellimus on seotud Tellimuse_seisundi_liigiga, mille puhul Tellimuse_seisundi_liik.nimetus=“loodud“
Kasutus kasutusjuhtude poolt:
Tellimuse koostamine (Tellimuse allsüsteem)
OP3.4.
Menüü rea lisamine (tellimuse_id,
menuu_rida_id)
Eeltingimused:
- Toimub tellimuse koostamine.
- Tellimus, Tellimuse rida on registreeritud.
Järeltingimused:
- On loodud Tellimuse_rida, st. toode on lisatud tellimusse.
- Tellimuse_rida on seotud Menüü_reaga
- Tellimuse_rida.kogus:= Kliendi poolt valitud kogus.
Kasutus kasutusjuhtude poolt:
Tellimuse koostamine (Tellimuse allsüsteem)
OP3.8.
Tellimuse_rea kustutamine (tellimuse_id,
tellimuse_rida_id)
Eeltingimused:
- Toimub tellimuse koostamine.
- Tellimus, Tellimuse rida on registreeritud.
Järeltingimused:
- On kustutatud Tellimuse_rida.
- On kustutaud seos Tellimuse_rida ja Menuu_rida vahel.
Kasutus kasutusjuhtude poolt:
Tellimuse koostamine (Tellimuse allsüsteem)
OP3.10.
Tellimuse kustutamine (tellimuse_id)
Eeltingimused:
- Toimub tellimuse koostamine.
- Tellimus, Tellimuse_seisundi_liik on registreeritud.
- Tellimus on seisundis „loodud“ või “vajab parandust“.
Järeltingimused:
- Tellimus on kustutatud andmebaasist.
Kasutus kasutusjuhtude poolt:
Tellimuse koostamine (Tellimuse allsüsteem)
OP4.3.
Tellimuse kinnitamine (tellimuse_id)
Eeltingimused:
- Toimub tellimuse kinnitamine.
- Tellimus, Tellimuse_seisundi_liik on registreeritud.
Järeltingimused:
- Tellimus on seotud Tellimuse_seisundi_liik, mille puhul Tellimuse_seisundi_liik =“kinnitatud“.
Kasutus kasutusjuhtude poolt:
Tellimuse kinnitamine (Tellimuse allsüsteem)
OP4.5.
Tellimuse mittekinnitamine (tellimuse_id)
Eeltingimused:
- Toimub tellimuse kinnitamine.
- Tellimus, Tellimuse_seisundi_liik on registreeritud.
Järeltingimused:
- Tellimus on seotud Tellimuse_seisundi_liik, mille puhul Tellimuse_seisundi_liik =“vajab parandust“.
Kasutus kasutusjuhtude poolt:
Tellimuse kinnitamine (Tellimuse allsüsteem)
OP5.3.
Tellimuse arhiveerimine (tellimuse_id)
Eeltingimused:
- Toimub tellimuse arhiveerimine.
- Tellimus, Tellimuse_seisundi_liik on registreeritud.
Järeltingimused:
- Tellimus on seotud Tellimuse_seisundi_liik, mille puhul Tellimuse_seisundi_liik =“arhiveeritud“.
Kasutus kasutusjuhtude poolt:
Tellimuse arhiveerimine (Tellimuse allsüsteem)
OP5.4.
Tellimuse mittetäidetuks muutmine (tellimuse_id)
Eeltingimused:
- Toimub tellimuse mittetäidetuks muutmine.
- Tellimus, Tellimuse_seisundi_liik on registreeritud.
Järeltingimused:
- Tellimus on seotud Tellimuse_seisundi_liik, mille puhul Tellimuse_seisundi_liik =“mittetaidetud“.
Kasutus kasutusjuhtude poolt:
Tellimuse arhiveerimine (Tellimuse allsüsteem)
2.2.3 Registri põhiobjekti seisundidiagramm
Tellimuse registri põhiobjekt
on „Tellimus”.
Joonis 5. Tellimuse seisundidiagramm.
2.3 CRUD maatriks
1
2
3
4
5
Kokkuvõtte
Tellimus
CRUD
RU
RU
CRUD
Tellimuse rida
CRUD
R
R
CRUD
Tellimuse seisundi liik
R
R
R
R
Klient
R
R
R
Tootaja
R
R
Amet
R
R
Menuu rida
R
R
R
Menuu grupp
R
R
R
Menuu rida seisundi liik
R
R
Kasutaja identifitseerimine
Menüü vaatamine
Tellimuse koostamine
Tellimuse kinnitamine
Tellimuse arhiveerimine
2.4 Infosüsteemi rollide kirjeldused
Rolli nimi
Kirjeldus
Klient
Füüsiline isik, kes on süsteemis registreeritud ja millesse saab ta sisse logida kasutajatunnuse ja parooli kaudu. Kliendil on õigus vaadata menüüd, koostata ning muuta oma tellimusi.
Tellimuse vastuvõtja
Füüsiline isik, kes on restorani töötaja. Tal on õigus kinnitada klientide tellimusi või neid tagasi saata kliendile, et ta parandaks neid.
Autojuht
Füüsiline isik, kes on restorani töötaja. Tema ülesandeks on tarnida tellimusi õigeaegselt kliendile ning arhiveerida juba tarnitud tellimusi.
3. Loogiline disain
3.1 Tellimuse
funktsionaalne allsüsteem
3.1.1 Realiseeritavad töökohad
- Kliendi töökoht
- Tellimuse vastuvõtja töökoht
3.1.2
Reaalsete kasutusjuhtude kirjeldused
Joonis 6. Tellimuse üldine vorm
Joonis 7. Menüü vaatamine koos tellimusega
Joonis 8. Kliendi tellimuste nimekiri (kliendi töökoht)
Joonis 9. Kliendi tellimuste nimekiri (tellimuste vastuvõtja töökoht)
Joonis 10. Kliendi tellimus (tellimuse vastuvõtja töökoht)
Kasutusjuht:
Tellimuse koostamine
Tüüp: Reaalne kasutusjuht
Stsenaarium (tüüpiline sündmuste
järjestus):
1. Klient alustab tellimuse
koostamist (vajutab nupule A).
2. Süsteem kontrollib, kas
kliendil pole tellimusi rohkem kui 10 tükki, mis võivad olla
seisundis „loodud“ või „vajab parandust“(OP3.1),
kui mitte, siis loob uue tellimuse (OP3.2).
3. Süsteem väljastab
tellimuse koostamise maketi, koos menüü vaatega. (OP3.3).
4. Klient valib toote gruppe
(ehk menüü_grupp), mida tahab tellida (vajutab nupule
M)(käivitub kasutusjuht menüü vaatamine).
5. Klient määrab koguse ning
lisab uue toote oma tellimusse.
6. Süsteem salvestab andmed
(vajutab nupule D) (OP3.4).
7. Süsteem arvutab välja
tellimuses olevate toodete hindade summa (väli K) (OP3.5).
Klient saab korrata samme 4-7
niimitu korda kui soovib.
Laiendused (või alternatiivne
sündmuste käik)
2a. Kliendi loodud tellimuste limiit
on täis.
Süsteem kuvab teate, et kliendil on juba 10 tellimust, mis on seisundis „loodud“ või „vajab parandust“ ning kuvab ka neid tellimusi (OP3.6) ning ei lase koostada uut tellimust. Klient saab valida talle vajaliku tellimuse ning asuda seda muutma, mis on kirjeldatud punktides 4-7, 4-7a ja 4-7b.
4-7a. Klient soovib toote (ehk
tellimuse_rida) oma tellimusest kustutada.
Klient valib toote (nimekiri U) ning vajutab vastavale kustutamis lingile.
Süsteem salvestab andmed (vajutab nupule G) (OP3.8).
Süsteem arvutab tellimuses olevate toodete kogu maksumuse (väli K) (OP3.9) ja kuvab selle kliendile.
4-7b. Klient soovib loodud tellimust
kustutada.
Klient annab korralduse loodud tellimust kustutada (vajutab nupu O).
Süsteem salvestab andmed (OP3.10).
Kasutusjuht:
Tellimuse kinnitamine (tellimuse vastuvõtja poolt)
Tüüp: Reaalne kasutusjuht
Stsenaarium (tüüpiline sündmuste
järjestus):
1. Tellimuse vastuvõtja
vaatab tellimusi mida on vaja kinnitada. (vajutab nupule V).
2. Süsteem kuvab kõikide
klientide tellimusi, mis on seisundis „kinnitamiseks saadetud“
(OP4.1).
3. Tellimuse vastuvõtja valib
ühe tellimuse. (nimekiri Z)
4. Süsteem kuvab valitud
tellimuse sisu (OP4.2).
5. Tellimuse vastuvõtja
vaatab tellimust üle, kui kõik on korras, siis kinnitab tellimuse.
6. Süsteem salvestab andmed (vajutab nupule S) (OP4.3).
Tellimuse vastuvõtja võib korrata
samme 1-6 niimitu korda kui soovib.
Laiendused (või alternatiivne
sündmuste käik)
5a. Kui tellimuse vastuvõtja leiab
tellimust vigaseks, siis muudab tellimust mittekinnitatuks.
Süsteem salvestab andmed (vajutab nupule X) (OP4.5).
3.2 Laiendatud tellimuse
registri loogiline disain
3.2.1 Loogiline andmebaasi skeem
3.2.1.1 Andmebaasi diagramm
Joonis 11. Andmebaasi diagramm
3.2.1.2 Tabelite kirjeldus
Tabeli nimi
Kuuluvus registrisse
Millise olemitüübi, atribuudi või
seosetüübi põhjal on loodud?
Tellimus
Tellimuse register
Olemitüüp: Tellimus
Tellimuse_seisund
Klassifikaatorite register
Olemitüüp: Tellimuse seisundi liik
Tellimuse_rida
Tellimuse register
Olemitüüp: Tellimuse rida
Isik
Isikute register
Olemitüüp: Isik
Klient
Isikute register
Olemitüüp: Klient
Olemitüüp: Isik
Tootaja
Isikute register
Olemitüüp: Tootaja
Olemitüüp: Isik
Amet
Klassifikaatorite register
Olemitüüp: Amet
Menuu_rida
Menuu register
Olemitüüp: Menuu rida
Menuu_grupp
Menuu register
Olemitüüp: Menuu grupp
Menuu_rida_seisund
Klassifikaatorite register
Olemitüüp: Menuu rida seisundi liik
3.2.1.3 Domeenide detailsed
kirjeldused
Domeeni nimi
Baasandmetüüp
Pikkus
Võimalikud väärtused
Vaikeväärtus
Kohustuslik
d_loomise aeg
kuupäev
Hetke kuupäev + kellaaeg
Jah
d_tarnimise aeg
kuupäev
Võimalik kuupäev ei ole hilisem loomise kuupäevast.
Jah
d_arhiveerimise aeg
kuupäev
Jah
d_tarnimise aadress
tekst
300
Aadress peab olema tähtedest ja numbritest koosnev string . Aadress ei saa olla ainult numbritest koosnev string ja ei saa olla ka tühistring.
Jah
d_nimetus
tekst
50
Kirjeldus ei saa olla tühistring ega tühikutest koosnev string
Jah
d_kirjeldus
tekst
max. võimalik
Kirjeldus ei saa olla tühistring ega tühikutest koosnev string
Ei
d_hind
arv
Hind peab olema number, mis on suurem kui 0. Ühikuks on EUR.
Jah
d_kogus
täisarv
Täisarv mis on suurem kui 0.
Jah
d_aadress
tekst
300
Aadress peab olema tähtedest ja numbritest koosnev string. Aadress ei saa olla ainult numbritest koosnev string ja ei saa olla ka tühistring.
Ei
d_eesti_isikukood
tekst
11
Esimene märk on numbrimärk vahemikus 3 kuni 6. See on soo tähis. Neljas märk on number 0 või 1 – see on sünnikuu esimene number. Kuues märk on number vahemikus 0 kuni 3. See on sünni päeva esimene number.
Jah
d_eesnimi
tekst
30
Eesnimi ei tohi olla tühi string või ainult tühikutest koosnev string. Eesnimi võib sisaldada ainult tähti, tühikuid või kriipse. Kui inimesel on mitu eesnime , siis need on eraldatud ühe tühiku või kriipsuga.
Jah
d_perenimi
tekst
60
Perenimi võib sisaldada ainult tähti, tühikuid või kriipse. Kui inimesel on mitu perenime, siis need on eraldatud ühe tühiku või kriipsuga.
Jah
d_sugu
täisarv
1
Sugu võib olla kas ‘1’=mees või ‘2’=naine. ‘0’=pole määratud. Sugu ei saa olla tühistring.
Ei
d_kasutajatunnus
tekst
15
Kasutajanimi ei tohi olla lühem kui 3 märki ja pikem kui 15 märki. Kasutajanimi ei saa olla
tühistring.
Jah
d_parool
hash sha256
64
Parool ei tohi olla lühem kui 4 märki ja pikem kui 32 märki. Parool ei saa olla
tühistring.
Jah
d_email
tekst
40
Email aadress koosneb märkide kombinatsioonist, @ sümbolist ja märkide kombinatsioonist.
Ei
d_telefon
tekst
12
Telefoni number peab koosnema ainult numbritest.
Jah
3.2.1.4 Tabelite detailsed kirjeldused
Tellimus
Veeru nimi
Tüüp/
domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
tellimuse_id
T
Täisarv
Unikaalsed väärtused. Automaatselt genereeritav täisarv, samm=1
Jah
kliendi_id
T
Täisarv
Jah
loomise_aeg
D
d_loomise aeg
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
Jah
tarnimise_aeg
D
d_tarnimise aeg
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
arhiveerimise_aeg
D
d_arhiveerimise aeg
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
tarnimise_aadress
D
d_tarnimise aadress
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
Jah
seisund
T
Tekst
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
1
Jah
Primary Key (tellimuse_id)
Foreign Key
( KLIENT_ID ) REFERENCES
T061859_KLIENT ( ISIK_ID ) ON DELETE CASCADE
Tellimuse_seisund
Veeru nimi
Tüüp/
domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
tellimuse_seisund_id
T
Täisarv
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
Jah
nimetus
T
Tekst
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
Jah
Primary
Key (tellimuse_seisund_id)
Alternate
Key
(nimetus)
Tellimuse_rida
Veeru nimi
Tüüp/
Domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
tellimuse_id
T
täisarv
Unikaalsed väärtused. Automaatselt genereeritav täisarv, samm=1
Jah
menüü_rida_id
T
täisarv
Jah
kogus
D
d_kogus
Jah
Primary
Key (tellimuse_id,
menüü_rida_id)
Foreign
Key
(
MENUU_RIDA_ID ) REFERENCES
T061859_MENUU_RIDA ( MENUU_RIDA_ID ) ON DELETE CASCADE
Foreign
Key
(
TELLIMUS_ID ) REFERENCES
T061859_TELLIMUS ( TELLIMUS_ID ) ON DELETE CASCADE
Isik
Veeru nimi
Tüüp/
domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
isik_id
T
täisarv
Unikaalsed väärtused. Automaatselt genereeritav täisarv, samm=1
Jah
isikukood
D
d_eesti_isikukood
Jah
eesnimi
D
d_eesnimi
Jah
perenimi
D
d_perenimi
Jah
sugu
D
d_sugu
Jah
kasutajatunnus
D
d_kasutajatunnus
Jah
parool
D
d_parool
Jah
e-mail
D
d_email
telefon
D
d_telefon
Primary
Key (isik_id)
Alternate
Key
(kasutajatunnus)
Alternate
Key
(isikukood)
Alternate
Key
(email)
Tootaja
Veeru nimi
Tüüp/
domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
isik_id
T
täisarv
Jah
amet_id
T
täisarv
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
Jah
aadress
D
d_aadress
Jah
Primary
Key (isik_id)
Foreign
Key
(ISIK_ID)
REFERENCES
T061859_ISIK (ISIK_ID) ON
DELETE
CASCADE
Foreign
Key
(AMET_ID) REFERENCES
T061859_AMET" (AMET_ID) ON
DELETE
CASCADE
Amet
Veeru nimi
Tüüp/
domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
amet_id
T
täisarv
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
Jah
nimetus
D
d_nimetus
Jah
Primary
Key (amet_id)
Alternate
Key
(nimetus)
Menuu_rida
Veeru nimi
Tüüp/
domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
menuu_rida_id
T
täisarv
Unikaalsed väärtused. Automaatselt genereeritav täisarv, samm=1
Jah
nimetus
D
d_nimetus
Jah
kirjeldus
D
d_kirjeldus
hind
D
d_hind
Jah
menuu_grupp_id
T
täisarv
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
Jah
menuu_rida_seisundi_id
T
täisarv
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
1
Jah
Primary
Key (menuu_rida_id)
Foreign
Key
(MENUU_GRUPP_ID)
REFERENCES
T061859_MENUU_GRUPP (MENUU_GRUPP_ID) ON DELETE CASCADE
Foreign
Key
( MENUU_RIDA_SEISUND_ID ) REFERENCES
T061859_MENUU_RIDA_SEISUND ( MENUU_RIDA_SEISUND_ID ) ON
ON
DELETE CASCADE
Alternate
Key
(nimetus,
kirjeldus, hind)
Menuu_grupp
Veeru nimi
Tüüp/
domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
menuu_grupp_id
T
täisarv
Unikaalsed väärtused. Automaatselt genereeritav täisarv, samm=1
Jah
nimetus
D
d_nimetus
Jah
Primary
Key (menuu_grupp_id)
Alternate
Key
(nimetus)
Menuu_rida_seisund
Veeru nimi
Tüüp/
domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
menuu_rida_seisund_id
T
täisarv
Vt. jaotis 3.2.2
Klassifikaatorite
väärtused
Jah
nimetus
D
d_nimetus
Vt. jaotis 3.2.2
Klassifikaatoite väärtused
Jah
Primary
Key
(menuu_rida_seisund_id)
Alternate
Key
(nimetus)
Klient
Veeru nimi
Tüüp/
domeen
Tüübi/
domeeni nimi
Pikkus
Võimalikud
väärtused
Vaikeväärtus
Kohustuslik
isik_id
T
täisarv
Jah
Primary
Key
(isik_id)
Foreign
Key
( ISIK_ID ) REFERENCES
T061859_ISIK (ISIK_ID ) ON
ON
DELETE CASCADE
3.2.2 Klassifikaatorite
väärtused
Klassifikaatori tabeli nimi
Koodide
omadused
Koodid
Nimed
Tellimuse_seisund
Monotoonselt
kasvavad
täisarvud
1
2
3
4
5
6
Loodud
Vajab parandamist
Kinnitamiseks saadetud Kinnitatud
Mittetäidetud
Arhiveeritud
Amet
Monotoonselt
kasvavad
täisarvud
1
2
Tellimuse vastuvõtja, Autojuht
Menuu_rida_seisund
Monotoonselt
kasvavad
täisarvud
1
2
Aktuaalne, Mitteaktuaalne
Menuu_grupp
Monotoonselt
kasvavad
täisarvud
1
2
3
4
5
6
7
8
9
Pearoad
Külmad eelroad
Kuumad eelroad
Magustoidud
Pastad
Teed
Kohvi joogid
Kokteilid
Alkohol
4. Süsteemi tehniline arhitektuuur
4.1 Esmane prototüüp
Infosüsteemi
arendamise esimese iteratsiooni käigus luuakse andmebaasi ja
rakenduse
prototüüplahendus, kasutades andmebaasisüsteemi Oracle.
Prototüübis realiseeritakse kõik projektis käsitletud töökohad.
See testitakse projekti autorite poolt eesmärgiga koguda täiendavaid
nõudmisi rakenduse funktsionaalsuse kohta.
4.2 Töötav süsteem
Joonis 12. Restorani infosüsteemi tehniline arhitektuur .
4.2.1 Versioon 1
Andmebaasi
ja rakenduse server
Operatsioonisüsteem: Windows
Veebiserver :
Apache Tomcat
Andmebaasisüsteem:
Oracle 11g Enterprise
Edition Release 1.
Rakenduse
loomise vahendid: Eclipse, Oracle SQL Developer
Kliendi
töökoht
Kliendi
töökoht on realiseeritud Java abil loodud veebirakendusena. Selle
kasutamiseks
peab arvutis olema veebilehitseja.
Järgmises
arendus tsüklis on plaanis kõigile kasutajatele luua veebipõhised
kasutajaliidesed.
4.2.2
Versioon 2
Andmebaasi
ja rakenduse server (ver.2)
Operatsioonisüsteem:
Windows
Veebiserver:
Apache Tomcat
Andmebaasisüsteem:
Oracle 11g Enterprise
Edition Release 1.
Rakenduse
loomise vahendid: Eclipse, Oracle SQL Developer
Tellimuse
vastuvõtja ja autojuhi töökoht
Töökoht
on realiseeritud Java abil loodud veebirakendusena. Selle
kasutamiseks
peab arvutis olema veebilehitseja.
5. Tellimuse funktsionaalne allsüsteemi kasutatavate registrite
füüsiline disain
Kasutatavad
andmebaasisüsteemid:
•
Mitteavaliku
lähtekoodiga serveri andmebaasisüsteem Oracle 11g Enterprise
Edition Release 1.
5.1 Transaktsioonanalüüs
Transaktsioonanalüüs
tehakse andmebaasioperatsioonide kohta.
Transaktsioonanalüüsi
tehes lähtutakse prognoositavast andmete kasutamise
sagedusest,
kui infosüsteem võetakse kasutusele kogu restorani ulatuses.
Transaktsioonanalüüs
peaks hõlmama kõige olulisemaid ja sagedamini käivituvaid
transaktsioone. See on aluseks otsustele, mis puudutavad andmebaasi
töökiiruse parandamist.
5.1.1
OP3.2. Tellimuse loomine (@klient)
Andmebaasioperatsiooni
kirjeldus: Kontrollitakse
kas kliendil on õigus uue tellimuse koostamiseks. Luuakse uus rida
tabelis Tellimus.
Andmebaasioperatsiooni
keskmine käivitumiste arv (tunnis): Operatsiooni
kasutatakse ööpäeva ringselt. Tunnis luuakse keskmiselt 2
tellimust.
Andmebaasioperatsiooni
maksimaalne käivutimiste arv (tunnis): Tipphetkedel
(lõuna ajal 12:00-14:00 ja õhtusel ajal 18:00-21:00) luuakse tunnis
keskmiselt 6 tellimust.
Trasaktsiooni
sisu:
@klient
– argument(kohustuslik)
@tellimuse_seisundi_liik
– konstant
@tellimus
– sisemine muutuja
@arv
– sisemine muutuja
Kontrollitakse
ega kliendil pole 10 tellimust, mis on seisundis „loodud“ või
„vajab parandamist“
SELECT INTO
@arv COUNT (*) FROM
T061859_Tellimus
WHERE
klient_id=@klient AND (tellimuse_seisund_id=1 OR
tellimuse_seisund_id=4)
Predikaat:
klient_id=@klient AND (tellimuse_seisund_id=1 OR
tellimuse_seisund_id=4)
IF
@arv0.00);
ALTER TABLE
t061859_tellimuse_rida ADD
CONSTRAINT
chk_kogus CHECK (kogus>0);
6.4Arvujada generaatorid
CREATE
SEQUENCE "TUD26"."T061859_SEQ_ISIK_ID" MINVALUE
1 MAXVALUE
999999999999999999999999999 INCREMENT
BY 1 START
WITH 1 CACHE 20 NOORDER NOCYCLE ;
CREATE
SEQUENCE
"TUD26"."T061859_SEQ_ISIK_LOG_ID" MINVALUE
1 MAXVALUE
999999999999999999999999999 INCREMENT
BY 1 START
WITH 1 CACHE
20 NOORDER
NOCYCLE ;
CREATE
SEQUENCE
"TUD26"."T061859_SEQ_MENUU_GRUPP_ID" MINVALUE
1 MAXVALUE
999999999999999999999999999 INCREMENT
BY 1 START
WITH 1 CACHE
20 NOORDER
NOCYCLE ;
CREATE
SEQUENCE
"TUD26"."T061859_SEQ_MENUU_RIDA_ID" MINVALUE
1 MAXVALUE
999999999999999999999999999 INCREMENT
BY 1 START
WITH 1 CACHE
20 NOORDER
NOCYCLE ;
CREATE
SEQUENCE
"TUD26"."T061859_SEQ_TELLIMUS_ID" MINVALUE
1 MAXVALUE
999999999999999999999999999 INCREMENT
BY 1 START
WITH 1 CACHE
20 NOORDER
NOCYCLE ;
CREATE
SEQUENCE
"TUD26"."T061859_SEQ_TELLIMUSE_SEISUND" MINVALUE
1 MAXVALUE
999999999999999999999999999 INCREMENT
BY 1 START
WITH 1 CACHE
20 NOORDER
NOCYCLE ;
CREATE
SEQUENCE
"TUD26"."T061859_SEQ_AMET_ID" MINVALUE
1 MAXVALUE
999999999999999999999999999 INCREMENT
BY 1 START
WITH 1 CACHE
20 NOORDER
NOCYCLE ;
6.5Tabelite ja arvujada
generaatorite sidumine
CREATE TRIGGER T061859_TRIG_ISIK_INSERT BEFORE
INSERT ON
"TUD26"."T061859_ISIK" FOR
EACH row BEGIN IF
inserting THEN
IF
:NEW."ISIK_ID" IS
NULL THEN
SELECT
T061859_SEQ_ISIK_ID.nextval INTO
:NEW."ISIK_ID" FROM dual ;
END
IF;
END
IF;
END;
CREATE
TRIGGER
T061859_TRIG_ISIK_LOG_INSERT
BEFORE
INSERT
ON
"TUD26"."T061859_ISIK_LOG" FOR
EACH row BEGIN IF
inserting THEN
IF
:NEW."LOG_ID" IS
NULL THEN
SELECT
T061859_SEQ_ISIK_LOG_ID.nextval INTO
:NEW."LOG_ID" FROM
dual;
END
IF;
END
IF;
END;
CREATE
TRIGGER
T061859_TRIG_MENUU_RIDA_INS BEFORE
INSERT
ON
"TUD26"."T061859_MENUU_RIDA" FOR
EACH row BEGIN IF
inserting THEN
IF
:NEW."MENUU_RIDA_ID" IS
NULL THEN
SELECT
T061859_SEQ_MENUU_RIDA_ID.nextval INTO
:NEW."MENUU_RIDA_ID" FROM
dual;
END
IF;
END
IF;
END;
CREATE
TRIGGER
T061859_TRIG_MENUU_GRUPP_INS BEFORE
INSERT
ON
"TUD26"."T061859_MENUU_GRUPP" FOR
EACH row BEGIN IF
inserting THEN
IF
:NEW."MENUU_GRUPP_ID" IS
NULL THEN
SELECT
T061859_SEQ_MENUU_GRUPP_ID.nextval
INTO
:NEW."MENUU_GRUPP_ID"
FROM
dual;
END
IF;
END
IF;
END;
CREATE
TRIGGER
T061859_TRIG_TELLIMUS_INS BEFORE
INSERT
ON
"TUD26"."T061859_TELLIMUS" FOR
EACH row BEGIN IF
inserting THEN
IF
:NEW."TELLIMUS_ID" IS
NULL THEN
SELECT
T061859_SEQ_TELLIMUS_ID.nextval INTO
:NEW."TELLIMUS_ID" FROM
dual;
END
IF;
END
IF;
END;
CREATE
TRIGGER
T061859_TRIG_TELLIMUS_SEIS_INS BEFORE
INSERT
ON
"TUD26"."T061859_TELLIMUSE_SEISUND" FOR
EACH row BEGIN IF
inserting THEN
IF
:NEW."TELLIMUSE_SEISUND_ID" IS
NULL THEN
SELECT
T061859_SEQ_TELLIMUSE_SEISUND.nextval
INTO
:NEW."TELLIMUSE_SEISUND_ID"
FROM
dual;
END
IF;
END
IF;
END;
CREATE
TRIGGER
T061859_TRIG_AMET_INSERT
BEFORE
INSERT
ON
"TUD26"."T061859_AMET" FOR
EACH row BEGIN IF
inserting THEN
IF
:NEW."AMET_ID" IS
NULL THEN
SELECT
T061859_SEQ_AMET_ID.nextval INTO
:NEW."AMET_ID" FROM
dual;
END
IF;
END
IF;
END;
6.6 Vaated
CREATE
OR REPLACE VIEW "T061859_KLIENDID"
AS
SELECT
i.isik_id,
i.isikukood,
i.eesnimi,
i.perenimi,
i.sugu,
i.kasutajatunnus,
i.parool,
i.email,
i.telefon
FROM
t061859_isik i,
t061859_klient k
WHERE i.isik_id = k.isik_id;
CREATE
OR REPLACE VIEW "T061859_TELLIMUSED_OLEK_3"
AS
SELECT
t.tellimus_id,
t.klient_id,
t.loomise_aeg,
t.tarnimise_aeg,
t.arhiveerimise_aeg,
t.tarnimise_aadress,
t.tellimuse_seisund_id,
i.isik_id,
i.isikukood,
i.eesnimi,
i.perenimi,
i.sugu,
i.kasutajatunnus,
i.email,
i.telefon
FROM
t061859_tellimus t
JOIN t061859_isik i
ON t.klient_id = i.isik_id
WHERE t.tellimuse_seisund_id =
3;
CREATE
OR REPLACE VIEW "T061859_DETAILSEM_TELLIMUS"
AS
SELECT
t.tellimus_id,
t.menuu_rida_id,
m.nimetus,
m.kirjeldus,
m.hind,
t.kogus tellitud_kogus,
(m.hind*t.kogus) hind_kokku
FROM
t061859_tellimuse_rida t,
t061859_menuu_rida m
WHERE t.menuu_rida_id =
m.menuu_rida_id
6.7 Sünonüümid
CREATE
SYNONYM isik FOR
t061859_isik;
6.8 Paketid, salvestatud
protseduurid ja funktsioonid
CREATE
OR
REPLACE
FUNCTION T061859_get_tellimuse_hind(
in_tellimus_id NUMBER)
RETURN NUMBER
IS
tellimuse_hind
NUMBER;
BEGIN
SELECT
SUM(m.hind*t.kogus)
INTO
tellimuse_hind
FROM
t061859_tellimuse_rida t,
t061859_menuu_rida m
WHERE
t.tellimus_id =in_tellimus_id
AND
t.menuu_rida_id = m.menuu_rida_id
GROUP
BY t.tellimus_id ;
RETURN
tellimuse_hind;
END;
CREATE
OR REPLACE
FUNCTION
"T061859_FUNK_ISIKUKOOD"(
isikukood IN
T061859_ISIK.isikukood%TYPE )
RETURN
NUMBER
IS
/*Funktsiooni
tagastatavad väärtused:
1 - kuu
on ebareaalne .
2 -
päev on ebareaalne.
3 - vigane isikukood
4 -
kontrolli käigus tekkis mõni muu viga.
e_vale_paev EXCEPTION;
e_vale_kuu EXCEPTION;
e_vigane_isikukood EXCEPTION;
m_kuu CHAR (2);
m_paev CHAR(2);
m_summa NUMBER(3);
m_tulemus NUMBER(1);
m_viimane_nr NUMBER(1);
m_abi_muutuja NUMBER(2);
BEGIN
m_kuu :=SUBSTR(isikukood,4,2);
IF
(m_kuu'12') THEN
RAISE e_vale_kuu;
END
IF;
/*Isikukoodi kuues ja
seitsmes märk määravad päeva*/
m_paev :=SUBSTR(isikukood,6,2);
IF
(m_paev'31') THEN
RAISE
e_vale_paev;
END
IF;
m_summa:=0;
FOR
i IN
1..10
LOOP
IF
(i =10) THEN
m_summa :=m_summa +
SUBSTR(isikukood,i,1);
ELSE
m_summa :=m_summa +
i*SUBSTR(isikukood,i,1);
END
IF;
END
LOOP;
m_viimane_nr :=
SUBSTR(isikukood,11,1);
IF(mod(m_summa,11)=10)THEN
m_abi_muutuja :=2;
m_summa :=0;
FOR
j IN
1..10
LOOP
m_abi_muutuja :=m_abi_muutuja+1;
IF(m_abi_muutuja=10)THEN
m_abi_muutuja:=1;
END
IF;
m_summa :=m_summa +
m_abi_muutuja*SUBSTR(isikukood,j,1);
END
LOOP;
IF(mod(m_summa,11)=10)
THEN
IF(m_viimane_nr
=0)THEN
m_tulemus :=0;
ELSE
IF(mod(m_summa,11)=m_viimane_nr)
THEN
m_tulemus :=0;
ELSE
RAISE
e_vigane_isikukood;
END
IF;
END
IF;
END
IF;
ELSE
IF(mod(m_summa,11)=m_viimane_nr)
THEN
m_tulemus :=0;
ELSE
RAISE
e_vigane_isikukood;
END
IF;
END
IF;
RETURN
m_tulemus;
EXCEPTION
WHEN
e_vale_kuu THEN
RETURN
1;
WHEN
e_vale_paev THEN
RETURN
2;
WHEN
e_vigane_isikukood THEN
RETURN
3;
WHEN
OTHERS
THEN
RETURN
4;
END;
CREATE OR
REPLACE
FUNCTION
T061859_FUNK_TELLIMUSTE_KOGUS(
in_klient_id NUMBER)
RETURN
NUMBER
IS
kogus
NUMBER(6);
BEGIN
SELECT
COUNT(*) INTO
kogus FROM
t061859_tellimus WHERE
klient_id=in_klient_id;
RETURN
kogus;
END;
CREATE OR
REPLACE
FUNCTION
T061859_FUNK_CAN_MAKE_ORDER(
in_klient_id NUMBER)
RETURN
NUMBER
IS
canMake NUMBER(1);
m_count NUMBER(2);
BEGIN
SELECT
COUNT(*)
INTO
m_count
FROM
t061859_tellimus
WHERE
klient_id = in_klient_id
AND
(tellimuse_seisund_id=1
OR
tellimuse_seisund_id =2);
IF
(m_count '"TUD26"', tabname =>
'"T061859_KLIENT"', estimate_percent => 1 );
END;
BEGIN
DBMS_STATS.GATHER_TABLE_STATS
( ownname => '"TUD26"', tabname =>
'"T061859_MENUU_GRUPP"', estimate_percent => 1 );
END;
BEGIN
DBMS_STATS.GATHER_TABLE_STATS
( ownname => '"TUD26"', tabname =>
'"T061859_MENUU_RIDA"', estimate_percent => 1 );
END;
BEGIN
DBMS_STATS.GATHER_TABLE_STATS
( ownname => '"TUD26"', tabname =>
'"T061859_MENUU_RIDA_SEISUND"', estimate_percent => 1 );
END;
BEGIN
DBMS_STATS.GATHER_TABLE_STATS
( ownname => '"TUD26"', tabname =>
'"T061859_TELLIMUS"', estimate_percent => 1 );
END;
BEGIN
DBMS_STATS.GATHER_TABLE_STATS
( ownname => '"TUD26"', tabname =>
'"T061859_TELLIMUSE_RIDA"', estimate_percent => 1 );
END;
BEGIN
DBMS_STATS.GATHER_TABLE_STATS
( ownname => '"TUD26"', tabname =>
'"T061859_TELLIMUSE_SEISUND"', estimate_percent => 1 );
END;
BEGIN
DBMS_STATS.GATHER_TABLE_STATS
( ownname => '"TUD26"', tabname =>
'"T061859_TOOTAJA"', estimate_percent => 1 );
END;
6.13 Päringu
täitmisplaani näide
Vaatlen päringut vaate põhjal mille alampäring on:
SELECT
t.tellimus_id,
t.menuu_rida_id,
m.nimetus,
m.kirjeldus,
m.hind,
t.kogus tellitud_kogus,
(m.hind*t.kogus) hind_kokku
FROM
t061859_tellimuse_rida t,
t061859_menuu_rida m
WHERE t.menuu_rida_id =
m.menuu_rida_id;
EXPLAIN
PLAN FOR
SELECT
* FROM
t061859_detailsem_tellimus;
SELECT
* FROM
TABLE(dbms_xplan. display ());
6.14 Andmebaasiobjektide kustutamise
SQL laused
6.14.1 Tabelite kustutamine
DROP TABLE "TUD26"."T061859_AMET"
CASCADE CONSTRAINTS ;
DROP
TABLE
"TUD26"."T061859_ISIK" CASCADE CONSTRAINTS
;
DROP
TABLE
"TUD26"."T061859_ISIK_LOG" CASCADE CONSTRAINTS
;
DROP
TABLE
"TUD26"."T061859_KLIENT" CASCADE CONSTRAINTS
;
DROP
TABLE
"TUD26"."T061859_MENUU_GRUPP" CASCADE CONSTRAINTS
;
DROP
TABLE
"TUD26"."T061859_MENUU_RIDA" CASCADE CONSTRAINTS
;
DROP
TABLE
"TUD26"."T061859_MENUU_RIDA_SEISUND" CASCADE
CONSTRAINTS
;
DROP
TABLE
"TUD26"."T061859_TELLIMUS" CASCADE CONSTRAINTS
;
DROP
TABLE
"TUD26"."T061859_TELLIMUSE_RIDA" CASCADE
CONSTRAINTS
;
DROP
TABLE
"TUD26"."T061859_TELLIMUSE_SEISUND" CASCADE
CONSTRAINTS
;
DROP
TABLE
"TUD26"."T061859_TOOTAJA" CASCADE CONSTRAINTS
;
6.14.2 Arvujada generaatorite kustutamine
DROP
SEQUENCE
"TUD26"."T061859_SEQ_AMET_ID";
DROP
SEQUENCE
"TUD26"."T061859_SEQ_ISIK_ID";
DROP
SEQUENCE
"TUD26"."T061859_SEQ_ISIK_LOG_ID";
DROP
SEQUENCE
"TUD26"."T061859_SEQ_MENUU_GRUPP_ID";
DROP
SEQUENCE
"TUD26"."T061859_SEQ_MENUU_RIDA_ID";
DROP
SEQUENCE
"TUD26"."T061859_SEQ_TELLIMUS_ID";
DROP
SEQUENCE
"TUD26"."T061859_SEQ_TELLIMUSE_SEISUND";
6.14.3 Vaadete kustutamine
DROP
VIEW
"TUD26"."T061859_DETAILSEM_TELLIMUS";
DROP
VIEW
"TUD26"."T061859_KLIENDID";
DROP
VIEW
"TUD26"."T061859_TELLIMUSED_OLEK_3";
6.14.4 Indeksite kustutamine
DROP
INDEX
"TUD26"."T061859_TOOTAJA_PK";
DROP
INDEX
"TUD26"."T061859_TOOTAJA_AMETID_IDX";
DROP
INDEX
"TUD26"."T061859_TELLIMUSE_SEISUND_UK";
DROP
INDEX
"TUD26"."T061859_TELLIMUSE_SEISUND_PK";
DROP
INDEX
"TUD26"."T061859_TELLIMUSE_RIDA_PK";
DROP
INDEX
"TUD26"."T061859_TELLIMUSE_ID_IDX";
DROP
INDEX
"TUD26"."T061859_TELLIMUS_SEISUND_IDX";
DROP
INDEX
"TUD26"."T061859_TELLIMUS_PK";
DROP
INDEX
"TUD26"."T061859_TELLIMUS_KLIENT_ID_IDX";
DROP
INDEX
"TUD26"."T061859_MENUU_RIDA_UK";
DROP
INDEX
"TUD26"."T061859_MENUU_RIDA_SEISUND_UK";
DROP
INDEX
"TUD26"."T061859_MENUU_RIDA_SEISUND_PK";
DROP
INDEX
"TUD26"."T061859_MENUU_RIDA_SEISUND_IDX";
DROP
INDEX
"TUD26"."T061859_MENUU_RIDA_PK";
DROP
INDEX
"TUD26"."T061859_MENUU_RIDA_IDX";
DROP
INDEX
"TUD26"."T061859_MENUU_GRUPP_PK";
DROP
INDEX
"TUD26"."T061859_MENUU_GRUPP_NIMETUS_UK";
DROP
INDEX
"TUD26"."T061859_MENUU_GRUPP_ID_IDX";
DROP
INDEX
"TUD26"."T061859_KLIENT_PK";
DROP
INDEX
"TUD26"."T061859_ISIK_UK1";
DROP
INDEX
"TUD26"."T061859_ISIK_UK2";
DROP
INDEX
"TUD26"."T061859_ISIK_UK3";
DROP
INDEX
"TUD26"."T061859_ISIK_PK";
DROP
INDEX
"TUD26"."T061859_ISIK_NIMI_IDX";
DROP
INDEX
"TUD26"."T061859_ISIK_LOG_PK";
DROP
INDEX
"TUD26"."T061859_AMET_UK";
DROP
INDEX
"TUD26"."T061859_AMET_PK";
6.14.6 Trigerite ja funktsioonide kustutamine
DROP
TRIGGER
"TUD26"."T061859_TRIG_AMET_INSERT";
DROP
TRIGGER
"TUD26"."T061859_TRIG_ISIK_INSERT";
DROP
TRIGGER
"TUD26"."T061859_TRIG_ISIK_ISIKUKOOD";
DROP
TRIGGER
"TUD26"."T061859_TRIG_ISIK_LOG_INSERT";
DROP
TRIGGER
"TUD26"."T061859_TRIG_ISIK_LOGGING";
DROP
TRIGGER
"TUD26"."T061859_TRIG_MENUU_GRUPP_INS";
DROP
TRIGGER
"TUD26"."T061859_TRIG_MENUU_RIDA_INS";
DROP
TRIGGER
"TUD26"."T061859_TRIG_TELLIMUS_INS";
DROP
TRIGGER
"TUD26"."T061859_TRIG_TELLIMUS_SEIS_INS";
DROP
FUNCTION
"TUD26"."T061859_GET_TELLIMUSE_HIND";
DROP
FUNCTION
"TUD26"."T061859_FUNK_TELLIMUSTE_KOGUS";
DROP
FUNCTION
"TUD26"."T061859_FUNK_ISIKUKOOD";
DROP
FUNCTION
"TUD26"."T061859_FUNK_CAN_MAKE_ORDER";
Kõik kommentaarid