Hvad er eksklusiv lysbue i databasen, og hvorfor er det ' ondt?

Jeg læste de mest almindelige databasedesignfejl foretaget af udvikleren Q & A om stackoverflow. Ved første svar var der sætning om eksklusiv bue:

En eksklusiv bue er en almindelig fejl, hvor en tabel oprettes med to eller flere fremmednøgler, hvor en og kun en af dem kan være ikke-nul. Stor fejltagelse. For det første bliver det meget sværere at opretholde dataintegriteten. Når alt kommer til alt, selv med referentiel integritet, forhindrer intet to eller flere af disse fremmede nøgler i at blive indstillet (uanset komplekse kontrolbegrænsninger).

Jeg virkelig ikke “t forstå hvorfor eksklusiv lysbue er ond. Sandsynligvis forstod jeg ikke det grundlæggende i det. Er der nogen god forklaring på eksklusive buer?

Svar

Så vidt jeg forstod det for længe siden, i en eksklusiv bue en tabel indeholder et antal kolonner, der er fremmede nøgler til andre tabeller, men kun en af disse kan indstilles ad gangen (på grund af en vis logisk begrænsning af domænet fra den virkelige verden). Da denne regel ikke kan håndhæves i databasen, kan der oprettes en korrupt post, hvor mere end en af disse fremmednøgler har en værdi.

Jeg laver et eksempel. Overvej et program, hvor en virksomhed holder styr på de lastbiler, den bruger til at levere varer. En lastbil kan kun være et af tre steder på samme tid: det kan være sammen med en medarbejder, det kan være i en parkeringshus eller det kan være i en vedligeholdelsesbutik. Dette kunne modelleres ved at have en lastbil-tabel med medarbejder-id, parkering Garage-id og vedligeholdelse Shop-id, der henviser til medarbejderen, Parking Garage og vedligeholdelse-butik-tabeller. Der er ingen måde at håndhæve reglen om, at kun et af disse felter er udfyldt på databaseniveau. Dårlig kode eller nogen med direkte adgang til databasen kunne indsætte en post, der har to eller tre felter udfyldt, hvilket svarer til datakorruption i databasen.

Kommentarer

  • De tre mulige lastbilplaceringer er underklasser af en superklasse, " truckplacering ". Der er mange tilfælde, hvor underklasser udelukker hinanden. Udfordringen bliver, hvordan man modellerer klasser og underklasser i relationelle tabeller.
  • Jeg er enig i, at der er tilfælde, hvor det er berettiget at bruge dette design. Jeg kan dog også være enig med det oprindelige indlæg i, at dette mønster bruges meget mere end det burde. Det har også nogle meget store ulemper …
  • Kan der ikke bruges en kontrolbegrænsning? For eksempel 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)). Jeg kan ikke lide ' som eksklusive buer, men de kan håndhæves med en kontrolbegrænsning. Selvfølgelig skal FK-begrænsningen også være til stede.
  • Derfor er " komplekse kontrolbegrænsninger uanset " fra posten citeret ovenfor. Du kan muligvis udføre virkelig sofistikeret validering med kontrolbegrænsninger eller pokker, endda udløsere, der ikke ' t gør det til en god idé eller et tegn på godt design. Forestil dig at gøre kontrolbegrænsninger på eksklusive buer med fire eller fem kolonner … Også ' er ret sikker på at ikke alle databasemotorer understøtter CHECK-begrænsningen . MySQL angiver eksplicit i docs, at CHECK-klausuler er parset, men ignoreres …
  • Denne kilde anbefaler eksklusiv bue. Tanker?

Svar

Der er ikke noget ondt ved eksklusive buer. Håndhæv blot den tilsvarende forretningsregel ved hjælp af en kontrolbegrænsning. De fleste større databasestyringssystemer understøtter kontrolbegrænsninger (Oracle, SQL Server, PostgreSQL). Hvis du bruger et datamodelleringsværktøj, er der en god chance for, at dit værktøj automatisk genererer koden til implementering af kontrolbegrænsningen.

Svar

Den eksklusive lysbue er meget nyttig i det konceptuelle eller logiske design. Det betyder ikke, at du skal implementere den måde. I det tidligere eksempel kan designeren beslutte at implementere designet med tre borde. En til parkering placering, en til medarbejderen og en til vedligeholdelsesbutikken.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *