Luin yleisimmät kehittäjän tekemät tietokannan suunnitteluvirheet Q & A pinonsiirrossa. Ensimmäisessä vastauksessa oli lause yksinoikeudellisesta kaaresta:
Yksinoikeuskaari on yleinen virhe, kun taulukko luodaan kahdella tai useammalla vieraalla näppäimellä, joista yksi ja vain yksi niistä voi olla nolla. Iso virhe. Ensinnäkin tietojen eheyden ylläpitäminen on paljon vaikeampi. Loppujen lopuksi mikään viitteellisellä eheydellä mikään ei estä kahden tai useamman näistä ulkomaisista avaimista asettamista (monimutkaisia tarkistusrajoituksia huolimatta).
En todellakaan tiedä ”En ymmärrä miksi yksinomainen kaari on paha. Luultavasti en ymmärtänyt sen perusteita. Onko olemassa mitään hyvää selitystä yksinoikeuskaarille?
Vastaus
Sikäli kuin ymmärsin sen kauan sitten, yksinoikeudella kaari taulukko sisältää useita sarakkeita, jotka ovat vieraita avaimia muille taulukoille, mutta vain yksi näistä voidaan asettaa kerrallaan (johtuen todellisesta maailmasta seuraavista toimialueen loogisista rajoituksista). Koska tätä sääntöä ei voida panna täytäntöön tietokannassa, voidaan luoda vioittunut tietue, jossa useammalla kuin yhdellä näistä ulkomaisista avaimista on arvo.
Annan esimerkin. Tarkastellaan sovellusta, jossa yritys seuraa kuorma-autot, joita se käyttää tavaroiden toimittamiseen. Kuorma-auto voi olla vain yhdessä kolmesta paikasta samanaikaisesti: se voi olla työntekijän kanssa, se voi olla pysäköintihallissa tai se voi olla huoltoliikkeessä. ottamalla kuorma-taulukko, jossa on työntekijäId, parkingGarageId ja maintenanceShopId, viitaten Employee, ParkingGarage ja MaintenanceShop-taulukoihin. Ei ole mitään keinoa panna täytäntöön sääntöä, että vain yksi näistä kentistä täytetään tietokannan tasolla. joku, jolla on suora pääsy tietokantaan, voi lisätä tietueen, jossa on kaksi tai kolme kenttää, mikä tarkoittaa tietojen vioittumista tietokantaan.
Kommentit
Vastaa
Yksinoikeuskaarissa ei ole mitään pahaa. Täytä vastaava liiketoimintasääntö yksinkertaisesti tarkistusrajoituksella. Useimmat suuret tietokannan hallintajärjestelmät tukevat tarkistusrajoituksia (Oracle, SQL Server, PostgreSQL). Jos käytät tietomallinnustyökalua, on hyvät mahdollisuudet, että työkalusi luo koodin automaattisesti tarkistusrajoituksen toteuttamiseksi.
Vastaa
Yksinoikeuskaari on erittäin hyödyllinen konseptuaalisessa tai loogisessa suunnittelussa. Se ei tarkoita, että sinun on toteutettava niin. Aikaisemmassa esimerkissä suunnittelija voi päättää toteuttaa mallin kolmella pöydällä. Yksi pysäköintiin yksi työntekijälle ja toinen huoltoliikkeelle.
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))
. En ' pidä yksinoikeudellisista kaarista, mutta ne voidaan valvoa tarkistusrajoituksella. Tietysti myös FK-rajoituksen on oltava läsnä.