Kihagyás

E/K Tervezési minták

  • Redundancia elkerülése
    • Helypazarlás
    • Inkonzisztens
      • Anomáliák (az összes kb)
  • Gyenge egyedhalmazok "óvatos használata"

Egyedhalmazok vs Attribútumok

  • Egy egyedhalmaznak legalább az egyiket teljesítenie kell:
    • Többnek kell lenneie, mint egy egyszerű név
      • tehát nem kulcs attribútumnak lennie kell
    • A sok végén szerepel egy sok-egy kapcsolantnak

Good Practice - 1

Helyes - 1

A gyáártónak valóban egyedhalmaznak kell lennie, mert a cím nem része a kulcsnak

A Sörök pedig a sok végén áll a sok-egy kapcsolatnak

Kerüljük a felesleges gyenge egyedhalmazokat

Gyakran egyedi azonosítót rendelünk az egyedhalmazokhoz

Lásd: TAJ, rendszámtábla...

  • Akkor van a gyenge egyedhalmazokra szükség, ha nem létezik olyan globális fórum, amely kioszhatná az egyedi azonosítókat
    • Nem valószínű, hogy minden focijátékos globálisan egyedi mezszámot kapjon...

E/K diagramok átírása relációsémává

  • Egyedhalmaz \(\to\) reláció
    • Attribútumok \(\to\) attribútumok
  • Kapcsolat \(\to\) relációk
    • Attribútumai az összekapcsolt egyedhalmazok kulcs-attribútumai
    • A kapcsolat saját attribútumai

Kapcsolatból reláció Ultra Mega Diagram

When a Diagram™️ uses 100% of it's brain

Relációk összevonhatósága - sok-egy

  • Egy relációba összevonhatók
    • Az \(E\) ehyedhalmazból kapott reláció
    • Valamint azon sok-egy kapcsolat relációi, melyeknél \(E\) áll a sok oldalon

sok-sok reláció nem összevonható

Nem triviális TÉF-ek a láthatáron...

Gyenge egyedhalmazok átírása

  • A gyenge egyedhalmaznak relációja a teljes kulcsot tartalmaznia kell
    • A más egyedhalmazhoz tartozó kulcsokat is
    • Valamint a saját attribútumait is

Gyenge egyedhalmazok átírása

Majd látjuk, ha ki kell vennünk a hostNév2-t, akkor a Hol reláció teljesen elhagyhatóvá válik (mert minden más adat már egy táblában benne van)

Egyed alosztályok

  1. Objektumorientált megközelítés (egyed egy relációban, nem kulcsokat is tartalmaz)
  2. NULL értékek használata
  3. E/K alapján meghatározott stílusban

Alosztályok átírása

OO megközelítés

Sörök(név, gyártó)

Ale-k(név, gyártó, szín)

  • Gyártó által gyártott sörök színeinél hasznos

E/K style

Sörök(név, gyártó)

Ale-k(név, szín)

  • Sörökhöz tartozó Gyártók lekérdezésénél hasznos

NULL értékek használata

Sörök(név, gyártó, szín)

  • Helytakarékos, amíg nem túl sok a null a színekben
  • Összekapcsolást megspórolhatunk vele

Kacsolat számosság - Alternatív jelölés

  • Nyíl helyett számosság
    • a vonal mind két végén
    • [0,n] illetve [0,1] vagy [1,1]
  • Működik egy-egy sok-egy esetekben

Specifikáció lejátszás

Orvosi adatbázist készítünk. Minden embernék számon tartjuk a nevét, korát, TAJ számát. Ezen utóbbi alapján egyértelműen azonosítani lehet bárkit. Az orvosoknál tároljuk ezen kívül még a tudományos fokozatukat és a szakterületüket, a körzeti orvosoknál még annak a városnak a nevét is, ahol rendelnek, a pácienseknél pedig a foglalkozásukat. A betegségeknél számon tartjuk a nevüket és azt, hogy átlagosan mennyi ideig tart a gyógyulási folyamat. Minden betegséget valamilyen bacilustörzs okoz. Ezek a nevük alapján egyértelműek, emellett tároljuk az elterjedtségük arányát. A törzsekhez a bacilusok tartoznak, ám a név alapján még nem tudhatjuk pontosan melyik bacilusról van szó, mert több törzshöz is tartozhat ugyanolyan nevű bacilus. A különféle betegségekben szenvedő pácienseknél lehet, hogy egyszerre több orvos írja majd fel a különféle árú gyógyszereket. A gyógyszereknél tároljuk a nevüket és hogy mely bacilusok esetében hatásosak. Minden páciensnek tartoznia kell egy körzeti orvoshoz, s valaki csak úgy lehet körzeti orvos, ha legalább húsz páciense van.

Amit az EA csinált (I am so sorry pal)

Összevonások előtti adatbázis séma

  • Ember(név, kor, TAJ)
  • Orvos(TAJ, szakt, tud_fok)
  • Körzeti_orvos(TAJ, város)
  • Páciens(TAJ, foglalkozás)
  • Gyógyszer(név, ár)
  • Betegség(név, lefutás)
  • Bacilus_törzs(név, elterjedtség)
  • Bacilus(név, törzs_név)
  • Felír(orvos_TAJ, páciens_TAJ, gy_név, betegség_név)
  • Tartozik(orvos_TAJ, páciens_TAJ)
  • Hatások(gy_név, bac_név, törzs_név)
  • Okoz(bet_név, törzs_név)

Egyszerűsítés után

  • Ember(név, kor, TAJ)
  • Orvos(TAJ, szakt, tud_fok)
  • Körzeti_orvos(TAJ, város)
  • Páciens(TAJ, foglalkozás, orvos_TAJ)
  • Gyógyszer(név, ár)
  • Betegség(név, lefutás, törzs_név)
  • Bacilus_törzs(név, elterjedtség)
  • Bacilus(név, törzs_név, gy_név)
    • Esetleg, ha pont egy gyógyszer hatásos rá
  • Felír(orvos_TAJ, páciens_TAJ, gy_név, betegség_név)

Tervezési alapelvek

  • A modell minél jobban tükrözze a valóságok
  • Attribútum vs új egyedosztály
    • Általában ha több, számunkra fontos tulajdonsággal rendelkezik, akkor megérheti új egyedosztályt készíteni
    • Máskor elegendő új attribútumot felvenni
    • Minden esetre sose mindkettőt
      • Anomáliááák 🤯