A fejlesztő által elkövetett leggyakoribb adatbázis-tervezési hibákat olvastam Q & A a stackoverflow-n. Az első válasz az exkluzív ívről szólt:
Az exkluzív ív gyakori hiba, amikor egy táblát két vagy több idegen kulccsal hoznak létre, ahol egy és csak az egyik lehet nem semleges. Nagy hiba. Egyrészt sokkal nehezebb fenntartani az adatok integritását. Végül is, még referenciaintegritás mellett sem akadályozza meg ezeknek az idegen kulcsoknak a kettő vagy több beállítását (a komplex ellenőrzési korlátozások ellenére).
Valóban nem “Nem értem, miért gonosz az exkluzív ív. Valószínűleg nem értettem az alapjait. Van valami jó magyarázat az exkluzív ívekre?
Válasz
Amennyire régen megértettem, exkluzív Az ív egy tábla számos oszlopot tartalmaz, amelyek idegen kulcsok más táblákhoz, de ezek közül egyszerre csak egy állítható be (a való világból következő tartomány valamilyen logikai korlátozása miatt). Mivel ez a szabály nem hajtható végre az adatbázisban, korrupt rekord hozható létre, ahol ezeknek az idegen kulcsoknak egynél több értéke van.
Példát hozok. Vegyünk egy olyan alkalmazást, ahol a vállalat nyomon követi a teherautók, amelyeket áruk szállítására használ. A teherautó egyszerre csak a három hely egyikében lehet: lehet alkalmazottal, parkolóban vagy karbantartóban. Ez modellezhető teherautó-tábla megléttel a töötajaId, a parkingGarageId és a maintenanceShopId elemekkel, hivatkozva az Employee, ParkingGarage és a MaintenanceShop-táblákra. Nincs olyan szabály, amely betartaná azt a szabályt, amely szerint ezek közül a mezők közül csak az egyiket kell kitölteni az adatbázis szintjén. Rossz kód vagy valaki, aki közvetlen hozzáféréssel rendelkezik az adatbázishoz, beilleszthet egy olyan rekordot, amelynek két vagy három mezője van kitöltve, ami adatkorrupciónak felel meg az adatbázisban.
Megjegyzések
Válasz
Az exkluzív ívekben nincs semmi rossz. Egyszerűen érvényesítse a megfelelő üzleti szabályt egy ellenőrzési kényszer használatával. A legtöbb nagyobb adatbázis-kezelő rendszer támogatja az ellenőrzési korlátozásokat (Oracle, SQL Server, PostgreSQL). Ha adatmodellező eszközt használ, akkor jó esély van arra, hogy az eszköze automatikusan létrehozza a kódot az ellenőrzési kényszer megvalósításához.
Válasz
Az exkluzív ív nagyon hasznos a Koncepcionális vagy Logikai tervezésnél. Ez nem jelenti azt, hogy Önnek így kell megvalósítania. A korábbi példában a tervező úgy dönthet, hogy a táblázatot három táblával valósítja meg. Az egyik a parkoláshoz egy, az alkalmazott és egy a karbantartó számára.
alter table mytable add constraint myconstraint check ((col1 is not null and col2 is null and col3 is null) or (col1 is null and col2 is not null and col3 is null) or (col1 is null and col2 is null and col3 is not null))
. Nem szeretem az exkluzív íveket ', de ellenőrzési kényszerrel kikényszeríthetők. Természetesen az FK korlátozásnak is jelen kell lennie.