DB Segitseg

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

 

1. Alapfogalmak, adatmodellek, EK-diagramok


 Adatbázis: adott formátumú és rendszer szerint tárolt adatok együttese
 Adatbázisséma: az adatbázis struktúrájának leírása
 Adatbázis-kezelő rendszer: az adatbázist kezelő szoftver
 Rekord: az adatbázis alapvető adategysége
 Egyed: a valós világ egy objektuma, melyről az adatbázisban információt szeretnénk
tárolni.
 Összetett attribútum: attribútumokkal rendelkező attribútum.
 Többértékű attribútum: halmaz vagy lista adattípusra leképezhető attribútum.
 Kulcs: olyan (minimális) attribútumhalmaz, amely egyértelműen meghatározza az
egyedet
 Kettős ellipszis: többértékű attribútum
 Téglalap: egyed
 Kettős téglalap: gyenge egyed

 Háromszög: specializáló kapcsolat


 
2. Relációs adatmodell
 Melyik állítás igaz a NULL értékre? -> Definiálatlan mezőérték.
 szuperkulcs: Olyan attribútumhalmaz, amely egyértelműen azonosítja a tábla sorait.
 indexek célja: A rendezés és keresés gyorsítása az adatokban.

4. Relációs algebra
 Az alábbi kifejezések melyike igaz egy R(A1, ..., An) relációs séma feletti T táblára?
T ⊆ dom(A1) × ... × dom(An)
 Az adatok relációkkal adhatók meg. Az R(A1, . . . , An) séma feletti T reláció egy T ⊆
dom(A1) × · · · × dom(An) halmazt jelent. Azaz egy reláció nem más, mint az
attribútumok értéktartományainak direkt szorzatából képzett halmaz egy
részhalmaza.
 Halmaz metszet, unió, különbségét csak akkor lehet venni ha kompatibilisek a táblák,
vagyis megegegyezik az oszlopok száma és azok értéktartománya
 A theta-összekapcsolásnál a két tábla azon sorait kapcsoljuk össze, amelyek a
kapcsolómezőkön megegyeznek: Hamis(A Descartes-szorzat azon rekordjait tartja
meg, melyek egy
adott logikai feltételnek megfelelnek.)
 Tekintsük az alábbi relációs adatbázissémákat!
Hallgató(ehakód, név, születési dátum, beíratkozás éve)
Kurzus(kurzuskód, kurzusnév, kredit)
Felvette(kurzuskód, ehakód, félév, jegy)
Különbség: Azon hallgatók ehakódjainak listázása, akik egyáltalán nem vettek fel még
kurzust.
Szelekció: Az idei évben beíratkozott hallgatók listázása.
Természetes összekapcsolás: A hallgatói-, kurzus- és teljesítési adatok listázása.
 
5. Funkcionális függőség
Függőségek:
1. R(A1,…An) relációséma, P,Q részhalmaza {A1…An}
P-től funkcionálisan függ Q, ha bármely R feletti T tábla esetén valahányszor két sor
megegyezik P-n, akkor megegyezik Q-n is. Jele P -> Q.
 Teljesen nemtriviális: {felhasználónév, email} → {név}, mivel a név nem szerepel a bal
oldali attribútumok között, P ∩Q = ∅
 Nemtriviális függés: {felhasználónév, email} → {email, név}, de az {email, név} nem
részhalmaza a {felhasználónév, email}-nek
 Triviális függés: {felhasználónév, email} → {email}, mivel az {email} részhalmaza a
{felhasználónév, email}-nek, Q ⊆ P
 P →Q triviális , ha Q ⊆ P.
 P →Q teljesen nemtriviális, ha Q ∩ P = ∅.
 Tekintsünk egy R(A,F) relációs adatbázissémát! K (⊆A) akkor és csak akkor
szuperkulcs, ha K →A
Egyszerű szabályok amik mentén lehet kezelni a funkcionális függőségeket:
 Szétvágási szabály: Ha X → {B1, ..., Bk}, akkor X → B1, ..., X → Bk(X-től külön függ a
B1, a B2, a Bk, tehát ha az X-en egyezés van akkor egyezés van B1-en, B2-őn, Bk-n)
 Egyesítési szabály: ha X->B1, …, X->Bk, akkor X->{B1…Bk}
DE attól hogy {B1…Bk} -> X, abból nem következik hogy B1->X,…Bk->X, tehát csak a jobb
oldali attribútumokat lehet szétvágni
 
Armstrong-axiómák:
 Reflexivitás: Ha Y ⊆ X, akkor X → Y.
 Bővítés: Ha X → Y, akkor X ∪ Z → Y ∪ Z.
 Tranzitivitás: Ha X → Y és Y → Z, akkor X → Z.
 
Kulcsok meghatározása: K akkor és csak akkor szuperkulcs, ha K -> A(a teljes
attribútumhalmaz függ K-tól) -> attribútumhalmaz lezártját kell vizsgálni
Algoritmus X+ számítására: keresünk olyan F-beli(függőségek beli) P->Q függőséget, ami
esetén P benne van az eddigi X halmazban, de a Q nem része az X halmaznak(nyilván nem
kerület bele kétszer a jobboldal a halmazba)
Kulcs meghatározása: a szuperkulcstól az összes attribútum függ, vagyis a K lezártja megadja
a teljes attribútumhalmazt
 legyen először K a teljes attribútumhalmaz és ebből sorra hagyjunk el attribútumokat
úgy, hogy még mindig K+ a teljes attribútumhalmaz legyen
 
Felbontás
R(A) relációséma, előfeltétel: X, Y része A-nak és az attribútumokat összerakva kiadják az
egész attribútumhalmazt
Akkor hűséges a felbontás ha az eredeti táblát visszakapjuk ha vesszük a szétvágott táblák
természetes összekapcsoltját.
Hűséges felbontáshoz: Heath tétele
R relációséma R(B, C, D) B,C,D attribútumhalmazokkal
 Ha C->D, akkor R1(B, C) és R2(C, D) felbontás hűséges.
 
Normalizálás
 1NF: Attribútumok értéktartománya csak egyszerű(atomi) adatokból áll
 
 R(A, F) relációséma - F: függőségek és X, Y részhalmaza A-nak és X->Y(funkcionálisan
függ)
X-től teljesen függ Y, ha X-ből bármely attribútumot elhagyva a függőség már nem teljesül,
vagyis ha pl. K kulcs, akkor K-tól teljesen függ A(az összes attribútum).
 Egy attribútumot elsődleges attribútumnak nevezünk, ha szerepel a relációséma
valamely
kulcsában, ellenkező esetben másodlagos attribútumnak nevezzük.
 2NF: Ha minden másodlagos attribútum teljesen függ bármely kulcstól. A 2NF
definíciójából adódik, hogy ha a sémában nincs másodlagos attribútum vagy ha a
sémában minden kulcs egyszerű(egy attribútumból áll), akkor a séma 2NF-ben is van.
(Minden másodlagos attribútum a teljes elsődleges kulcstól függ, vagyis ha elhagyok
belőle attribútumot akkor nem találhatok függést a táblában.)
2NF-re hozás: a normálformát sértő függőség mentén felbontjuk a sémát a Heath
tétele szerint
 
 X, Z részhalmaza A-nak és X->Z
X-től tranzitívan függ Z, ha van olyan Y, amelyre X->Y és Y->Z, de Y-tól nem függ X és az Y->Z
függés teljesen nemtriviális vagyis Y és Z metszete üreshalmaz. Ellenkező esetben X-től
közvetlenül függ Z.
 3 NF: Ha minden másodlagos attribútum közvetlenül függ bármely kulcstól. Ha a
sémában nincs másodlagos attribútum akkor már 3NF-ben van.(Minden másodlagos
attribútum a teljes elsődleges kulcstól függ és semmi más attribútumtól nem)
3NF-re hozás: a normálformát sértő függőség mentén felbontjuk a sémát a Heath
tétele szerint, vagyis Y->Z mentén
 
 BCNF: ha bármely nemtriviális L -> Z függés esetén L szuperkulcs, tehát a sémában
csak kulcstól való függés van és az L szuperkulcs. Tehát akkor nincs BCNF-ben ha van
olyan nemtriviális függés aminek a bal oldalon nem szuperkulcs van. (Minden
attribútum a teljes elsődleges kulcstól függ és semmi más attribútumtól nem)
BCNF-re hozás: a normálformát sértő függőség mentén felbontjuk a sémát a Heath
tétele szerint
 
 K, L az A attribútumhalmaz részhalmazai és M a maradék attribútumok halmaza
K-tól többértékűen függ L (K->->L), ha bármely R feletti T tábla esetén ha két sor megegyezik
K-n, akkor a kombinációjuk is szerepel a táblában. Ha K->->L, akkor K->->M.
Fagin tétele(többértékű függések megoldása):
R relációséma R(B, C, D) B,C,D attribútumhalmazokkal
 R felbontása az R1(B unio C) és R2(C unio D) sémákra akkor és csak akkor hűséges, ha
C->->D fennáll(C, től többértékűen függ D)
 4NF: ha minden nemtriviális K->->L függés esetén K szuperkulcs
 4NF-re hozás: a normálformát sértő függőség mentén felbontjuk a sémát a Fagin
tétele szerint R1(K unio L) és R2(K unio M) sémákra.
 4NF esetén hűséges felbontással redundancia nem szűntethető meg

 Szét kell venni Model, Style és Model, Color táblákra


 
1,
A = {A1, A2, A3, A4, A5, A6, A7} attribútumhalmaz
{A1} → {A3, A4}
{A2} → {A6}
{A3} → {A5}
{A4, A5} → {A7}
 
{A1}+ = {A1, A3, A4, A5, A7}
Ami csak a bal oldalon van az biztosan része a kulcsnak(de eddig csak szuperkulcs), ekkor kell
vizsgálódni hogy ha a teljesből elhagyjuk egyenként a kulcsokat, akkor vissza kapjuk-e az
egészet, ha nem, akkor az lesz a kulcs is.
 
SQL
Felhasználó létrehozása:
 CREATE USER 'felhasznalonev'@'host_ahonnan_csatlakozhat'
IDENTIFIED BY 'jelszo';
Pl: CREATE USER 'Sanya'@'%' IDENTIFIED BY 'macska';
 Jogosultság adása: GRANT műveletnév ON adatbaziselem TO
{felhasznalonev, PUBLIC, szerepkor} [ WITH GRANT OPTION ];
o műveletnév: pl. SELECT, INSERT INTO, UPDATE, ALL PRIVILEGES(minden jog)
o adatbaziselem: pl. egy tábla neve
o ha felhasználónév van megadva, akkor egy adott felhasználó kap jogot,
PUBLIC -> mindenki számára engedélyezzük a műveletet, szerepkör esetén
csak bizonyos szerepkörbe állított felhasználók használhassák a műveleteket
o WITH GRANT OPTION -> tovább tudja osztani a felhasznalo a jogosultságait
másoknak
 Jogosultság megvonása: REVOKE műveletnév ON adatbaziselem FROM
{felhasznalonev, PUBLIC, szerepkor} [ CASCADE ];
o CASCADE: továbbadott utasításoknak is a visszavonása
 Idővel kapcsolatos utasítások:
CURRENT_TIMESTAMP - aktuális dátum lekérése
CURRENT_DATE - szintén
NOW() - szintén
az hogy milyen formában kerül megadásra az a mező típusától függ(DATETIME, TIME, DATE,
TIMESTAMP)
YEAR() - paraméterben adott dátum év értéke
 
SELECT utas.
 SELECT: projekció az oszloplistára
 [DISTINCT]: ismétlődő sorok közül csak egyet ír ki
 FROM: DESCARTES szorzatot készít a felsorolt táblákból
 WHERE: szelekció adott feltétel szerint
 GROUP BY: csoportosítás az oszloplistában megadott oszlopok értékei szerint
 HAVING: a GROUP BY csoportosított kimenetére vonatkozó szelekció
 ORDER BY: oszloplistában megadott adatok rendezése - ASC vagy DESC szerint
Műveletek sorrendje:
FROM -> WHERE(szelekció a descartes szorzatból) -> GROUP BY -> HAVING -> SELECT
[DISTINCT] -> ORDER BY
 ha csoportosítás(GROUP BY) van a lekérdezésben a SELECT után csak olyan érték
szerepelhet ami benne van a GROUP BY oszloplistájában vagy összesítő függvényben
szerepel
 GROUP BY-nak csak akkor van értelma ha használunk valamilyen összesítő függvényt
a SELECT oszloplistáin
 Összesítő függvények: MIN, MAX, AVG, SUM, COUNT([DISTINCT] oszlop) - ha meg van
adva a DISTINCT akkor csak az ismétlődő értékeket figyelmen kívül hagyja
 COUNT(*) bármilyen oszlopot helyettesít, a csoportokban lévő rekordok számát adja
vissza ha használunk csoportosítást, ha nem, akkor az eredménytáblában lévő
rekordok számát adja vissza
 SELECT * FROM T1 NATURAL JOIN T2; nem kell megadni hogy min kapcsoljuk
össze mivel feltételezi hogy az adott oszlopnevek és értéktartományuk megegyezik
 SELECT * FROM T1 LEFT/RIGHT/FULL OUTER JOIN T2 ON T1.X = T2.X;
 Theta(Descartes szorzat és szelekció): SELECT * FROM T1 , T2 WHERE
feltétel ;
 ( SELECT * FROM tabla1 ) UNION/INTERSECT/EXCEPT ( SELECT * FROM
tabla2 )
unió, metszet, különbség
 
Virtuális nézettáblák
CREATE VIEW tablanev [( oszloplista )] AS ( alkerdes );
Beszúrás, módosítás és törlés azonban nem lehetséges akkor, ha az alábbiesetek valamelyike
fennáll:
 DISTINCT szerepel a lekérdezésben
 FROM után legalább két tábla áll
 GROUP BY szerepel a lekérdezésben
 ha az alkérdés nem tartalmazza a kulcsot
 ha a nézettábla egyik oszlopa származtatott adatot tartalmaz(összesítő függvény,
kifejezés)
 
Indexek
 CREATE INDEX indexnév ON tábla( oszloplista );
 Az elsődleges kulcs és a kulcsfeltétellel ellátott mezőkre az indextábla a legtöbb
rendszerben automatikusan létrejön, ezeket elsődleges indexeknek nevezzük
Mikor érdemes?
 külső kulcsokra - gyorsabb lesz az összekapcsolás
 olyan oszlopokra amik szerint gyakran rendezünk
 olyan oszlopokra amik értékeiben gyakran keresünk
 olyan oszlopokra amik értékei szerint gyakran csoportosítunk(GROUP BY) - mivel ez is
rendezést foglal magában, futamokat hozunk létre az egyes oszlopok értékeiből és
ezek alapján hozzuk létre a csoportokat
 
Adatbázis-kezelő rendszerek alkalmazásokban
 Az atomiság azt jelenti, hogy egy adott tranzakciót vagy teljes egészében
végrehajtunk, vagy nem.
 Gráfadatbázisok: Gyakran használják ezeket az adatbázisokat térinformatikai
rendszerekben.
 Kulcs-érték tárolók: Adatszerkezetük az asszociatív tömbökre, szótárakra vagy
tördelőtáblákra hasonlít.
 Dokumentumtárolók: önleíró adatstruktúrát definiálnak.
 Relációs adatbázisok: A különböző táblákban lévő sorok között valamilyen relációt,
kapcsolatot hozunk létre.
 
MYSQL és SQLite
 Az adatbázis-kezelő rendszerek esetében általában egy szerver írja és olvassa az
