Adatbázisnál, ha van egy táblám, aminél több elsődleges kulcs is lenne, hogyan oldjam meg ezt?
Lényeg, hogy pl. vannak bizonyos előre beállított típusok, pl. autók és mindegyiknek egyedi neve van, viszont tudtommal érdemes ID alapján azonosítani a módosítási anomália miatt. (Ha módosítom a nevét és más tábla használja azt foreign kulcsként, akkor gondot okoz) Jól gondolom, hogy ilyenkor ID alapján azonosítani és új elem felvételénél vagy módosításnál triggerrel ellenőrizni, hogy létezik-e már olyan elem a listában?
Előre is köszi a válaszokat!
Nem kell trigger meg semmi.
Felveszel egy id-t primary key-nek ezzel hivatkozol a tobbi tablabol.
A nevet stb-t pedig Indexnek vagy unique indexnek teszed attol fuggon, hogy lehet-e egyezes vagy sem.
Ha unique indexen van egy (vagy akar egyutt tobb mezo), akkor ha mar letezot probalsz insertalni, akkor hibaval elhal a dolog.
Ezért találták ki az összetett elsődleges kulcsot:
--MySQL példa (Index sem ártana, de legyen egyszerű a példa)
CREATE TABLE `t_a` (
`firstname` VARCHAR(50) NOT NULL,
`lastname` VARCHAR(50) NOT NULL,
CONSTRAINT `pk_t_a` PRIMARY KEY (`firstname`, `lastname`)
);
CREATE TABLE `t_b` (
`firstname` VARCHAR(50) NOT NULL,
`lastname` VARCHAR(50) NOT NULL,
`dummy` INT,
CONSTRAINT `fk_t_b` FOREIGN KEY (`firstname`, `lastname`) REFERENCES `t_a`(`firstname`, `lastname`)
);
A PRIMARY KEY megszorítás miatt a t_a táblában nem lehet két olyan A és B rekord, ahol A firstname, lastname mezői B firstname, lastname mezőinek értékével egyezne meg, mivel ebben az esetben nem lehet egyértelműen azonosítani őket.
Egyreszt nem tudom ki pontozta le a valaszt, de ha van hozzafuzni valoja, halljuk.
Masreszt Lilla_1991 megoldasa sem rossz en is emlitettem, hogy lehet tobb mezo is indexelve, viszont a kerdezo problemajat nem oldja meg tulzottal valoszinuleg. Mivel oke, lesz egy osszetett indexe, tok jo neki, de csak 1 nevet emlegetett, nem azzal volt a gondja, hogy hogy lehet tobbet betenni.
Plusz ID-t mindig erdemes hasznalni, szamtalan eset lehet amikor sokkal jobb, mint nevekkel hivatkozgatni. Plusz nem mellekesen ha valaha, barmilyen ORM rendszert ra akar kotni, ott az esetek 99%-aban kotelezoen kell id-nak lennie.
Lilla, összetett kulcs az én esetemben nem jó. Tegyük fel, hogy kategóriákat szeretnék tárolni, és később át szeretném nevezni a kategóriát, akkor a módosítás miatt a kategória nevét külső kulcsként használó többi táblát is frissíteni kéne. Emiatt kell ID alapján azonosítanom, ami mindig maradhat fix, nevet pedig szabadon módosíthatom úgy, hogy sose lesz két ugyanolyan kategória, ami a későbbiekben problémát okozhatna.
Első válaszolót pedig én sem értem miért kellett lepontozni... elég demotiváló.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!