SlideShare a Scribd company logo
1 of 35
0
ADATBÁZIS HASZNÁLAT II.
Féléves feladat
Kocsis Tamás Zsolt
MQ1LGI
ÓE-NIK
Teabolt alkalmazás
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
1
Tartalomjegyzék
TÁROLANDÓ ADATOK ....................................................................................................................2
MEGSZORÍTÁSOK...........................................................................................................................2
NORMALIZÁLÁS.............................................................................................................................3
ALKALMAZÁSI KÖRNYEZET..............................................................................................................5
TÁBLÁK ÉS FELHASZNÁLÓK LÉTREHOZÁSA...................................................................................6
ADATOK FELTÖLTÉSE..................................................................................................................6
ALKALMAZÁS BETÖLTÉSE............................................................................................................8
DLL KÖNYVTÁR BETÖLTÉSE.........................................................................................................8
ALKALMAZÁS BEMUTATÁSA, TESZTELÉSE ÉS LÉTREHOZÁSÁNAK FOLYAMATA....................................9
ALKALMAZÁS.............................................................................................................................9
FŐOLDAL.................................................................................................................................11
KÍNÁLATUNK............................................................................................................................16
SZÁRMAZÁSI HELYEK................................................................................................................18
ÁTLAG ÉRTÉK ...........................................................................................................................20
PARANCSSOR...........................................................................................................................21
RAKTÁR...................................................................................................................................26
VÁSÁRLÓK...............................................................................................................................28
TEA SZÁMLÁLÓ........................................................................................................................30
JOGOSULTSÁGI ADATOK...............................................................................................................32
TESZTFUTÁSOK............................................................................................................................33
IRODALOMJEGYZÉK......................................................................................................................34
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
2
TÁROLANDÓ ADATOK
 TEA_NEV: Meghatározza az árusított tea nevét (a származási hely elhagyásával),
mely a piaci követelményeknek megfelelően minden esetben teljesen egyedi.
 SZARMAZASI_HELY: Meghatározza az adott tea termőterületét, tehát azt az
országot, ahol feldolgozták (a tea neve szinte minden esetben tartalmazza a helység
nevét is).
 TIPUS: Az adott tea feldolgozási módjától függően meghatározza annak típusát.
 TEA_AR: Az az összeg forintban megadva, amelyen értékesítésre kerül a tea.
 SZAVATOSSAG: Az a dátum, amelytől kezdve a tea fogyasztása nem javasolt,
 HOMERSEKLET: A vízhőmérséklet Celsius fokban megadva, melyen az adott teát
forrázni javasolt.
 VASAROLT_MENNY: Az adott teából eddig összesen eladott mennyiség grammban
kifejezve.
 UZLETVEZETŐ: Az adott üzletben felelős alkalmazott, ki a teák árusításáért, az üzlet
vezetéséért felel.
 UZLET_NEV: Az adott üzlethelyiség neve.
 UZLET_CÍME: Az adott üzletközpont neve, amelyben az üzlethelység található.
 VASARLO_NEV: A nyilvántartásba vett vásárló teljes neve.
 EMAIL_CIM: A vásárló által megadott egyedi e-mail cím.
 MENNYISEG: A vásárló által összesen vásárolt teák mennyisége grammban
kifejezve.
 BEVETEL: A vásárló által összesen teákra kifizetett összeg forintban kifejezve.
MEGSZORÍTÁSOK
 A forrázási hőmérséklet a teák fajtájából adódóan csak 50 C° és 100 C° között lehet.
 A világon csak meghatározott számú tea típus létezik, ezek: Fekete, Fehér, Gyümölcs,
Rooibos, Zöld, Vörös
 A tea árát nem lehet 1000Ft-nál kevesebb és 10000Ft-nál több.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
