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
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.
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.