If you're seeing this message, it means we're having trouble loading external resources on our website.

Ha webszűrőt használsz, győződj meg róla, hogy a *.kastatic.org és a *.kasandbox.org nincsenek blokkolva.

Fő tartalom

Adatok felosztása kapcsolódó táblákra

Ezidáig egyszerre csak egy táblán dolgoztunk és ezen néztük meg, hogy milyen érdekes adatokat tudunk kiválasztani. Azonban legtöbbször az adataink több különböző táblába vannak szétosztva, és ezek a táblák valamilyen módon „kapcsolódnak” egymáshoz.
Mondjuk például, hogy van egy táblánk, amiben a diákok dolgozatainak eredményeit naplózzuk, és eltároljuk e-mail címüket arra az esetre, ha romlanának a jegyeik, és ezt jelezni szeretnénk szüleiknek.
student_namestudent_emailtestgrade
Peter Rabbitpeter@rabbit.comNutrition95
Alice Wonderlandalice@wonderland.comNutrition92
Peter Rabbitpeter@rabbit.comChemistry85
Alice Wonderlandalice@wonderland.comChemistry95
Lehet még egy olyan táblánk is, amiben az tároljuk, hogy a diákok milyen könyveket olvasnak:
student_namebook_titlebook_author
Peter RabbitThe Tale of Mrs. Tiggy-WinkleBeatrix Potter
Peter RabbitJabberwockyLewis Carroll
Alice WonderlandThe Hunting of the SnarkLewis Carroll
Alice WonderlandJabberwockyLewis Carroll
Lehet esetleg egy olyan táblánk is, melyben részletes információkat tárolunk a diákokról:
idstudent_firststudent_laststudent_emailphonebirthday
1PeterRabbitpeter@rabbit.com555-66662001-05-10
2AliceWonderlandalice@wonderland.com555-44442001-04-02
Mit gondolsz ezekről a táblákról? Változtatnál rajtuk valamilyen módon?
Egy fontos dolgot kell megérteni ezen táblák kapcsán: relációs adatokat írnak le, vagyis az általuk leírt adatok kapcsolódnak egymáshoz. Mindegyik tábla bizonyos diákokról tartalmaz adatot, és több táblában előfordul ugyanannak az adatnak a másolata. Érdekes következményekkel járhat, ha ugyanaz az adat szerepel több táblában is.
Például mi történik, ha egy diák email címe megváltozik? Melyik táblát kellene módosítani?
Meg kellene változtatnunk a címet a diákok információs táblájában, de mivel ezt az adatot a dolgozateredményeiknél is tároltuk, ott meg kellene keresnünk minden sort a diákról, és ezekben a sorokban is meg kellene változtatnunk az email címet.
Gyakran az a legjobb, ha egy adott adatot csak egy helyen tárolunk, így csak néhány helyen kell frissíteni, és kisebb a kockázata, hogy különböző adatot tárolunk különböző helyeken. Ha így csinálod, akkor győződj meg róla, hogy valahogy össze tudod kapcsolni az adatot a táblákon keresztül. Ennek módjára a későbbiekben fogunk visszatérni.
Mondjuk, hogy úgy döntünk, kitöröljük az email címeket a dolgozateredmények táblából, mert rájövünk, hogy redundáns, hiszen ez szerepel a diákok részletes információs táblájában is. Ezt kapjuk:
student_nametestgrade
Peter RabbitNutrition95
Alice WonderlandNutrition92
Peter RabbitChemistry85
Alice WonderlandChemistry95
Hogyan deríthetjük ki egy diák email címét? Megkereshetjük a diák sorát az információs táblában a megfelelő névilleszkedéssel. De mi történik, ha 2 diáknak ugyanaz a neve? (Tudtad, hogy Bali szigetén összesen négy keresztnévből lehet választani?) Nem alapozhatunk arra, hogy név alapján megtaláljuk a megfelelő diákot, és általában se számíts arra, hogy név vagy hasonló attribútum alapján lévő keresés pontosan kihozzon egy-egy eredményt egy táblában.
Így a legjobban akkor jársz, ha eltávolítod a diák nevét (student_name) és helyettesíted egy diák azonosítóval (student_id), ami garantáltan egyedi azonosítást tesz lehetővé:
student_idtestgrade
1Nutrition95
2Nutrition92
1Chemistry85
2Chemistry95
Ugyanezt a változtatást kell elvégezni a könyves táblán, student_id-t (a diák azonosítóját) használva a student_name (a diák neve) helyett:
student_idbook_titlebook_author
1Tüskés néni kalandjaiBeatrix Potter
1JabberwockyLewis Carroll
2GubancmeseLewis Carroll
2JabberwockyLewis Carroll
Észrevetted, hogy az egyik könyvnek a szerzője és a címe is kétszer szerepel? Ez is figyelmeztető jel arra, hogy jobb lenne ezt a táblánkat több kapcsolódó táblára szétbontani, így ha valami változna egy könyv kapcsán, nem kell majd több helyen frissíteni az adatokat.
Lehet egy táblánk csak a könyvekről:
idbook_titlebook_author
1The Tale of Mrs. Tiggy-WinkleBeatrix Potter
2JabberwockyLewis Carroll
3The Hunting of the SnarkLewis Carroll
És akkor a diákok könyves táblája (students_books) így fog kinézni:
student_idbook_id
11
12
23
22
Tudom, hogy ez a tábla nem olyan könnyen olvasható, mint a korábbi, ami minden információt tartalmazott minden sorban. De a táblákat általában nem úgy tervezik, hogy emberek számára olvashatóak legyenek – hanem úgy, hogy a legegyszerűbb legyen karbantartani, és legkevésbé legyenek hibákra hajlamosak. Sok esetben az a legjobb megoldás, ha az információt több kapcsolódó táblára bontjuk, így kevesebb redundáns adatunk lesz, és kevesebb helyen kell frissíteni.
Fontos megérteni, hogyan használható az SQL arra, hogy a több kapcsolódó táblára bontott adatot kezeljük, és hogyan nyerjük ki a táblák összekapcsolásával, a számunkra szükséges adatokat. Erre az ún. összekapcsolásokat (angolul „join”-okat) használjuk, amiről a továbbiakban lesz szó.

Szeretnél részt venni a beszélgetésben?

Tudsz angolul? Kattints ide, ha meg szeretnéd nézni, milyen beszélgetések folynak a Khan Academy angol nyelvű oldalán.