Delphi - Master-detail kapcsolat létrehozása Paradox táblákban adatbázis szinten

forráskód letöltése
Paradox tábláknál lehetőségünk van adatbázis szinten megadni a master-detail kapcsolatokat, akár több táblával is. Ennek módjáról és tulajdonságairól szól ez a cikk. Bár a kapcsolatot adatbázis szinten megadhatjuk, mégse számítsunk olyan előnyökre, amelyek nagyobb adatbázis rendszereknél megszokottak (pl. MS SQL). A kapcsolat megadása elsősorban arra ad garanciát, hogy a master táblából nem tudunk olyan rekordokat törölni, amelyekhez a detail táblában lévő rekordok kapcsolódnak.

A kapcsolat létrehozásához nyissuk meg a Database Desktop-ot, és hozzunk létre két Paradox 7 táblát. Az első tábla a master, ennek legyen egy kulcsmezője, aminek az egyszerűség kedvéért a típusa Autoincrement (+) legyen. A többi mező megadása után mentsük el master.db néven a táblát, ezzel több dolgunk nem lesz. Hozzunk létre egy új táblát, amiben már legalább két kulcsmezőre lesz szükség. Az első kulcsmező típusa legyen Long Integer (I), és a neve legyen ugyanaz, mint a master tábla kulcsmezőjéé. A második kulcsmező típusa Autoincrement legyen, ennek neve bármi lehet. Ha létrehoztuk a további mezőket is, akkor mentsük el a táblát detail.db néven.

A File menüben válasszuk a Working directory menüpontot, és állítsuk be azt könyvtárat, ahová az előbbi két táblát mentettük.

Nyissuk meg a detail táblát, és válasszuk a Table menü Restructure menüpontját (vagy az eszköztáron az ugyanilyen nevű gombot). A TableProperties legördülő listából válasszuk a Referential Integrity elemet, majd kattintsunk a Define gombra.
A megjelenő ablakban baloldalon látjuk a detail tábla mezőit, jobboldalon pedig a Working Directory-ban megadott könyvtárban található táblákat. A baloldali listából válasszuk ki az első kulcsmezőt, amihez a master tábla ugyanolyan nevű mezője fog kapcsolódni, majd kattintsunk a jobbra mutató fekete nyílon. A jobboldali listából válasszuk a master.db táblát, és kattintsunk a balra mutató nyílon. Középen láthatjuk mindkét tábla mezőjét, amellyel kapcsolódnak egymáshoz.

Az Update Rule mezőben találunk két opciót. Az egyik a Cascade, a másik pedig a Prohibit. A kettő között az a lényeges különbség, hogy míg az elsőnél a master tábla kulcsmezőjének értéke bármikor módosítható (a detail tábla rekordjaiban a kapcsolódó mező értéke nem változik), addig az utóbbinál csak azokban a master rekordokban módosítható a kulcsmező, amelyekhez nem tartoznak a detail táblában rekordok.