3
NORMALIZÁLÁS
1. Ősmodell relációsémája a tárolandó attribútumokkal
teabolt< TEA_NEV,SZARMAZASI_HELY,TIPUS,TEA_AR, SZAVATOSSAG,HOMERSEKLET,
VASAROLT_MENY,UZLETVEZETO, UZLET_NEV, UZLET_CIM, VASARLO_NEV,
EMAIL_CIM, MENNYISEG, BEVETEL >
2. Függőségek felismerése
a. Magát a teát (ebből adódóanazüzletetis,ami forgalmazza) egyértelműen
meghatározzaa neve ésannaktípusa tehát:
ftea = { TEA_NEV,TIPUS }  { SZARMAZASI_HELY,TEA_AR, SZAVATOSSAG,
HOMERSEKLET, VASAROLT_MENNY, UZLET_NEV,
UZLET_CIM, UZLETVEZETO }
b. Egyértelműenbelátható,hogyazüzletvezetőtegyértelműenmeghatározzaaz
üzletközpontneve,de mivel együzletközpontbantöbbteaszaküzletistalálható,így
az azonosításhozszükségesmégazüzlethelyiségneve is,így:
füzletek = { UZLET_NEV, UZLET_CIM }  { UZLETVEZETO }
c. Egy vásárlóttermészetesenegyértelműenmeghatározzaésazonosítjaaneve ése-
mail címe,ebből adódóan:
fvasarlo = { VASARLO_NEV,EMAIL_CIM}  { MENNYISEG, BEVETEL }
3. Függőségek normalizálása
a. Az ftea függőségvizsgálata
1NF: az ftea 1NF-benvan,mivel nincsbenne összetett attribútum.
2NF: az ftea egyértelműennincs2NF-ben,mivel amásodlagos attribútumai között
van olyan, ami nemfüggaz elsődlegesattribútumokmindegyikétől.
Ha az ftea -ból kivesszükaz füzletek -et,akkor:
ftea1 = { TEA_NEV,TIPUS }  { SZARMAZASI_HELY,TEA_AR, SZAVATOSSAG,
HOMERSEKLET, VASAROLT_MENNY}
3NF: 3NF-benisvan,lévénnincssemmilyenfüggőségamásodlagos
attribútumokközött.
BCNF: mivel 3NF-benvanazftea2, és baloldalának egyetlenvalódi részhalmazase
függelsődlegessemmásodlagosattribútumtól,ígyezBCNF-benvan.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
4
b. Az füzletek függőségvizsgálata
1NF: az füzletek 1NF-benvan,mivel nincsbenne összetettattribútum.
2NF: az füzletek 2NF-benvan,lévénnincsolyanmásodlagosattribútuma,amelyne
függene az elsődlegesattribútumokmindegyikétől.
3NF: az füzletek 3NF-benisvannak,lévénnincssemmilyenfüggőségamásodlagos
attribútumokközött.
BCNF: mivel 3NF-benvanazfüzletek, és baloldalánakegyetlenattribútumavancsak,
így ezBCNF-benisvan.
c. Az fvasarlofüggőségvizsgálata
1NF: az fvasarlo 1NF-benvan,mivel nincsbenne összetettattribútum.
2NF: az fvasarlo 2NF-benvan,lévénnincsolyanmásodlagosattribútuma,amelyne
függene azelsődlegesattribútumokmindegyikétől.
3NF: az fvasarlo 3NF-benisvannak,nincssemmilyenfüggőségamásodlagos
attribútumokközött.
BCNF: mivel 3NF-benvanazfvasarlo, ésbaloldalánakegyetlenattribútumavancsak,
így ezBCNF-benisvan.
4. Függőségek összefoglalása
ftea2 = { TEA_NEV,TIPUS }  { SZARMAZASI_HELY,TEA_AR, SZAVATOSSAG,
HOMERSEKLET, VASAROLT_MENNY}
füzletek = { UZLET_NEV, UZLET_CIM }  { UZLETVEZETO }
fvasarlo = { VASARLO_NEV,EMAIL_CIM}  { MENNYISEG, BEVETEL }
5. Az eredmény adatmodell
teak < TEA_NEV,TIPUS,SZARMAZASI_HELY, TEA_AR, SZAVATOSSAG,HOMERSEKLET,
VASAROLTMENNY >
uzletek< UZLET_ NEV,UZLET_CIM, UZLETVEZETO >
vasarlok < VASARLO_NEV, EMAIL_CIM, MENNYISEG, BEVETEL >
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
5
ALKALMAZÁSI KÖRNYEZET
A félévesfeladataz Oracle ApplicationExpress fejlesztői környezetsegítségévelkészült,mely
természetesenazOracle adatbázisrendszerére épül.Először2006-banjelentmegezenanéven,
azóta pedigmára 4.2.3-as verziónál tarta fejlesztése.NagyIstvánjellemzésearendszerről mindent
elmondarról,hogymiértisérdemeshasználni:
„Az Application Express(APEX) azOracleadatbáziskezelő rendszerPL/SQLnyelvikörnyezetébe
ágyazottwebeseszközkészletre(Web-Toolkit) épülő,úgynevezettvékony-kliensű (webes)
alkalmazásokfejlesztéséreszolgáló,azOracleprofesszionális(pénzértmegvásárolható) adatbázis-
motorjátkiegészítő,deönmagában ingyenesen letölthető alkalmazásfejlesztő eszköz.Ekét eszköz
(tehátazOracle adatbázis-motorésazAPEX) felhasználásábólazOracle cég létrehozottegy
ingyenes,web-esadatbázis-alkalmazásoklétrehozására isalkalmasfejlesztő eszköztExpressEdition
(XE) néven.AzXE bizonyos(alapvetően azerőforrásokméretérevonatkozó) korlátozásokon túl teljes
értékű web-esadatbázis-alkalmazásoklétrehozására alkalmas.AzXE-ben a web-esalkalmazások
létrehozására szolgáló (azAPEX-szelekvivalens)komponensneveApplication Builder.”i
A fentieketfigyelembevéve lássukis,milyenelőkészületekre vanszükségünk,hogyazalkalmazásunk
működőképeslegyen.Ehhez biztosítvavankettődarab szkriptfájl,amely létrehozzarendszerbena
táblákat,hozzáadjaa megfelelőmegszorításokat,valamintlétrehozzaafelhasználókatés
csoportokat, hogytesztelhetőlegyenarendszer.Létezikvalaminthárom darab.txtkiterjesztésűfájl,
melyekezeketatáblákatfeltöltikadatokkal.
Előszöris jelentkezzünkbe azAPEXrendszerbe azadminisztrátorfelhasználóval (haatelepítési
útmutatónakmegfelelőenletttelepítvearendszer,akkorezalapesetben:MAGYAR/Tigris-1)!
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
6
TÁBLÁK ÉS FELHASZNÁLÓK LÉTREHOZÁSA
Lépjünkbe az SQL Workshopba,majdezt követőenaz SQL Scriptsbe,ahol jelenlegmégcsakegyüres
listajelenikmeg.Azüreslistatetején,jobboldalonkattintsunkaz UploadScript gombra,majd a
megjelenőablakbanválasszukki a „TablaLetre.sql” scriptet(aDVDmellékletene /Scriptek/
mappábantalálható),majdnyomjukmegaz Uploadgombot.
Ismételjükmega „users.sql”scriptel isugyanezt(aDVDmellékletene /Scriptek/mappában
található).
A megjelenőlistábanmostmárott vana kétdarab szükségesfájl,márcsak le kell őketegymásután
futtatni,szóval kattintsukaRunfejlécalattlévőlejátszásgombra,majdazújonnanmegnyíló
ablakbana Run Now gombra. Ismételjükeztmegamásikscriptnél is.
Ha mindenrendbenment,létrejöttekatábláink ésafelhasználóink,valamintafelhasználói
csoportokis,eztle is lehetellenőrizni,harákattintunk aViewResultsalatta dokumentumikonra.
ADATOK FELTÖLTÉSE
Az újonnanlétrejötttáblákat fel kell tölteni, ehhezmenjünkvisszaaz SQL Workshopnyitóoldalára,
majdválasszukki a Utilitiesmenüpontot.Ittamásodikikonon,a Data Workshoponbelül,aLoad
Data ablak Text Data hivatkozásárakell kattintanunk.A megjelenőoldalonválasszukki a Load to:
ExistingTable-t,majdkattintsunkatovábbra.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
7
A következőlépésamegfelelőtáblakiválasztása,tehátazé atábláé,ahovaaz adatokat feltölteni
szeretnénk. Mivel háromtáblajöttlétre a szkriptlefuttatásaután,ezértazegészprocedúrát
háromszor meg kell ismételni. Elsőkörbenválasszukki alegördülőlistából a TEAK táblát,majdaz ezt
követőalkalmakkal aVASARLOKésaz UZLETEK táblát.
Ha ez sikerült,akövetkezőablakbanmegkelladni afeltöltendőadatokattartalmazó .txtfájl elérési
útját(alaphelyzetbenaDVDmelléklet/Data/könyvtárábantalálhatóak,elnevezésükmegegyezika
hozzátartozó táblanevével).
Miután ezzel végeztünk,márcsak annyi a teendőnk,hogyazutolsóablakbanleellenőrizzük,hogy
mindenhelyesenlett-e megadva,majdrákattintunkaLoad gombra. Ne felejtsükel,hogyezta
procedúrátösszesen háromszorvégigkell csinálni, hogymindenadattáblaértéketkapjon.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
8
ALKALMAZÁS BETÖLTÉSE
Nemmaradt máshátra, már csak importálni kell magátazalkalmazást.Ehhezmenjünk az
ApplicationBuildermenüpontra,ahol aközépenmegjelenőmenüsávonkattintsunkaz Import
gombra.
A megjelenőablakbanválasszukki azalkalmazásttartalmazó.sqlfájlt(aDVDmellékletenaz
/Alkalmazás/mappábantalálható „f104.sql” fájlt),majdimportáljukbe éstelepítsükfel.Haez
sikeresvolt,akkormegjelenikaRun Applicationgomb,kattintsunkráerre.
DLL KÖNYVTÁR BETÖLTÉSE
Az oldal megfelelő működéseérdekébenszükséglesznéhányapróutasításésmódosításelvégzésére.
Előszöris adjuk hozzáa megfelelőjogosultságokataz SQLDEVELOPER alkalmazásSYSTEMoldalán:
GRANT CREATE ANY LIBRARY,
EXECUTE ANY TYPE,
EXECUTE ANY PROCEDURE,
DROP ANY LIBRARY,
DROP ANY TYPE,
DROP ANY PROCEDURE
TO SEMA1;
Ezt követőenmásoljuka„TeaTipus.dll” valamint„TeaTipus.exp” fájlokat(aDVDmelléklet/DLL/
mappájábantalálhatóak) azalábbi helyre:
alkalmazás helyeOracleproduct11.2.0dbhome_1BIN
például: C:appOracleproduct11.2.0dbhome_1BIN
Ha ezzel végeztünk,indítsukel az ApplicationExpresstéskattintsunkaz SQL Workshopmenünbelül
az SQL Commandsgombra, majdírjuk be az alábbi kétutasítást:
CREATE OR REPLACE LIBRARY TeaShopLIB AS
'C:oracleproduct11.2.0dbhome_1BINTeaTipus.dll';
CREATE OR REPLACE FUNCTION TeaTipus
(bemenet in varchar2)
RETURN varchar2
AS EXTERNAL
LIBRARY TeaShopLIB
NAME "TeaTipus"
LANGUAGE C
PARAMETERS (bemenet string);
Kattintsunkafuttatás gombra,és ha mindenjól ment,sikeresenvégeztünkazalkalmazás
előkészítésével.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
9
ALKALMAZÁS BEMUTATÁSA, TESZTELÉSE ÉS LÉTREHOZÁSÁNAK
FOLYAMATA
ALKALMAZÁS
Az alkalmazáslétrehozásánál –az alapvetőbeállításoktól eltekintve–be lettállítvaa magyar dátum
formátum,valamintazauthorizációssémákis,ajövőbelifelhasználókezelésmegvalósítása
érdekében.
Az alkalmazásnyelve természetesenmagyar,amegjelenődátumformátumamegegyezikaz
országbanhasználtáltalánosdátum formátummal.
A felhasználók(pontosabbanfelhasználói csoportok) kezelésérekétsémalettlétrehozva:egy ADMIN
ésegy UZLETVEZETO séma.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
10
Az ADMINsémát megvalósítóSQLlekérdezésakövetkező:
Az UZLETVEZETO séma hasonlóannézki:
Ez azért különbözikaz ADMINsémától,hogymegvalósíthatólegyenegyhierarchikusjogosultsági
rendszer,ami annyitjelent,hogyaz ADMINISZTRATOR csoportbatartozó felhasználókelérhetikaz
oldal összesfunkcióját,az UZLETVEZETO csoportbatartozó felhasználókazoldalnakcsakbizonyos
funkcióit,míga publikusfelhasználókazoldalnakcsakegymégkisebbrészétláthassák.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
11
FŐOLDAL
Az alkalmazáselindításátkövetőenakövetkezőfogadjaafelhasználót:
Ez az oldal mindenvendégszámáraelérhető, nincsenautentikálva.Azüdvözlőszövegtartalmazzaa
cégre vonatkozó főbbadatokat, míg a jobboldalonmegjelenőlistalehetőségetnyújtacégnél
dolgozóalkalmazottak főbbinformációnak megtekintésére,tehátarra,hogyadott kollégamelyik
bevásárlóközpontmelyik üzletébendolgozik.Erre azértvan szükség,mertazonvendégeink,akik
online vagytelefononkeresztül kommunikáltakcégünkvalamelyalkalmazottjával,de nembiztosak
benne,hol tudnakszemélyesenkapcsoltbalépnivele,azokígykönnyebbenmegtalálják,merre
keressék.
A névre kattintva megjelenikazadottalkalmazotthoztartozó üzletközpontésüzletneve.
Ezt letesztelve(rákattintvaFeketeJuditnevére) megisjelenikavártoldal,ahonnana fenti menü
segítségével könnyenvisszanavigálhatunkafőoldalra.
A teszteléstkövetőenmegállapíthatjuk,hogymegfelelőenműködikazalkalmazásezenrésze,ezért
mosttekintsükmegamegvalósításrészleteitis.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
12
Az oldal azalábbi módonépül fel:
Egy „Üdvözlő”nevezetűHTMLrégióbantalálhatóaza HTML tartalom, ami az üdvözlőszöveget
tartalmazza.Enneka létrehozásánálnemvoltszükségsemmilyenspeciálisbeállításra,amegfelelő
szövegekmagyarrafordításátleszámítva.
Tartalmazegy Process-tis,ami a tartalom betöltéseelőtthajtódikvégre (Before Header).Ha
esetlegesennemsikerültvolnaatábláklétrehozásaa szkriptfájllal,afolyamatészrevesziezt,és
automatikusan létrehozzaa megfelelőtáblákat.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
13
A képenjól látszik,milyenesetekbenfutle mindenképpenaPL/SQLblokktáblalétrehozórésze:ha
nemléteznekmégaTEAK, UZLETEK valamintVASARLOK táblák.Egyrészleta kódból:
declare
teaktablavan number(1);
uzletektablavan number(1);
vasarloktablavan number(1);
begin
select count(*)
into teaktablavan
from user_tables
where table_name = 'TEAK';
select count(*)
into uzletektablavan
from user_tables
where table_name = 'UZLETEK';
select count(*)
into vasarloktablavan
from user_tables
where table_name = 'VASARLOK';
if teaktablavan != 1 then
execute immediate
'CREATE TABLE teak(
tea_nev VARCHAR2(30),
tipus VARCHAR2(10),
szarmazasi_hely VARCHAR2(15),
tea_ar NUMERIC(5),
szavatossag DATE,
homerseklet NUMERIC(3),
vasarolt_menny NUMERIC(6),
PRIMARY KEY(tea_nev, tipus),
CONSTRAINT forrazasi_homerseklet
CHECK ((homerseklet>=50) AND
(homerseklet<=100)),
CONSTRAINT tea_ar
CHECK((tea_ar>1000) AND
(tea_ar<10000)))';
14
Természeteseneznemelégahhoz,hogycsakakkorfussonle a PL/SQLkód, amikornemlétezneka
táblák,hiszaz ezt leellenőrző(fentebblátott) kódelsőfelemindenképplefut.Annakérdekében,
hogyaz alkalmazásmégoptimálisabbanműködjön,adjunkhozzáegyfeltételtaProcess-hez.
Mivel a feltétel típusánál beállítottuk,hogy csakisakkor fussonle a Process,ha a lentebbolvasható
feltételigazatad vissza,megoldottuk,hogyténylegesencsakakkorhozzonlétre táblákataz
alkalmazás,amikorbiztosannemléteznek.Azeztmegvalósítókód:
declare
Szam number(1);
begin
select count(*)
into Szam
from user_tables
where (table_name='TEAK') or (table_name='UZLETEK') or (table_name='VASARLOK');
if Szam = 3
then return false;
else return true;
end if;
end;
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
15
Az oldal másikfontosfunkciójaakollégáklistájának,ésanevekheztartozócímekmegjelenítse,ami
egy Drill-downsegítségével történik.
Ennekmegvalósításához egyúj WizardReportlettlétrehozva,ami azUZLETEK táblából jelenítímega
neveket.EztkövetőenamegjelenítettERTEKESITO reportmezőtmódosítvamegadtam, hogya linkre
kattintvaegyáltalamlétrehozottláthatatlan P6_ERTEK nevezető HIDDENFIELD típusú mezőnekadja
át magának az értékesítőnekanevét.
Ezt követőenlétrehoztam egyújoldalt(Üzleteinknéven),aminelkészítettemafentebbemlített
P6_ERTEK nevezetű HIDDENFIELD itemet,valamintegy WizardReportis,ahol az UZLETEK tábla
összesattribútumáthasználvamegadtamegy extrafeltételtis,ami összekapcsoljaa P6_ERTEK
mezőbentárolt névvel,éscsakaz ahhoztartozóértékeketjeleníti meg.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
16
KÍNÁLATUNK
Az alábbi – ismételtenpublikus - oldalonafelhasználónaklehetőségevanazüzletáltal kínáltteák
közötti böngészni termékkategóriákszerint,tehátteatípusonként.
Egy legördülőlistatartalmazzaaz elérhetőteatípusokat,innenkiválasztvaaszámunkramegfelelőt,a
jobboldalon megjelennekazebbe a kategóriába sorolható teák.Az <Összes> menüpontkiválasztása
eseténpediglehetőségvana raktáronlévőösszesteamegjelenítése.
Fontosfunkciójaennekazoldalnak,hogy csakisazokata teákat jeleníti meg, amelyeknek a lejárati
dátumaaz aktuálisdátumnál nagyobb,ígyelkerülve azt,hogyvalaki romlottárutvásároljon.
Az oldal működésétésfelépítéséttekintve akövetkezőképpennézki:
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
17
A kétlegfontosabbelemazoldalona„teáink”klasszikusreport és a tea típusokatmegjelenítő
P2_TEAK legördülőlista,melya létrehozásnálalapvetőbeállításokmellettakövetkező:
Annakérdekében,hogyazösszesteatípusmegjelenjen,szükségvolt egyNULLDISPLAY VALUE-rais,
amelysegítségévelmegadhatóapontoslekérdezésaklasszikusreportformon,amely ígynézki:
Az alapvetőadatoklekérésemellett(kivévetermészetesenaszavatossági dátum) leellenőrizzük,
hogymelyiktípustválasztottaki afelhasználó,valamint hogyazadott tea szavatossága régebbi-e
mint a jelenlegi dátum.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
18
SZÁRMAZÁSI HELYEK
Ezenaz oldalona felhasználónak –lévénezispublikus – lehetősége vanateákat származási helyük
alapjánlistázni.Annakérdekében,hogyegyszerre több,számáralegmegfelelőbbországkínálata
közül válogathasson,egy„checkbox”segítségével tudjabeállítani akiválasztott
országokat/területeket.
Alapesetbennemjelenikmegsemmi azoldalon(alistátleszámítva),ígyehheztartozótáblázatsem,
elkerülve azüresésértelmetlenlekérdezéseket.Viszontamintafelhasználóbekattintottaa
megfelelőmezőketésrákattintotta„Megjelenítés”gombra,megjelennekakiválasztottteákegy
listában,megyek származási helyszerintvannak sorrendbe helyezve (eznövekvővagycsökkenő
sorrendbe rendezhető).
Működéséttekintve azoldal nagyon hasonlóa fentiekbenmegismertetett„Kínálatunk”oldalhoz,az
elemekisszinte teljesmértékbenmegegyeznek.Természetesenjelenesetbenisfigyelünkarra,hogy
csakis friss ésfinomteákat jelenítsünkmeg,tehátolyanokat,amikmégnemjártakle.
Lévénaz oldal felépítéseazelemektípusátleszámítva hasonlóazelőzőével (leszámítvaaztazextra
gombot,ami csak a „Küldés”funkciótvalósítjameg),ígyehheznemszükségesképetcsatolni,viszont
fontostisztázni,mikisazokazapró különbségek.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
19
A legördülőlistahelyétátvette egy „checkbox”,melyenazalapvetőbeállításoknemlettek
módosítva.Az értékeket– hasonlóanminta legördülőlistánál - akövetkező lekérdezésadjaátneki:
SELECT DISTINCT SZARMAZASI_HELY a, SZARMAZASI_HELY b FROM TEAK ORDER BY 1
A megjelenő klasszikusreportlekérdezésemárkicsitkomplexebb(abeállításokmegegyezneka
fentebbképpel dokumentáltreportéra),hiszfigyelnünkkell arraaz esetre is,amikor többelemlett
kiválasztvaalistában:
select TEAK.TEA_NEV as TEA_NEV,
TEAK.TIPUS as TIPUS,
TEAK.SZARMAZASI_HELY as SZARMAZASI_HELY,
TEAK.HOMERSEKLET as HOMERSEKLET,
TEAK.TEA_AR as TEA_AR
from TEAK TEAK
where (INSTR(:P3_SZARMAZ, "TEAK"."SZARMAZASI_HELY") > 0) and
(teak.szavatossag > sysdate)
Fontosmégbeállítanunk,hogycsakabbanaz esetbenjelenjenmegmagaa tábla, hogy ha ki lett
választva egy teatípus.Ezt a következőképpentehetjükmeg:
Ebbenaz esetben csakisakkorfogmegjelenni táblázatajobboldalon,haki lettválasztvavalami a
teatípusokközül.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
20
ÁTLAG ÉRTÉK
Ez az oldal már csak az üzletvezetők(tehátazUZLETVEZETO csoportba tartozófelhasználók) és
adminisztrátorok számáraérhetőcsakel.Egyrádiógomb csoportsegítségével ki lehetválasztani,
melyik teatípusravonatkozóstatisztikára vagyunkkíváncsiak,ésazalkalmazásmegjeleníti az
eredménytegy szövegdobozban.
A lekérdezés akiválasztottteatípusteáinak árából számol átlagot, és eztjeleníti megafelhasználó
számára,természetesencsakabbanaz esetben,haki lettválasztvavalami.A gombokközötti
váltogatástermészetesen dinamikus,ésamegjelenítetteredményismaximumcsakkéttizedes
jegyigjeleníti megazértékeket.
Az oldal felépítéseakövetkező:
A kétrégióelégegyértelmű:a„Típusválasztó”fogjatartalmazni arádiógombokat,míg az „Átlagos
érték (100 grammra)” oldal a számolásvégeredményét.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
21
A P5_TIPUS rádió gomb elemeitfeltöltőlekérdezésnagyonegyszerű,hasonló,mintazelőzőek
voltak:
SELECT DISTINCT TIPUS a, TIPUS b FROM TEAK ORDER BY 1
A P5_LAP textfieldcsak az eredménymegjelenítéséértfelel,se számolást,se műveletet,se
lekérdezéstnemtartalmaz.
Vanviszontegyszámolástvégző„Computation”,amelyaz„AfterHeader” szekcióbanfuttatjale az
alábbi lekérdezést(SQLQuery – returnsingle value):
SELECT ROUND(AVG(TEAK.TEA_AR),2
FROM TEAK TEAK
WHERE TEAK.TIPUS = :P5_TIPUS
Ez felel akiválasztottteatípusravonatkozószámolásokelvégzéséért,ésmindenesetbenlefut,amint
változtatástörténta rádiógombokközött.
PARANCSSOR
Ez az oldal kizárólagcsak az ADMINISZTRATOR csoportbatartozófelhasználókszámáraérhetőel,
meggátolvaazt,hogya hozzá nemértőüzletvezetőkvagyegyszerűfelhasználók módosíthassákaz
oldal gerincétalkotóadatbázistésazahhoztartozótáblákat.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
22
Itt az adminisztrátornaklehetősége vanazalkalmazás tábláinakmegjelenítésére,valamintsajátSQL
lekérdezésekírására,melynekeredménye megisjelenikazoldalon.
Ha csak egyszerűenmegszeretne nézniegytáblát,akkorazoldal aljánlévőlistábólkiválasztvaa
megfelelőt,majda„Megjelenítés”gombrakattintvamegjelenikakívántadattábla.
Az oldal tetejéntalálható„Utasítás”szövegmezőbe tetszőlegesSQLutasításírható (valamint
futtathatóis),melyneksikerérőlvagysikertelenségérőltájékoztatazalkalmazás.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
23
Természetesenlehetőség vanlekérdezéseketisírni a parancssorba,nézzükmegpéldául ezt:
Ebből islátszik,miértszükséges,hogycsakazadminisztrátorokférjenekhozzáehhezazoldalhoz,
hiszenittnagyonnagymértékbenbefolyásolnilehetazeladásokat, raktáradatokat,stb.
Az oldal felépítésekomplikáltabb,mintaztelőzőlegláthattuk,azalábbi képenláthatóakazokaz
elemek,amikafenti funkciókmegvalósításáértfelelősek.
A „Lehetőségek” és„Táblák” HTML tartományokegyértelműek,ezektartalmazzákaz oldalon
megjelenítettelemeket.
Vanaz oldalonháromgombis:„Futtat”, „Törlés” és„Megjelenítés”
Az elsőkettő felelősamegfelelőProcessvégrehajtásáért,aharmadikpedigakiválasztotttábla
megjelenítéséért(egyegyszerű Submitonkeresztül).
A P7_PARANCS ésP7_EREDMENY szövegmezőkfunkciójátfentebbmárláthattuk:azelsőbe lehet
beleírni azSQL utasítást,amelynekkimeneteléről a P7_EREDMENY mezőbe érkezikaválasz.
A P7_REJTETT mezőfunkciójaazadatokátadása, enneksegítségével tudjukvégrehajtani abeírt
utasításokat.
A P7_TABLANEV legördülőlistatartalmazzaazalkalmazásbanelérhetőadattáblákat,enneka
funkciónakaműködéséhezszükségesSQLlekérdezéspedigakövetkező:
SELECT table_name a, table_name b
FROM user_tables
WHERE (table_name not like 'APEX$%') and
(table_name not like 'DEMO%')
ORDER BY 1
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
24
Természeteseneznemelégahhoz,hogyműködőképeslegyenaparancssor, szükségünkleszmégkét
Reportra, valamint két Processre is.
Az „Eredmény” klasszikus reportalapbeállításainsemmi sincsváltoztatva,aforrásapedigegy
egyszerűSQLkód:
BEGIN
RETURN :P7_PARANCS;
END;
Ez annyitjelent,hogyittfogmegjelenni a P7_PARANCSmezőbe írt lekérdezés eredménye.Viszont
arra vigyáznunkkell,hogycsakabbanaz esetbenjelenjenmegbármi is,haaz adminisztrátor SELECT
utasítást használt,egyébesetbencsakvégre kell hajtanunkakódot.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
25
Erre segítségül szolgál aVEGREHAJTProcess, amelyabbanaz esetbenfutle,hameglettnyomvaa
„Futtat” gomb.Az ezt végrehajtóutasításakövetkező(ésittláthatjukmiértisvanszükségarejtett
mezőnkre):
BEGIN
:P7_EREDMENY := '';
:P7_REJTETT := UPPER(SUBSTR(:P7_PARANCS,1,6));
EXECUTE IMMEDIATE :P7_PARANCS;
IF :P7_REJTETT != 'SELECT'
THEN
:P7_EREDMENY := 'Végrehajtva. '||SQL%ROWCOUNT||' sor került módosításra';
ELSE
:P7_EREDMENY :='Végrehajtva.';
END IF;
EXCEPTION
WHEN OTHERS
THEN
IF SUBSTR(SQLERRM,1,9)='ORA-06535'
THEN
:P7_EREDMENY := 'Nincs utasítás!';
ELSE
:P7_EREDMENY := 'Hiba történt! Kód: '||SQLERRM;
END IF;
:P7_REJTETT := 'HIBA';
END;
A „TORLO” Processazért felel,hogyhaafelhasználómegnyomtaa„Törlés”gombot, eltüntesse az
eddigmegjelenítettüzeneteket,táblákat valamintabeírtutasítást a parancsmezőből:
begin
:P7_PARANCS := '';
:P7_REJTETT := '';
:P7_EREDMENY := 'Utasításmező törölve!';
end;
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
26
RAKTÁR
Az alábbi oldal ismét csakaz üzletvezetők(ésazadminisztrátor) számáraérhetőel,hiszenittlehet
megnézni a raktáron lévőteákat, módosítani azokat,valamintújteát felvinni.
Az oldal többfontosfunkciótisellát,például ittlehet leltározásutánmegadni, mennyitvásároltak
egy adott teából.A tea nevére kattintvamegjelennekadatai,melyekmódosíthatóakamegfelelő
szabályokbetartásamellett(arendszerpéldául nemengedolyanteákatbevinni arendszerbe,
melyekmárlejártak,ígya dátummindigcsakaz adottnaptól kezdődőnapokatlistázza).
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
27
Új tea felvitelénél azoldal természetesen leellenőrzi,hogymindenfontosadatmeglett-e adva,addig
nemengedélyezi arekordelmentését,amígmindenkötelezőmezőadatanincsmeg.
Fontosmegjegyezni,hogyamódosító/ új teahozzáadásaoldalona típus ésszármazási hely egy
legördülőlistává lettalakítva, melyből azüzletvezetőkiválaszthatjaamegfelelőértéket,ígykerülve
el az esetlegeselírásbóladódóhibákat.
Mivel ezegy interaktív report,ezértaz összesehheztartozófunkcióelérhető.Mivel azeszköztár
kínáltalehetőségekszéleskörűek,ezeketjelendokumentumbannemprezentálom, leírásuk
megtalálhatótöbbekközöttahivatalosdokumentációbanis.
Megvalósításaegy interaktívreport létrehozásával történt,ahol a TEAK tábla ésaz alapvető
beállításokkiválasztásautánazalkalmazásautomatikusalétrehoztaazoldalakat,azahhoztartozó
elemeketvalamintfolyamatokat,ígymárcsak ezekmagyarítása,szépítése maradthátra.
Módosítva lettviszontaTIPUS ésSZARMAZASI_HELY elemektípusa,hogylegördülőlistaként
jelenjenekmeg.
És a tartalmukatfeltöltőSQLlekérdezéspedig:
SELECT DISTINCT tipus a, tipus b FROM teak ORDER BY 1
valamint
SELECT DISTINCT szarmazasi_hely a, szarmazasi_hely b FROM teak ORDER BY 1
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
28
VÁSÁRLÓK
A vásárlókkezelését,valamintavásárlásoklebonyolításátsegítőoldal megjeleníti egytabulátor
nézetbenavásárlókatésa hozzájuktartozóadatokat.
Mivel ezaz oldal iscsak UZLETVEZETOK ésADMINISZTRATOROK számáraelérhető,ígyegyszerű
felhasználónemláthatja,tehátnemismanipulálhatjaezenadatokat.
Az oldalonbelüllehetőségvan egyszerre többadat módosítására és felviteléreis,ígymegkönnyítve
a forgalmasidőszakokbanazadat-,ésfelhasználókezelést.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
29
Az oldal megvalósításáttekintve egy„TabulatorForm”, melyenamegfelelőkulcsokkiválasztása
mellettmagyarosítvalettekamegfelelőüzenetek,valamintafentebbislátottautentikációklétre
lettekhozva.
Természetesenfontos,hogyatabulátorlétrehozásakormindenképpen ROWIDalapjánazonosítsuka
sorokat,különbenazadatmódosításvalamintadatbevitel problémáslehet.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
30
TEA SZÁMLÁLÓ
Az utolsóoldal - aminekeléréséhezafentiekbenisemlítettjogosultságokszükségesek -,
megszámoljaésmegjeleníti araktáron lévőteák típusai alapján, hogymelyikből hánykülönböző
termékkaphatójelenleg.
Itt természeteseninterakcióranincsszükség,hiszenezcsakegystatikusoldal,melyazadatok
megjelenítéséreszolgál.
Működéséttekintve azoldal ígynézki:
Találhatóbenne egyrégió,ittfognakmegjelenni azadatok,emellettpedigegyrejtettmező
(P25_TIPUS),amelybe bekerülazösszesteánakatípusa (kettősponttalelválasztva) egystringként.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
31
A P25_EREDMENY felel aműveletelvégzéséértésmegjelenítéséért,melyhezegy külsőDLL könyvtár
segítségét(melynekbemásolásáról éselhelyezéséről abevezetőbenolvashattunk) használja.
A DLL könyvtárVisual Studio2012-benlétrehozva,éscsakazalábbi egyszerűkódottartalmazza:
public static string TeaTipus(string bemenet)
{
string[] tomb = bemenet.Split(':');
int voros = 0;
int fekete = 0;
int feher = 0;
int gyumolcs = 0;
int rooibos = 0;
int zold = 0;
for (int i = 0; i < tomb.Length; i++)
{
switch (tomb[i])
{
case "Fekete": fekete++; break;
case "Fehér": feher++; break;
case "Gyümölcs": gyumolcs++; break;
case "Rooibos": rooibos++; break;
case "Vörös": voros++; break;
case "Zöld": zold++; break;
}
}
return (string.Format("Fekete: {0}db, Fehér: {1}db, Gyümölcs: {2}db,
Rooibos: {3}db, Vörös: {4}db, Zöld: {5}db", fekete, feher, gyumolcs, rooibos, voros,
zold));
}
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
32
JOGOSULTSÁGI ADATOK
Az alkalmazásjogosultságaiért,felhasználóiértvalamintacsoportoklétrehozásáértfelelősszkript
futtatásáta bevezetőbenolvashattuk(users.sql),ígyennekrészletezéséreittnincsszükség.
Az alkalmazásakövetkezőfelhasználói csoportokkal rendelkezik
 UZLETVEZETO
 ADMINISZTRATOR
Az alkalmazásakövetkezőfelhasználókkalrendelkezik:
 scott (jelszava: tiger) – az ADMINISZTRATOR csoport tagja
 uzlet (jelszava: vezeto) – az UZLETVEZETO csoport tagja
A csoportokáltal elérhetőoldalak:
 Publikus felhasználók:
o Főoldal
o Kínálatunk
o Származási helyek
o Üzletek
 UZLETVEZETO felhasználók:
o Minden, amit a publikus is
o Átlag érték
o Vásárlóink
o Raktár
o Tea számláló
 ADMINISZTRATOR felhasználók:
o Minden, amit a publikus és UZLETVEZETO is
o Paranccsor
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
33
TESZTFUTÁSOK
A fentebbi részletesútmutatótartalmaztaazösszesfőbbfunkcióbemutatását, alehetséges
teszteseteket, ígyerre különittnemtérünkki.
Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI
34
IRODALOMJEGYZÉK
 Kende Mária– NagyIstván:Oracle példatár- SQL,PL/SQL
 Kende Mária– NagyIstván:Internetesadatbázis-alkalmazásokfejlesztése
(Oracle ApplicationExpress) 1.rész
 Kende Mária– NagyIstván:Internetes adatbázis-alkalmazásokfejlesztése
(Oracle ApplicationExpress) 2.rész
 Kende Mária– NagyIstván:Internetesadatbázis-alkalmazásokfejlesztése
(Oracle ApplicationExpress) 3.rész
i. Az idézet KendeMária –Nagy István: Internetes adatbázis-alkalmazások fejlesztése (Oracle ApplicationExpress) 1. rész
dokumentumból származik

More Related Content

Viewers also liked

Projetos aprovados no Funcultura 2015-2016
Projetos aprovados no Funcultura 2015-2016Projetos aprovados no Funcultura 2015-2016
Projetos aprovados no Funcultura 2015-2016Jornal do Commercio
 
クモ型ロボットにおける逆運動学計算
クモ型ロボットにおける逆運動学計算クモ型ロボットにおける逆運動学計算
クモ型ロボットにおける逆運動学計算Teng Tokoro
 
PMT-001-中鋼公司生產管理實務經驗分享
PMT-001-中鋼公司生產管理實務經驗分享PMT-001-中鋼公司生產管理實務經驗分享
PMT-001-中鋼公司生產管理實務經驗分享handbook
 
LEÇON 51 ~ La révision d’aujourd’hui couvre les idées des leçons 1 à 5.
LEÇON 51 ~ La révision d’aujourd’hui couvre les idées des leçons 1 à 5.LEÇON 51 ~ La révision d’aujourd’hui couvre les idées des leçons 1 à 5.
LEÇON 51 ~ La révision d’aujourd’hui couvre les idées des leçons 1 à 5.Pierrot Caron
 

Viewers also liked (9)

2015.11.10店東會議(人才發展 和你想的不一樣)
2015.11.10店東會議(人才發展 和你想的不一樣)2015.11.10店東會議(人才發展 和你想的不一樣)
2015.11.10店東會議(人才發展 和你想的不一樣)
 
Persiapan ramadhan
Persiapan ramadhanPersiapan ramadhan
Persiapan ramadhan
 
Apresentação Simepe
Apresentação SimepeApresentação Simepe
Apresentação Simepe
 
Projetos aprovados no Funcultura 2015-2016
Projetos aprovados no Funcultura 2015-2016Projetos aprovados no Funcultura 2015-2016
Projetos aprovados no Funcultura 2015-2016
 
クモ型ロボットにおける逆運動学計算
クモ型ロボットにおける逆運動学計算クモ型ロボットにおける逆運動学計算
クモ型ロボットにおける逆運動学計算
 
PMT-001-中鋼公司生產管理實務經驗分享
PMT-001-中鋼公司生產管理實務經驗分享PMT-001-中鋼公司生產管理實務經驗分享
PMT-001-中鋼公司生產管理實務經驗分享
 
Sequencia DIDATICA - PARTINDO DE UM CONTEÚDO
Sequencia DIDATICA - PARTINDO DE UM CONTEÚDOSequencia DIDATICA - PARTINDO DE UM CONTEÚDO
Sequencia DIDATICA - PARTINDO DE UM CONTEÚDO
 
LEÇON 51 ~ La révision d’aujourd’hui couvre les idées des leçons 1 à 5.
LEÇON 51 ~ La révision d’aujourd’hui couvre les idées des leçons 1 à 5.LEÇON 51 ~ La révision d’aujourd’hui couvre les idées des leçons 1 à 5.
LEÇON 51 ~ La révision d’aujourd’hui couvre les idées des leçons 1 à 5.
 
Note comites techniques
Note comites techniquesNote comites techniques
Note comites techniques
 

Féléves feladat dokumentáció

  • 1. 0 ADATBÁZIS HASZNÁLAT II. Féléves feladat Kocsis Tamás Zsolt MQ1LGI ÓE-NIK Teabolt alkalmazás
  • 2. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 1 Tartalomjegyzék TÁROLANDÓ ADATOK ....................................................................................................................2 MEGSZORÍTÁSOK...........................................................................................................................2 NORMALIZÁLÁS.............................................................................................................................3 ALKALMAZÁSI KÖRNYEZET..............................................................................................................5 TÁBLÁK ÉS FELHASZNÁLÓK LÉTREHOZÁSA...................................................................................6 ADATOK FELTÖLTÉSE..................................................................................................................6 ALKALMAZÁS BETÖLTÉSE............................................................................................................8 DLL KÖNYVTÁR BETÖLTÉSE.........................................................................................................8 ALKALMAZÁS BEMUTATÁSA, TESZTELÉSE ÉS LÉTREHOZÁSÁNAK FOLYAMATA....................................9 ALKALMAZÁS.............................................................................................................................9 FŐOLDAL.................................................................................................................................11 KÍNÁLATUNK............................................................................................................................16 SZÁRMAZÁSI HELYEK................................................................................................................18 ÁTLAG ÉRTÉK ...........................................................................................................................20 PARANCSSOR...........................................................................................................................21 RAKTÁR...................................................................................................................................26 VÁSÁRLÓK...............................................................................................................................28 TEA SZÁMLÁLÓ........................................................................................................................30 JOGOSULTSÁGI ADATOK...............................................................................................................32 TESZTFUTÁSOK............................................................................................................................33 IRODALOMJEGYZÉK......................................................................................................................34
  • 3. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 2 TÁROLANDÓ ADATOK  TEA_NEV: Meghatározza az árusított tea nevét (a származási hely elhagyásával), mely a piaci követelményeknek megfelelően minden esetben teljesen egyedi.  SZARMAZASI_HELY: Meghatározza az adott tea termőterületét, tehát azt az országot, ahol feldolgozták (a tea neve szinte minden esetben tartalmazza a helység nevét is).  TIPUS: Az adott tea feldolgozási módjától függően meghatározza annak típusát.  TEA_AR: Az az összeg forintban megadva, amelyen értékesítésre kerül a tea.  SZAVATOSSAG: Az a dátum, amelytől kezdve a tea fogyasztása nem javasolt,  HOMERSEKLET: A vízhőmérséklet Celsius fokban megadva, melyen az adott teát forrázni javasolt.  VASAROLT_MENNY: Az adott teából eddig összesen eladott mennyiség grammban kifejezve.  UZLETVEZETŐ: Az adott üzletben felelős alkalmazott, ki a teák árusításáért, az üzlet vezetéséért felel.  UZLET_NEV: Az adott üzlethelyiség neve.  UZLET_CÍME: Az adott üzletközpont neve, amelyben az üzlethelység található.  VASARLO_NEV: A nyilvántartásba vett vásárló teljes neve.  EMAIL_CIM: A vásárló által megadott egyedi e-mail cím.  MENNYISEG: A vásárló által összesen vásárolt teák mennyisége grammban kifejezve.  BEVETEL: A vásárló által összesen teákra kifizetett összeg forintban kifejezve. MEGSZORÍTÁSOK  A forrázási hőmérséklet a teák fajtájából adódóan csak 50 C° és 100 C° között lehet.  A világon csak meghatározott számú tea típus létezik, ezek: Fekete, Fehér, Gyümölcs, Rooibos, Zöld, Vörös  A tea árát nem lehet 1000Ft-nál kevesebb és 10000Ft-nál több.
  • 4. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 3 NORMALIZÁLÁS 1. Ősmodell relációsémája a tárolandó attribútumokkal teabolt< TEA_NEV,SZARMAZASI_HELY,TIPUS,TEA_AR, SZAVATOSSAG,HOMERSEKLET, VASAROLT_MENY,UZLETVEZETO, UZLET_NEV, UZLET_CIM, VASARLO_NEV, EMAIL_CIM, MENNYISEG, BEVETEL > 2. Függőségek felismerése a. Magát a teát (ebből adódóanazüzletetis,ami forgalmazza) egyértelműen meghatározzaa neve ésannaktípusa tehát: ftea = { TEA_NEV,TIPUS }  { SZARMAZASI_HELY,TEA_AR, SZAVATOSSAG, HOMERSEKLET, VASAROLT_MENNY, UZLET_NEV, UZLET_CIM, UZLETVEZETO } b. Egyértelműenbelátható,hogyazüzletvezetőtegyértelműenmeghatározzaaz üzletközpontneve,de mivel együzletközpontbantöbbteaszaküzletistalálható,így az azonosításhozszükségesmégazüzlethelyiségneve is,így: füzletek = { UZLET_NEV, UZLET_CIM }  { UZLETVEZETO } c. Egy vásárlóttermészetesenegyértelműenmeghatározzaésazonosítjaaneve ése- mail címe,ebből adódóan: fvasarlo = { VASARLO_NEV,EMAIL_CIM}  { MENNYISEG, BEVETEL } 3. Függőségek normalizálása a. Az ftea függőségvizsgálata 1NF: az ftea 1NF-benvan,mivel nincsbenne összetett attribútum. 2NF: az ftea egyértelműennincs2NF-ben,mivel amásodlagos attribútumai között van olyan, ami nemfüggaz elsődlegesattribútumokmindegyikétől. Ha az ftea -ból kivesszükaz füzletek -et,akkor: ftea1 = { TEA_NEV,TIPUS }  { SZARMAZASI_HELY,TEA_AR, SZAVATOSSAG, HOMERSEKLET, VASAROLT_MENNY} 3NF: 3NF-benisvan,lévénnincssemmilyenfüggőségamásodlagos attribútumokközött. BCNF: mivel 3NF-benvanazftea2, és baloldalának egyetlenvalódi részhalmazase függelsődlegessemmásodlagosattribútumtól,ígyezBCNF-benvan.
  • 5. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 4 b. Az füzletek függőségvizsgálata 1NF: az füzletek 1NF-benvan,mivel nincsbenne összetettattribútum. 2NF: az füzletek 2NF-benvan,lévénnincsolyanmásodlagosattribútuma,amelyne függene az elsődlegesattribútumokmindegyikétől. 3NF: az füzletek 3NF-benisvannak,lévénnincssemmilyenfüggőségamásodlagos attribútumokközött. BCNF: mivel 3NF-benvanazfüzletek, és baloldalánakegyetlenattribútumavancsak, így ezBCNF-benisvan. c. Az fvasarlofüggőségvizsgálata 1NF: az fvasarlo 1NF-benvan,mivel nincsbenne összetettattribútum. 2NF: az fvasarlo 2NF-benvan,lévénnincsolyanmásodlagosattribútuma,amelyne függene azelsődlegesattribútumokmindegyikétől. 3NF: az fvasarlo 3NF-benisvannak,nincssemmilyenfüggőségamásodlagos attribútumokközött. BCNF: mivel 3NF-benvanazfvasarlo, ésbaloldalánakegyetlenattribútumavancsak, így ezBCNF-benisvan. 4. Függőségek összefoglalása ftea2 = { TEA_NEV,TIPUS }  { SZARMAZASI_HELY,TEA_AR, SZAVATOSSAG, HOMERSEKLET, VASAROLT_MENNY} füzletek = { UZLET_NEV, UZLET_CIM }  { UZLETVEZETO } fvasarlo = { VASARLO_NEV,EMAIL_CIM}  { MENNYISEG, BEVETEL } 5. Az eredmény adatmodell teak < TEA_NEV,TIPUS,SZARMAZASI_HELY, TEA_AR, SZAVATOSSAG,HOMERSEKLET, VASAROLTMENNY > uzletek< UZLET_ NEV,UZLET_CIM, UZLETVEZETO > vasarlok < VASARLO_NEV, EMAIL_CIM, MENNYISEG, BEVETEL >
  • 6. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 5 ALKALMAZÁSI KÖRNYEZET A félévesfeladataz Oracle ApplicationExpress fejlesztői környezetsegítségévelkészült,mely természetesenazOracle adatbázisrendszerére épül.Először2006-banjelentmegezenanéven, azóta pedigmára 4.2.3-as verziónál tarta fejlesztése.NagyIstvánjellemzésearendszerről mindent elmondarról,hogymiértisérdemeshasználni: „Az Application Express(APEX) azOracleadatbáziskezelő rendszerPL/SQLnyelvikörnyezetébe ágyazottwebeseszközkészletre(Web-Toolkit) épülő,úgynevezettvékony-kliensű (webes) alkalmazásokfejlesztéséreszolgáló,azOracleprofesszionális(pénzértmegvásárolható) adatbázis- motorjátkiegészítő,deönmagában ingyenesen letölthető alkalmazásfejlesztő eszköz.Ekét eszköz (tehátazOracle adatbázis-motorésazAPEX) felhasználásábólazOracle cég létrehozottegy ingyenes,web-esadatbázis-alkalmazásoklétrehozására isalkalmasfejlesztő eszköztExpressEdition (XE) néven.AzXE bizonyos(alapvetően azerőforrásokméretérevonatkozó) korlátozásokon túl teljes értékű web-esadatbázis-alkalmazásoklétrehozására alkalmas.AzXE-ben a web-esalkalmazások létrehozására szolgáló (azAPEX-szelekvivalens)komponensneveApplication Builder.”i A fentieketfigyelembevéve lássukis,milyenelőkészületekre vanszükségünk,hogyazalkalmazásunk működőképeslegyen.Ehhez biztosítvavankettődarab szkriptfájl,amely létrehozzarendszerbena táblákat,hozzáadjaa megfelelőmegszorításokat,valamintlétrehozzaafelhasználókatés csoportokat, hogytesztelhetőlegyenarendszer.Létezikvalaminthárom darab.txtkiterjesztésűfájl, melyekezeketatáblákatfeltöltikadatokkal. Előszöris jelentkezzünkbe azAPEXrendszerbe azadminisztrátorfelhasználóval (haatelepítési útmutatónakmegfelelőenletttelepítvearendszer,akkorezalapesetben:MAGYAR/Tigris-1)!
  • 7. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 6 TÁBLÁK ÉS FELHASZNÁLÓK LÉTREHOZÁSA Lépjünkbe az SQL Workshopba,majdezt követőenaz SQL Scriptsbe,ahol jelenlegmégcsakegyüres listajelenikmeg.Azüreslistatetején,jobboldalonkattintsunkaz UploadScript gombra,majd a megjelenőablakbanválasszukki a „TablaLetre.sql” scriptet(aDVDmellékletene /Scriptek/ mappábantalálható),majdnyomjukmegaz Uploadgombot. Ismételjükmega „users.sql”scriptel isugyanezt(aDVDmellékletene /Scriptek/mappában található). A megjelenőlistábanmostmárott vana kétdarab szükségesfájl,márcsak le kell őketegymásután futtatni,szóval kattintsukaRunfejlécalattlévőlejátszásgombra,majdazújonnanmegnyíló ablakbana Run Now gombra. Ismételjükeztmegamásikscriptnél is. Ha mindenrendbenment,létrejöttekatábláink ésafelhasználóink,valamintafelhasználói csoportokis,eztle is lehetellenőrizni,harákattintunk aViewResultsalatta dokumentumikonra. ADATOK FELTÖLTÉSE Az újonnanlétrejötttáblákat fel kell tölteni, ehhezmenjünkvisszaaz SQL Workshopnyitóoldalára, majdválasszukki a Utilitiesmenüpontot.Ittamásodikikonon,a Data Workshoponbelül,aLoad Data ablak Text Data hivatkozásárakell kattintanunk.A megjelenőoldalonválasszukki a Load to: ExistingTable-t,majdkattintsunkatovábbra.
  • 8. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 7 A következőlépésamegfelelőtáblakiválasztása,tehátazé atábláé,ahovaaz adatokat feltölteni szeretnénk. Mivel háromtáblajöttlétre a szkriptlefuttatásaután,ezértazegészprocedúrát háromszor meg kell ismételni. Elsőkörbenválasszukki alegördülőlistából a TEAK táblát,majdaz ezt követőalkalmakkal aVASARLOKésaz UZLETEK táblát. Ha ez sikerült,akövetkezőablakbanmegkelladni afeltöltendőadatokattartalmazó .txtfájl elérési útját(alaphelyzetbenaDVDmelléklet/Data/könyvtárábantalálhatóak,elnevezésükmegegyezika hozzátartozó táblanevével). Miután ezzel végeztünk,márcsak annyi a teendőnk,hogyazutolsóablakbanleellenőrizzük,hogy mindenhelyesenlett-e megadva,majdrákattintunkaLoad gombra. Ne felejtsükel,hogyezta procedúrátösszesen háromszorvégigkell csinálni, hogymindenadattáblaértéketkapjon.
  • 9. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 8 ALKALMAZÁS BETÖLTÉSE Nemmaradt máshátra, már csak importálni kell magátazalkalmazást.Ehhezmenjünk az ApplicationBuildermenüpontra,ahol aközépenmegjelenőmenüsávonkattintsunkaz Import gombra. A megjelenőablakbanválasszukki azalkalmazásttartalmazó.sqlfájlt(aDVDmellékletenaz /Alkalmazás/mappábantalálható „f104.sql” fájlt),majdimportáljukbe éstelepítsükfel.Haez sikeresvolt,akkormegjelenikaRun Applicationgomb,kattintsunkráerre. DLL KÖNYVTÁR BETÖLTÉSE Az oldal megfelelő működéseérdekébenszükséglesznéhányapróutasításésmódosításelvégzésére. Előszöris adjuk hozzáa megfelelőjogosultságokataz SQLDEVELOPER alkalmazásSYSTEMoldalán: GRANT CREATE ANY LIBRARY, EXECUTE ANY TYPE, EXECUTE ANY PROCEDURE, DROP ANY LIBRARY, DROP ANY TYPE, DROP ANY PROCEDURE TO SEMA1; Ezt követőenmásoljuka„TeaTipus.dll” valamint„TeaTipus.exp” fájlokat(aDVDmelléklet/DLL/ mappájábantalálhatóak) azalábbi helyre: alkalmazás helyeOracleproduct11.2.0dbhome_1BIN például: C:appOracleproduct11.2.0dbhome_1BIN Ha ezzel végeztünk,indítsukel az ApplicationExpresstéskattintsunkaz SQL Workshopmenünbelül az SQL Commandsgombra, majdírjuk be az alábbi kétutasítást: CREATE OR REPLACE LIBRARY TeaShopLIB AS 'C:oracleproduct11.2.0dbhome_1BINTeaTipus.dll'; CREATE OR REPLACE FUNCTION TeaTipus (bemenet in varchar2) RETURN varchar2 AS EXTERNAL LIBRARY TeaShopLIB NAME "TeaTipus" LANGUAGE C PARAMETERS (bemenet string); Kattintsunkafuttatás gombra,és ha mindenjól ment,sikeresenvégeztünkazalkalmazás előkészítésével.
  • 10. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 9 ALKALMAZÁS BEMUTATÁSA, TESZTELÉSE ÉS LÉTREHOZÁSÁNAK FOLYAMATA ALKALMAZÁS Az alkalmazáslétrehozásánál –az alapvetőbeállításoktól eltekintve–be lettállítvaa magyar dátum formátum,valamintazauthorizációssémákis,ajövőbelifelhasználókezelésmegvalósítása érdekében. Az alkalmazásnyelve természetesenmagyar,amegjelenődátumformátumamegegyezikaz országbanhasználtáltalánosdátum formátummal. A felhasználók(pontosabbanfelhasználói csoportok) kezelésérekétsémalettlétrehozva:egy ADMIN ésegy UZLETVEZETO séma.
  • 11. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 10 Az ADMINsémát megvalósítóSQLlekérdezésakövetkező: Az UZLETVEZETO séma hasonlóannézki: Ez azért különbözikaz ADMINsémától,hogymegvalósíthatólegyenegyhierarchikusjogosultsági rendszer,ami annyitjelent,hogyaz ADMINISZTRATOR csoportbatartozó felhasználókelérhetikaz oldal összesfunkcióját,az UZLETVEZETO csoportbatartozó felhasználókazoldalnakcsakbizonyos funkcióit,míga publikusfelhasználókazoldalnakcsakegymégkisebbrészétláthassák.
  • 12. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 11 FŐOLDAL Az alkalmazáselindításátkövetőenakövetkezőfogadjaafelhasználót: Ez az oldal mindenvendégszámáraelérhető, nincsenautentikálva.Azüdvözlőszövegtartalmazzaa cégre vonatkozó főbbadatokat, míg a jobboldalonmegjelenőlistalehetőségetnyújtacégnél dolgozóalkalmazottak főbbinformációnak megtekintésére,tehátarra,hogyadott kollégamelyik bevásárlóközpontmelyik üzletébendolgozik.Erre azértvan szükség,mertazonvendégeink,akik online vagytelefononkeresztül kommunikáltakcégünkvalamelyalkalmazottjával,de nembiztosak benne,hol tudnakszemélyesenkapcsoltbalépnivele,azokígykönnyebbenmegtalálják,merre keressék. A névre kattintva megjelenikazadottalkalmazotthoztartozó üzletközpontésüzletneve. Ezt letesztelve(rákattintvaFeketeJuditnevére) megisjelenikavártoldal,ahonnana fenti menü segítségével könnyenvisszanavigálhatunkafőoldalra. A teszteléstkövetőenmegállapíthatjuk,hogymegfelelőenműködikazalkalmazásezenrésze,ezért mosttekintsükmegamegvalósításrészleteitis.
  • 13. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 12 Az oldal azalábbi módonépül fel: Egy „Üdvözlő”nevezetűHTMLrégióbantalálhatóaza HTML tartalom, ami az üdvözlőszöveget tartalmazza.Enneka létrehozásánálnemvoltszükségsemmilyenspeciálisbeállításra,amegfelelő szövegekmagyarrafordításátleszámítva. Tartalmazegy Process-tis,ami a tartalom betöltéseelőtthajtódikvégre (Before Header).Ha esetlegesennemsikerültvolnaatábláklétrehozásaa szkriptfájllal,afolyamatészrevesziezt,és automatikusan létrehozzaa megfelelőtáblákat.
  • 14. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 13 A képenjól látszik,milyenesetekbenfutle mindenképpenaPL/SQLblokktáblalétrehozórésze:ha nemléteznekmégaTEAK, UZLETEK valamintVASARLOK táblák.Egyrészleta kódból: declare teaktablavan number(1); uzletektablavan number(1); vasarloktablavan number(1); begin select count(*) into teaktablavan from user_tables where table_name = 'TEAK'; select count(*) into uzletektablavan from user_tables where table_name = 'UZLETEK'; select count(*) into vasarloktablavan from user_tables where table_name = 'VASARLOK'; if teaktablavan != 1 then execute immediate 'CREATE TABLE teak( tea_nev VARCHAR2(30), tipus VARCHAR2(10), szarmazasi_hely VARCHAR2(15), tea_ar NUMERIC(5), szavatossag DATE, homerseklet NUMERIC(3), vasarolt_menny NUMERIC(6), PRIMARY KEY(tea_nev, tipus), CONSTRAINT forrazasi_homerseklet CHECK ((homerseklet>=50) AND (homerseklet<=100)), CONSTRAINT tea_ar CHECK((tea_ar>1000) AND (tea_ar<10000)))';
  • 15. 14 Természeteseneznemelégahhoz,hogycsakakkorfussonle a PL/SQLkód, amikornemlétezneka táblák,hiszaz ezt leellenőrző(fentebblátott) kódelsőfelemindenképplefut.Annakérdekében, hogyaz alkalmazásmégoptimálisabbanműködjön,adjunkhozzáegyfeltételtaProcess-hez. Mivel a feltétel típusánál beállítottuk,hogy csakisakkor fussonle a Process,ha a lentebbolvasható feltételigazatad vissza,megoldottuk,hogyténylegesencsakakkorhozzonlétre táblákataz alkalmazás,amikorbiztosannemléteznek.Azeztmegvalósítókód: declare Szam number(1); begin select count(*) into Szam from user_tables where (table_name='TEAK') or (table_name='UZLETEK') or (table_name='VASARLOK'); if Szam = 3 then return false; else return true; end if; end;
  • 16. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 15 Az oldal másikfontosfunkciójaakollégáklistájának,ésanevekheztartozócímekmegjelenítse,ami egy Drill-downsegítségével történik. Ennekmegvalósításához egyúj WizardReportlettlétrehozva,ami azUZLETEK táblából jelenítímega neveket.EztkövetőenamegjelenítettERTEKESITO reportmezőtmódosítvamegadtam, hogya linkre kattintvaegyáltalamlétrehozottláthatatlan P6_ERTEK nevezető HIDDENFIELD típusú mezőnekadja át magának az értékesítőnekanevét. Ezt követőenlétrehoztam egyújoldalt(Üzleteinknéven),aminelkészítettemafentebbemlített P6_ERTEK nevezetű HIDDENFIELD itemet,valamintegy WizardReportis,ahol az UZLETEK tábla összesattribútumáthasználvamegadtamegy extrafeltételtis,ami összekapcsoljaa P6_ERTEK mezőbentárolt névvel,éscsakaz ahhoztartozóértékeketjeleníti meg.
  • 17. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 16 KÍNÁLATUNK Az alábbi – ismételtenpublikus - oldalonafelhasználónaklehetőségevanazüzletáltal kínáltteák közötti böngészni termékkategóriákszerint,tehátteatípusonként. Egy legördülőlistatartalmazzaaz elérhetőteatípusokat,innenkiválasztvaaszámunkramegfelelőt,a jobboldalon megjelennekazebbe a kategóriába sorolható teák.Az <Összes> menüpontkiválasztása eseténpediglehetőségvana raktáronlévőösszesteamegjelenítése. Fontosfunkciójaennekazoldalnak,hogy csakisazokata teákat jeleníti meg, amelyeknek a lejárati dátumaaz aktuálisdátumnál nagyobb,ígyelkerülve azt,hogyvalaki romlottárutvásároljon. Az oldal működésétésfelépítéséttekintve akövetkezőképpennézki:
  • 18. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 17 A kétlegfontosabbelemazoldalona„teáink”klasszikusreport és a tea típusokatmegjelenítő P2_TEAK legördülőlista,melya létrehozásnálalapvetőbeállításokmellettakövetkező: Annakérdekében,hogyazösszesteatípusmegjelenjen,szükségvolt egyNULLDISPLAY VALUE-rais, amelysegítségévelmegadhatóapontoslekérdezésaklasszikusreportformon,amely ígynézki: Az alapvetőadatoklekérésemellett(kivévetermészetesenaszavatossági dátum) leellenőrizzük, hogymelyiktípustválasztottaki afelhasználó,valamint hogyazadott tea szavatossága régebbi-e mint a jelenlegi dátum.
  • 19. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 18 SZÁRMAZÁSI HELYEK Ezenaz oldalona felhasználónak –lévénezispublikus – lehetősége vanateákat származási helyük alapjánlistázni.Annakérdekében,hogyegyszerre több,számáralegmegfelelőbbországkínálata közül válogathasson,egy„checkbox”segítségével tudjabeállítani akiválasztott országokat/területeket. Alapesetbennemjelenikmegsemmi azoldalon(alistátleszámítva),ígyehheztartozótáblázatsem, elkerülve azüresésértelmetlenlekérdezéseket.Viszontamintafelhasználóbekattintottaa megfelelőmezőketésrákattintotta„Megjelenítés”gombra,megjelennekakiválasztottteákegy listában,megyek származási helyszerintvannak sorrendbe helyezve (eznövekvővagycsökkenő sorrendbe rendezhető). Működéséttekintve azoldal nagyon hasonlóa fentiekbenmegismertetett„Kínálatunk”oldalhoz,az elemekisszinte teljesmértékbenmegegyeznek.Természetesenjelenesetbenisfigyelünkarra,hogy csakis friss ésfinomteákat jelenítsünkmeg,tehátolyanokat,amikmégnemjártakle. Lévénaz oldal felépítéseazelemektípusátleszámítva hasonlóazelőzőével (leszámítvaaztazextra gombot,ami csak a „Küldés”funkciótvalósítjameg),ígyehheznemszükségesképetcsatolni,viszont fontostisztázni,mikisazokazapró különbségek.
  • 20. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 19 A legördülőlistahelyétátvette egy „checkbox”,melyenazalapvetőbeállításoknemlettek módosítva.Az értékeket– hasonlóanminta legördülőlistánál - akövetkező lekérdezésadjaátneki: SELECT DISTINCT SZARMAZASI_HELY a, SZARMAZASI_HELY b FROM TEAK ORDER BY 1 A megjelenő klasszikusreportlekérdezésemárkicsitkomplexebb(abeállításokmegegyezneka fentebbképpel dokumentáltreportéra),hiszfigyelnünkkell arraaz esetre is,amikor többelemlett kiválasztvaalistában: select TEAK.TEA_NEV as TEA_NEV, TEAK.TIPUS as TIPUS, TEAK.SZARMAZASI_HELY as SZARMAZASI_HELY, TEAK.HOMERSEKLET as HOMERSEKLET, TEAK.TEA_AR as TEA_AR from TEAK TEAK where (INSTR(:P3_SZARMAZ, "TEAK"."SZARMAZASI_HELY") > 0) and (teak.szavatossag > sysdate) Fontosmégbeállítanunk,hogycsakabbanaz esetbenjelenjenmegmagaa tábla, hogy ha ki lett választva egy teatípus.Ezt a következőképpentehetjükmeg: Ebbenaz esetben csakisakkorfogmegjelenni táblázatajobboldalon,haki lettválasztvavalami a teatípusokközül.
  • 21. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 20 ÁTLAG ÉRTÉK Ez az oldal már csak az üzletvezetők(tehátazUZLETVEZETO csoportba tartozófelhasználók) és adminisztrátorok számáraérhetőcsakel.Egyrádiógomb csoportsegítségével ki lehetválasztani, melyik teatípusravonatkozóstatisztikára vagyunkkíváncsiak,ésazalkalmazásmegjeleníti az eredménytegy szövegdobozban. A lekérdezés akiválasztottteatípusteáinak árából számol átlagot, és eztjeleníti megafelhasználó számára,természetesencsakabbanaz esetben,haki lettválasztvavalami.A gombokközötti váltogatástermészetesen dinamikus,ésamegjelenítetteredményismaximumcsakkéttizedes jegyigjeleníti megazértékeket. Az oldal felépítéseakövetkező: A kétrégióelégegyértelmű:a„Típusválasztó”fogjatartalmazni arádiógombokat,míg az „Átlagos érték (100 grammra)” oldal a számolásvégeredményét.
  • 22. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 21 A P5_TIPUS rádió gomb elemeitfeltöltőlekérdezésnagyonegyszerű,hasonló,mintazelőzőek voltak: SELECT DISTINCT TIPUS a, TIPUS b FROM TEAK ORDER BY 1 A P5_LAP textfieldcsak az eredménymegjelenítéséértfelel,se számolást,se műveletet,se lekérdezéstnemtartalmaz. Vanviszontegyszámolástvégző„Computation”,amelyaz„AfterHeader” szekcióbanfuttatjale az alábbi lekérdezést(SQLQuery – returnsingle value): SELECT ROUND(AVG(TEAK.TEA_AR),2 FROM TEAK TEAK WHERE TEAK.TIPUS = :P5_TIPUS Ez felel akiválasztottteatípusravonatkozószámolásokelvégzéséért,ésmindenesetbenlefut,amint változtatástörténta rádiógombokközött. PARANCSSOR Ez az oldal kizárólagcsak az ADMINISZTRATOR csoportbatartozófelhasználókszámáraérhetőel, meggátolvaazt,hogya hozzá nemértőüzletvezetőkvagyegyszerűfelhasználók módosíthassákaz oldal gerincétalkotóadatbázistésazahhoztartozótáblákat.
  • 23. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 22 Itt az adminisztrátornaklehetősége vanazalkalmazás tábláinakmegjelenítésére,valamintsajátSQL lekérdezésekírására,melynekeredménye megisjelenikazoldalon. Ha csak egyszerűenmegszeretne nézniegytáblát,akkorazoldal aljánlévőlistábólkiválasztvaa megfelelőt,majda„Megjelenítés”gombrakattintvamegjelenikakívántadattábla. Az oldal tetejéntalálható„Utasítás”szövegmezőbe tetszőlegesSQLutasításírható (valamint futtathatóis),melyneksikerérőlvagysikertelenségérőltájékoztatazalkalmazás.
  • 24. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 23 Természetesenlehetőség vanlekérdezéseketisírni a parancssorba,nézzükmegpéldául ezt: Ebből islátszik,miértszükséges,hogycsakazadminisztrátorokférjenekhozzáehhezazoldalhoz, hiszenittnagyonnagymértékbenbefolyásolnilehetazeladásokat, raktáradatokat,stb. Az oldal felépítésekomplikáltabb,mintaztelőzőlegláthattuk,azalábbi képenláthatóakazokaz elemek,amikafenti funkciókmegvalósításáértfelelősek. A „Lehetőségek” és„Táblák” HTML tartományokegyértelműek,ezektartalmazzákaz oldalon megjelenítettelemeket. Vanaz oldalonháromgombis:„Futtat”, „Törlés” és„Megjelenítés” Az elsőkettő felelősamegfelelőProcessvégrehajtásáért,aharmadikpedigakiválasztotttábla megjelenítéséért(egyegyszerű Submitonkeresztül). A P7_PARANCS ésP7_EREDMENY szövegmezőkfunkciójátfentebbmárláthattuk:azelsőbe lehet beleírni azSQL utasítást,amelynekkimeneteléről a P7_EREDMENY mezőbe érkezikaválasz. A P7_REJTETT mezőfunkciójaazadatokátadása, enneksegítségével tudjukvégrehajtani abeírt utasításokat. A P7_TABLANEV legördülőlistatartalmazzaazalkalmazásbanelérhetőadattáblákat,enneka funkciónakaműködéséhezszükségesSQLlekérdezéspedigakövetkező: SELECT table_name a, table_name b FROM user_tables WHERE (table_name not like 'APEX$%') and (table_name not like 'DEMO%') ORDER BY 1
  • 25. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 24 Természeteseneznemelégahhoz,hogyműködőképeslegyenaparancssor, szükségünkleszmégkét Reportra, valamint két Processre is. Az „Eredmény” klasszikus reportalapbeállításainsemmi sincsváltoztatva,aforrásapedigegy egyszerűSQLkód: BEGIN RETURN :P7_PARANCS; END; Ez annyitjelent,hogyittfogmegjelenni a P7_PARANCSmezőbe írt lekérdezés eredménye.Viszont arra vigyáznunkkell,hogycsakabbanaz esetbenjelenjenmegbármi is,haaz adminisztrátor SELECT utasítást használt,egyébesetbencsakvégre kell hajtanunkakódot.
  • 26. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 25 Erre segítségül szolgál aVEGREHAJTProcess, amelyabbanaz esetbenfutle,hameglettnyomvaa „Futtat” gomb.Az ezt végrehajtóutasításakövetkező(ésittláthatjukmiértisvanszükségarejtett mezőnkre): BEGIN :P7_EREDMENY := ''; :P7_REJTETT := UPPER(SUBSTR(:P7_PARANCS,1,6)); EXECUTE IMMEDIATE :P7_PARANCS; IF :P7_REJTETT != 'SELECT' THEN :P7_EREDMENY := 'Végrehajtva. '||SQL%ROWCOUNT||' sor került módosításra'; ELSE :P7_EREDMENY :='Végrehajtva.'; END IF; EXCEPTION WHEN OTHERS THEN IF SUBSTR(SQLERRM,1,9)='ORA-06535' THEN :P7_EREDMENY := 'Nincs utasítás!'; ELSE :P7_EREDMENY := 'Hiba történt! Kód: '||SQLERRM; END IF; :P7_REJTETT := 'HIBA'; END; A „TORLO” Processazért felel,hogyhaafelhasználómegnyomtaa„Törlés”gombot, eltüntesse az eddigmegjelenítettüzeneteket,táblákat valamintabeírtutasítást a parancsmezőből: begin :P7_PARANCS := ''; :P7_REJTETT := ''; :P7_EREDMENY := 'Utasításmező törölve!'; end;
  • 27. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 26 RAKTÁR Az alábbi oldal ismét csakaz üzletvezetők(ésazadminisztrátor) számáraérhetőel,hiszenittlehet megnézni a raktáron lévőteákat, módosítani azokat,valamintújteát felvinni. Az oldal többfontosfunkciótisellát,például ittlehet leltározásutánmegadni, mennyitvásároltak egy adott teából.A tea nevére kattintvamegjelennekadatai,melyekmódosíthatóakamegfelelő szabályokbetartásamellett(arendszerpéldául nemengedolyanteákatbevinni arendszerbe, melyekmárlejártak,ígya dátummindigcsakaz adottnaptól kezdődőnapokatlistázza).
  • 28. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 27 Új tea felvitelénél azoldal természetesen leellenőrzi,hogymindenfontosadatmeglett-e adva,addig nemengedélyezi arekordelmentését,amígmindenkötelezőmezőadatanincsmeg. Fontosmegjegyezni,hogyamódosító/ új teahozzáadásaoldalona típus ésszármazási hely egy legördülőlistává lettalakítva, melyből azüzletvezetőkiválaszthatjaamegfelelőértéket,ígykerülve el az esetlegeselírásbóladódóhibákat. Mivel ezegy interaktív report,ezértaz összesehheztartozófunkcióelérhető.Mivel azeszköztár kínáltalehetőségekszéleskörűek,ezeketjelendokumentumbannemprezentálom, leírásuk megtalálhatótöbbekközöttahivatalosdokumentációbanis. Megvalósításaegy interaktívreport létrehozásával történt,ahol a TEAK tábla ésaz alapvető beállításokkiválasztásautánazalkalmazásautomatikusalétrehoztaazoldalakat,azahhoztartozó elemeketvalamintfolyamatokat,ígymárcsak ezekmagyarítása,szépítése maradthátra. Módosítva lettviszontaTIPUS ésSZARMAZASI_HELY elemektípusa,hogylegördülőlistaként jelenjenekmeg. És a tartalmukatfeltöltőSQLlekérdezéspedig: SELECT DISTINCT tipus a, tipus b FROM teak ORDER BY 1 valamint SELECT DISTINCT szarmazasi_hely a, szarmazasi_hely b FROM teak ORDER BY 1
  • 29. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 28 VÁSÁRLÓK A vásárlókkezelését,valamintavásárlásoklebonyolításátsegítőoldal megjeleníti egytabulátor nézetbenavásárlókatésa hozzájuktartozóadatokat. Mivel ezaz oldal iscsak UZLETVEZETOK ésADMINISZTRATOROK számáraelérhető,ígyegyszerű felhasználónemláthatja,tehátnemismanipulálhatjaezenadatokat. Az oldalonbelüllehetőségvan egyszerre többadat módosítására és felviteléreis,ígymegkönnyítve a forgalmasidőszakokbanazadat-,ésfelhasználókezelést.
  • 30. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 29 Az oldal megvalósításáttekintve egy„TabulatorForm”, melyenamegfelelőkulcsokkiválasztása mellettmagyarosítvalettekamegfelelőüzenetek,valamintafentebbislátottautentikációklétre lettekhozva. Természetesenfontos,hogyatabulátorlétrehozásakormindenképpen ROWIDalapjánazonosítsuka sorokat,különbenazadatmódosításvalamintadatbevitel problémáslehet.
  • 31. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 30 TEA SZÁMLÁLÓ Az utolsóoldal - aminekeléréséhezafentiekbenisemlítettjogosultságokszükségesek -, megszámoljaésmegjeleníti araktáron lévőteák típusai alapján, hogymelyikből hánykülönböző termékkaphatójelenleg. Itt természeteseninterakcióranincsszükség,hiszenezcsakegystatikusoldal,melyazadatok megjelenítéséreszolgál. Működéséttekintve azoldal ígynézki: Találhatóbenne egyrégió,ittfognakmegjelenni azadatok,emellettpedigegyrejtettmező (P25_TIPUS),amelybe bekerülazösszesteánakatípusa (kettősponttalelválasztva) egystringként.
  • 32. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 31 A P25_EREDMENY felel aműveletelvégzéséértésmegjelenítéséért,melyhezegy külsőDLL könyvtár segítségét(melynekbemásolásáról éselhelyezéséről abevezetőbenolvashattunk) használja. A DLL könyvtárVisual Studio2012-benlétrehozva,éscsakazalábbi egyszerűkódottartalmazza: public static string TeaTipus(string bemenet) { string[] tomb = bemenet.Split(':'); int voros = 0; int fekete = 0; int feher = 0; int gyumolcs = 0; int rooibos = 0; int zold = 0; for (int i = 0; i < tomb.Length; i++) { switch (tomb[i]) { case "Fekete": fekete++; break; case "Fehér": feher++; break; case "Gyümölcs": gyumolcs++; break; case "Rooibos": rooibos++; break; case "Vörös": voros++; break; case "Zöld": zold++; break; } } return (string.Format("Fekete: {0}db, Fehér: {1}db, Gyümölcs: {2}db, Rooibos: {3}db, Vörös: {4}db, Zöld: {5}db", fekete, feher, gyumolcs, rooibos, voros, zold)); }
  • 33. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 32 JOGOSULTSÁGI ADATOK Az alkalmazásjogosultságaiért,felhasználóiértvalamintacsoportoklétrehozásáértfelelősszkript futtatásáta bevezetőbenolvashattuk(users.sql),ígyennekrészletezéséreittnincsszükség. Az alkalmazásakövetkezőfelhasználói csoportokkal rendelkezik  UZLETVEZETO  ADMINISZTRATOR Az alkalmazásakövetkezőfelhasználókkalrendelkezik:  scott (jelszava: tiger) – az ADMINISZTRATOR csoport tagja  uzlet (jelszava: vezeto) – az UZLETVEZETO csoport tagja A csoportokáltal elérhetőoldalak:  Publikus felhasználók: o Főoldal o Kínálatunk o Származási helyek o Üzletek  UZLETVEZETO felhasználók: o Minden, amit a publikus is o Átlag érték o Vásárlóink o Raktár o Tea számláló  ADMINISZTRATOR felhasználók: o Minden, amit a publikus és UZLETVEZETO is o Paranccsor
  • 34. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 33 TESZTFUTÁSOK A fentebbi részletesútmutatótartalmaztaazösszesfőbbfunkcióbemutatását, alehetséges teszteseteket, ígyerre különittnemtérünkki.
  • 35. Adatbázis használat II. Kocsis Tamás Zsolt –MQ1LGI 34 IRODALOMJEGYZÉK  Kende Mária– NagyIstván:Oracle példatár- SQL,PL/SQL  Kende Mária– NagyIstván:Internetesadatbázis-alkalmazásokfejlesztése (Oracle ApplicationExpress) 1.rész  Kende Mária– NagyIstván:Internetes adatbázis-alkalmazásokfejlesztése (Oracle ApplicationExpress) 2.rész  Kende Mária– NagyIstván:Internetesadatbázis-alkalmazásokfejlesztése (Oracle ApplicationExpress) 3.rész i. Az idézet KendeMária –Nagy István: Internetes adatbázis-alkalmazások fejlesztése (Oracle ApplicationExpress) 1. rész dokumentumból származik