adatbázis-állományokat. A szerverhez egy kliens programmal csatlakozunk a
szerverhez, és az adatokat hálózati kommunikációval valósítjuk meg. Az SQLite abban
is különbözik például a MySQL-től, hogy nincs külön szerver-kommunikáció, az
eljárások ezen függvénykönyvtár segítségével közvetlenül írják és olvassák az
adatbázis-fájlokat.
 Az SQLite-ban minden adatbázishoz egyetlen adatbázisfájl tartozik, amely platform-
függetlenné teszi az adatbázist. Ez a fájl – és az adatbázis is – hordozható 32-bites,
64-bites, nagy- és kis-endiánú architektúrájú gépek között is.
Mikor használjunk SQLite-ot?
 beágyazott rendszerek esetében, kis mérete miatt
 alkalmazás fájl formátumoknál (pl. CAD programoknál)
 kis- és közepes forgalmú weboldalaknál
 adatelemzésnél (pl. bioinformatikai kutatásoknál), szenzorral rendelkező rendszeren
futattható
 fájl archivumoknál, adattárolóknál
 oktatásban
Mikor jobb egy kliens-szerver adatbázist választani?
 kimondottan kliens-szerver alkalmazásoknál
 nagyméretű adatbázisok esetén
 nagy forgalmú adatbázisoknál (ahol sok az olvasó folyamat, de kevés az író folyamat).
 nagyméretű és nagy forgalmú weboldalaknál, amelyeket több szerver szolgál ki.
 
SQLite
 in-memory adatbáziskezelő - minden adatbázist egy külön fájlban tárol, az adatbázis
használatakor a teljes adatbázis betöltődik a memóriába
 NULL: A NULL érték.
 INTEGER: Előjeles egész érték
 REAL: Lebegőpontos szám
 TEXT: Szöveg.
 BLOB: Bináris nagy objektum
 0-ként tárolja a FALSE és 1-ként a TRUE értéket
 Az SQLite a dátum- és idő típusokat sem kezeli külön, a megfelelő dátumkezelő
függvényekkel TEXT, REAL vagy INTEGER értékekből konvertálja át, de ettől vannak
dátum és időfüggvények, dátumokat formátumsztringgel kell megadni.
Példák a 154. oldalon
 Típus affinitás: Az SQLite rugalmasan kezeli a típus konverziókat. Ha a séma
definíciójában meg van határozva egy típus, például INTEGER, akkor egy sztring
konstanst is, ha az számmá alakítható, átalakít számmá.
 Ha tartalmaz adott karaktersorozatot a típus akkor besorolódik egy megfelelő
affinitási osztályba és ha több is jellemző rá akkor az előrébb lévő affinitási típust
veszi fel
 Az SQLite erről úgy gondoskodik, hogy minden táblához automatikusan hozzárendel
még egy oszlopot, a ROWID-t, ez minden rekord esetén egyedi, az AUTOINCREMENT
is használható, de ezt definiálni kell létrehozáskor.
 Az oszlop létrehozás egyszerű, a módosítás már bonylultabb(külön táblát kell
létrehozni és ebbe átmásolni az adatokat)
 
SQL befecskendezés
 Az olyan kártékony SQL utasítások vagy utasítás részleteket, amely a beviteli felületek
sérülékenységét kihasználva illetéktelen módon nyernek vagy tesznek tönkre
adatbázisban tárolt adatokat.
 session_regenarate_id(true), újrageneráljuk a session azonosítót
 lekérdezése: session_id(), ezt eltároljuk az adatbázisban is mondjuk a felhasználó egy
külön session_id oszlopába
 Lapok váltásánál vagy lap frissítésél ellenőrizzük hogy megegyeznek-e az
adatbázisban és a webszerveren tárolt azonosítók, majd ismét újrageneráljuk,
eltároljuk és ezt elvégezzük minden lapváltásnál
Védekezés:
 utasítások előkészítése
 megadott adatok megtisztítása, HTML karaktereknenek megfelelően
kódolás(htmlspecialchars())
 űrlapelemek értékének helyességének ellenőrzése, pl. reguláris kifejezessel, szám-e
stb.
 munkamenet azonosítók eltárolása az adatbázisban is
 korlátozzuk a felhasználók jogosultságát(adatbázis szinten)

You might also like