Mi az exkluzív ív az adatbázisban, és miért ' gonosz?

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

  • A teherautó három lehetséges helye egy szuperosztály alosztálya, " teherautó helye ". Sok esetben az alosztályok kizárják egymást. A kihívás az lesz, hogyan kell az osztályokat és az alosztályokat modellezni a relációs táblákban.
  • Egyetértek azzal, hogy vannak esetek, amikor ennek a tervnek a használata indokolt. Egyetértek azonban az eredeti hozzászólással abban is, hogy ezt a mintát SOKKAL többet használják, mint kellene. Nagyon nagy hátrányai is vannak …
  • Nem használható ellenőrzési kényszer? Például 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.
  • Ezért a " komplex ellenőrzési kényszerek a bejegyzés " ellenére a fent idézett. Lehetséges, hogy valóban kifinomult ellenőrzést végezhet ellenőrzési korlátozásokkal vagy fene, sőt, kiváltó okokkal is, amelyek nem teszik ' jó ötletgé vagy jó tervezésű jelzővé. Képzelje el, hogy négy vagy öt oszlopos exkluzív íveken ellenőrzési korlátozásokat hajt végre … Ezenkívül ' biztos vagyok abban, hogy nem minden adatbázis-motor támogassa az ELLENŐRZÉSI kényszert . A MySQL a dokumentumokban kifejezetten kijelenti, hogy a CHECK záradékokat elemzik, de figyelmen kívül hagyják …
  • Ez a forrás az exkluzív ív használatát ajánlja. Gondolatok?

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük