Ce este arcul exclusiv în baza de date și de ce este ' rău?

Citeam cele mai frecvente greșeli de proiectare a bazelor de date făcute de dezvoltator Q & A pe stackoverflow. La primul răspuns a existat o frază despre arc exclusiv:

Un arc exclusiv este o greșeală obișnuită în care un tabel este creat cu două sau mai multe chei străine unde una și numai unul dintre ele poate fi nul. Mare greșeală. În primul rând, devine mult mai greu să păstrezi integritatea datelor. La urma urmei, chiar și cu integritate referențială, nimic nu împiedică setarea a două sau mai multe dintre aceste chei străine (cu toate acestea, constrângeri complexe de verificare).

„Nu înțeleg de ce arcul exclusiv este rău. Probabil că nu am înțeles elementele de bază ale acestuia. Există vreo explicație bună asupra arcurilor exclusive?

Răspuns

În măsura în care am înțeles-o cu mult timp în urmă, într-un arc un tabel conține un număr de coloane care sunt chei străine pentru alte tabele, dar numai una dintre acestea poate fi setată la un moment dat (din cauza unor constrângeri logice asupra domeniului care urmează din lumea reală). Deoarece această regulă nu poate fi aplicată în baza de date, ar putea fi creată o înregistrare coruptă în care mai mult de una dintre aceste chei străine are o valoare.

Voi face un exemplu. Luați în considerare o aplicație în care o companie ține evidența camioanele pe care le folosește pentru livrarea mărfurilor. Un camion poate fi doar în unul din cele trei locuri în același timp: poate fi cu un angajat, poate fi într-un garaj de parcare sau poate fi într-un atelier de întreținere. Acest lucru ar putea fi modelat deținând un Truck-table cu employeeId, parkingGarageId și maintenanceShopId, referindu-se la Employee, ParkingGarage și MaintenanceShop-tabele. Nu există nicio modalitate de a aplica regula conform căreia doar unul dintre aceste câmpuri este completat la nivelul bazei de date. Cod greșit sau cineva cu acces direct la baza de date ar putea insera o înregistrare care are două sau trei câmpuri completate, ceea ce înseamnă corupția datelor în baza de date.

Comentarii

  • Cele trei locații posibile ale camioanelor sunt subclasele unei superclase, " locația camionului ". Există multe cazuri în care subclasele se exclud reciproc. Provocarea devine modul de modelare a claselor și subclaselor în tabelele relaționale.
  • Sunt de acord că există cazuri în care utilizarea acestui design este justificată. Cu toate acestea, pot fi de acord și cu postarea originală că acest model este folosit mult mai mult decât ar trebui. Are și unele dezavantaje foarte mari …
  • Nu se poate utiliza o constrângere de verificare? De exemplu 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)). Nu ' îmi plac arcurile exclusive, dar pot fi aplicate cu o constrângere de verificare. Desigur, constrângerea FK trebuie să fie de asemenea prezentă.
  • Prin urmare, " constrângerile complexe de verificare, în pofida " din postare citat mai sus. S-ar putea să faceți o validare foarte sofisticată cu constrângeri de verificare sau heck, chiar declanșatoare, care ' nu face din aceasta o idee bună sau un semn de design bun. Imaginați-vă că faceți constrângeri de verificare pentru arce exclusive cu patru sau cinci coloane … De asemenea, sunt ' destul de sigur că nu toate motoarele de baze de date susțineți constrângerea CHECK . MySQL afirmă în mod explicit în documente că clauzele CHECK sunt analizate, dar ignorate …
  • Această sursă recomandă un arc exclusiv. Gânduri?

Răspuns

Nu există nimic rău în privința arcurilor exclusive. Pur și simplu aplicați regula de afaceri corespunzătoare utilizând o constrângere de verificare. Majoritatea sistemelor majore de gestionare a bazelor de date acceptă constrângerile de verificare (Oracle, SQL Server, PostgreSQL). Dacă utilizați un instrument de modelare a datelor, atunci există șanse mari ca instrumentul dvs. să genereze automat codul pentru a implementa constrângerea de verificare.

Răspuns

Arcul exclusiv este foarte util în proiectarea conceptuală sau logică. Nu înseamnă că trebuie să implementați acest lucru. În exemplul anterior, proiectantul poate decide să implementeze proiectarea cu trei tabele. Una pentru parcare locație, una pentru angajat și una pentru atelierul de întreținere.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *