A fejezet későbbi részeiben az itt bemutatott minta adatbázist fogom használni az SQL nyelv és az Entity Framework bemutatásához.
A minta adatbázis egy könyv nyilvántartó rendszer lesz, ami képes könyvek adatait tárolni.
A tervezés elsÅ‘ lépéseként át kell gondolni, hogy egy könyvnek milyen tulajdonságai vannak. Egyedi azonosÃtónak használhatjuk az ISBN számot, mivel ez minden könyv esetén egyedi. Minden könyvnek van cÃme, továbbá szerzÅ‘je és egy kiadási éve, valamint egy kiadója. A szerzÅ‘ egy összetett tulajdonság, mivel a szerzÅ‘knek van kereszt- és vezetéknevük, illetve további adataik. Jelen esetben nem bonyolÃtjuk túl a dolgot, a szerzÅ‘ csak vezetéknévvel és keresztnévvel fog rendelkezni.
A kiadó is egy összetett tulajdonság, mivel a nevén kÃvül rendelkezik még sok egyéb adattal. Szintén nem bonyolÃtjuk túl a dolgot, a kiadó esetén csak nevet és cÃmet fogunk tárolni.
Az elsÅ‘dleges tulajdonság specifikációk alapján elkészÃthetjük az adatbázisunk kezdetleges egyed-kapcsolat modelljét. Ez az alábbi ábrán látható:
Ez alapján már megvalósÃtható lenne az adatbázisunk, mivel van kulcs tulajdonságunk, vagyis a jelenlegi modellünk kielégÃti az elsÅ‘ normálforma követelményeit. Ha Ãgy hagynánk az adatbázist, akkor bizony egy csomó redundancia maradna benne. Ezért fel kell bontani az adatbázisunkat.
Egy kiadó több könyvet is kiadhat, illetve egy szerzÅ‘ több könyvet is Ãrhat. Ezért a szerzÅ‘nek és a kiadónak létrehozunk egy-egy külön egyedtÃpust. Ezeket az egyedtÃpusokat pedig kapcsolatok segÃtségével illesszük majd be a modellbe.
A felbontás elvégzése után a modell a következőféleképpen fog kinézni:
A felbontás után a modellünk az elsÅ‘ normál forma követelményeit nem elégÃti ki, mivel a szerzÅ‘ és a kiadó egyedtÃpusok esetén nincs kulcs tulajdonságunk. A kiadó esetén a név használható egyedi azonosÃtóként, mivel a kiadók cégek (az egyszerűség kedvéért a magánkiadásoktól jelen modellben eltekintünk), a cégek bejegyzésével pedig a cégbÃróság foglalkozik. A jelenlegi jogszabályok alapján pedig nem lehet két azonos nevű cég.
A szerző esetén azonban sem a vezetéknév, sem a keresztnév nem tekinthető önmagában egyedi kulcsnak. Összetéve alkalmazhatóak lennének összetett kulcsként, azonban ha összetett kulcsot alkalmazunk, akkor az a probléma, hogy a Kovács egy igen gyakori vezetéknév, valamint az István is. Ha csak statisztikai szempontból vizsgáljuk a lehetőségeket, akkor könnyen belátható, hogy előfordulhat olyan eset, hogy két Kovács István nevű szerzőnk legyen, akik különböznek, de jelenlegi modell szerint nem megkülönböztethetőek.
A probléma orvosolható, ha további tulajdonságokkal egészÃtjük ki a szerzÅ‘ táblát, például egy születési évvel, aztán az új tulajdonságunkat szintén egy összetett kulcs részévé tesszük. Könnyen belátható, hogy ez nem egy jó megoldás, mivel adódhat olyan eset, hogy ugyanabban az évben született a két szerzÅ‘. Ha ez nem is áll fent, akkor is az összetett kulcskezelés nagymértékben lassÃtani fogja a rendszert.
A helyes és jó megoldás ilyen esetben az, hogy fel kell venni egy egyedi azonosÃtó tulajdonságot az egyedtÃpusba. Ezt jelen esetben elnevezzük SZID-nek, ami a szerzÅ‘ ID (identification) szavakból képzÅ‘dik.
Ezután következhet a kapcsolatok kialakÃtása. A kiadó és a szerzÅ‘ is kapcsolattá fog alakulni, mivel ezek kapcsolatban állnak a könyvvel. A végleges egyed-kapcsolat modell a következÅ‘ lesz:
A kapcsolatok esetén az összekötÅ‘ vonalak mellett fel kell tüntetni a kapcsolat tÃpusát. A létrehozott egyed-kapcsolat modellbÅ‘l létrehozható a relációs séma modell. A relációs modellben az egyedek rekordoknak (adatbázis sorai) feleltethetÅ‘ek meg. Ezeknek a gyűjtÅ‘je lesz majd a tábla, amely a modellben megadott tulajdonságokkal rendelkezik.
A kapcsolatokra nincs relációs megfelelÅ‘, ezért kialakÃtásuk kapcsolódási pontok felvételével lehetséges. A kapcsolódási pontokat abban az egyedtÃpusban kell kialakÃtani, amit felbontottunk. Jelen esetben ez a könyv lesz. A kapcsolódási pontok majd tulajdonságként realizálódnak a táblában. Ezen tulajdonságok kiemelt szereppel fognak rendelkezni, mivel ezek külsÅ‘ kulcsok lesznek.
A végleges relációs implementációban a könyv tábla ki fog még egészülni két mezÅ‘vel. Ezeknek a KiadóNév és az SZID mezÅ‘k lesznek. A külsÅ‘ kulcs egy táblában egy olyan kulcs, amely egy másik tábla elsÅ‘dleges kulcsára mutat, Ãgy ezen mutatókon keresztül a relációs algebra eszköztárával kezelhetÅ‘ a kapcsolat. A relációs táblákat Táblanév(mezÅ‘1, mezÅ‘2, mezÅ‘N) formátumban szokás jelölni modellezés során. A külsÅ‘ kulcs mezÅ‘k szaggatott vonallal vannak aláhúzva, mÃg az elsÅ‘dleges kulcs mezÅ‘k egyszeres folytonos aláhúzással rendelkeznek.