Redigerer
Boyce–Codd normalform
(avsnitt)
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
== 3NF-tabell som alltid tilfredsstiller BCNF == Bare i sjeldne tilfeller oppfyller ikke 3NF-tabeller kravene til BCNF. En 3NF-tabell som ikke har flere overlappende [[Kandidatnøkkel|kandidatnøkler]] er garantert på BCNF.<ref name="Vincent">Vincent, M. W. and B. Srinivasan. "A Note on Relational Schemes Which Are in 3NF But Not in BCNF". ''Information Processing Letters'' 48(6), 1993, pp. 281–283.</ref> Avhengig av hva dens funksjonelle avhengigheter er kan en 3NF-tabell med to eller flere overlappende kandidatnøkler være på BCNF eller ikke. Et eksempel på en 3NF-tabell som ''ikke'' oppfyller BCNF er: {| class="wikitable" |+Dagens tennisbane-bestillinger ! Banenummer ! Starttid ! Sluttid ! Prisklasse |- | 1 | 09:30 | 10:30 | SPARE |- | 1 | 11:00 | 12:00 | SPARE |- | 1 | 14:00 | 15:30 | STANDARD |- | 2 | 10:00 | 11:30 | PREMIUM-B |- | 2 | 11:30 | 13:30 | PREMIUM-B |- | 2 | 15:00 | 16:30 | PREMIUM-A |- |} * Hver rad i tabellen representerer en bestilling på en tennisbane. Denne tennisklubben har én [[Hardcourt|hardbane]] (bane 1) og én [[Gressbane (tennis)|gressbane]] (bane 2). * En bestilling er definert av banenummer og perioden den er reservert for. * I tillegg er hver bestilling tilknyttet en prisklasse. Det er fire forskjellige prisklasser: ** STANDARD, for bane 1-bestillinger gjort av ikke-medlemmer ** SPARE, for bane 1-bestillinger gjort av medlemmer ** PREMIUM-B, for bane 2-bestillinger gjort av ikke-medlemmer ** PREMIUM-A, for bane 2-bestillinger gjort av medlemmer Tabellens [[Supernøkkel|supernøkler]] er: * S<sub>1</sub> = {Bane, starttid} * S<sub>2</sub> = {Bane, sluttid} * S<sub>3</sub> = {Prisklasse, starttid} * S<sub>4</sub> = {Prisklasse, sluttid} * S<sub>5</sub> = {Bane, starttid, sluttid} * S<sub>6</sub> = {Prisklasse, starttid, sluttid} * S<sub>7</sub> = {Bane, prisklasse, starttid} * S<sub>8</sub> = {Bane, prisklasse, sluttid} * S<sub>T</sub> = {Bane, prisklasse, starttid, sluttid}, den [[Trivialitet (matematikk)|trivielle]] supernøkkelen Merk at selv om [[Attributt|attributtene]] for ''starttid'' og ''sluttid'' i tabellen ovenfor ikke har noen dupliserte verdier for hver av dem, må vi likevel innrømme at det på noen dager kan være to forskjellige bookinger på bane 1 og bane 2 som ''starter samtidig'' eller ''slutter samtidig''. Dette er grunnen til at {Starttid} og {Sluttid} ikke kan betraktes som tabellens supernøkler. Imidlertid er bare S<sub>1</sub>, S<sub>2</sub>, S<sub>3</sub> og S<sub>4</sub> [[Kandidatnøkkel|kandidatnøkler]] (det vil si minimale supernøkler for relasjonen) fordi f.eks. S<sub>1</sub> ⊂ S<sub>5</sub>, så S<sub>5</sub> kan ikke være en kandidatnøkkel. Ettersom at [[Andre normalform|2NF]] forbyr partielle funksjonelle avhengigheter av ikke-primære attributter (altså et attributt som ikke forekommer i ''noen'' [[kandidatnøkkel]]) og at [[Tredje normalform|3NF]] forbyr [[Transitiv avhengighet|transitive funksjonelle avhengigheter]] av ikke-primære attributter på kandidatnøkler. I tabellen ''Dagens tennisbane-bestillinger'' er det ingen ikke-primære attributter, det vil si at alle attributter tilhører en eller annen kandidatnøkkel. Derfor overholder tabellen både 2NF og 3NF. Tabellen overholder imidlertid ikke BCNF på grunn av avhengigheten Prisklasse → Banenummer hvor det bestemmende attributtet Prisklasse – som Banenummer avhenger av – (1) verken er en kandidatnøkkel eller en [[overmengde]] av en kandidatnøkkel og (2) Banenummer er ingen [[delmengde]] av Prisklasse. Avhengigheten Prisklasse → Banenummer respekteres her, siden en prisklasse kun skal gjelde for en enkelt bane. Designet kan endres slik at det oppfyller BCNF: {| style="border-spacing:2em 0; margin-left:-2em" | style="vertical-align:top" | {| class="wikitable" |+ Prisklasse ! Prisklasse ! Banenummer ! Medlemsflagg |- | SPARE | 1 | Ja |- | STANDARD | 1 | Nei |- | PREMIUM-A | 2 | Ja |- | PREMIUM-B | 2 | Nei |- |} | style="vertical-align:top" | {| class="wikitable" |+ Dagens bestillinger !Banenummer ! Starttid ! Sluttid ! Medlemsflagg |- | 1 | 09:30 | 10:30 | Ja |- | 1 | 11:00 | 12:00 | Ja |- | 1 | 14:00 | 15:30 | Nei |- | 2 | 10:00 | 11:30 | Nei |- | 2 | 11:30 | 13:30 | Nei |- | 2 | 15:00 | 16:30 | Ja |- |} |} {{Clear}} Kandidatnøklene for tabellen ''Prisklasse'' er {Prisklasse} og {Banenummer, Medlemsflagg}. Kandidatnøklene for tabellen ''Dagens bestillinger'' er {Banenummer, starttid} og {Banenummer, sluttid}. Begge tabellene er på BCNF. Når {Prisklasse} er en nøkkel i satstypetabellen, er det umulig å ha én satstype assosiert med to forskjellige banenummer, så ved å bruke {Prisklasse} som en nøkkel i prisklasse-tabellen har anomalien som påvirket den opprinnelige tabellen blitt eliminert.
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Side
Diskusjon
norsk bokmål
Visninger
Les
Rediger
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon