Articles

Definition af begrænsninger i Opret tabel i Oracle 12c

Du kan bruge sætningen Opret tabel til at håndhæve flere forskellige slags begrænsninger på en tabel: kandidatnøgler, primære nøgler, fremmede nøgler og kontrolbetingelser. En BEGRÆNSNINGSKLAUSUL kan begrænse en enkelt kolonne eller gruppe af kolonner i en tabel. Pointen med disse begrænsninger er at få Oracle til at gøre det meste af arbejdet med at opretholde integriteten af din database. Jo flere begrænsninger du føjer til en tabeldefinition, jo mindre arbejde skal du gøre i applikationer for at vedligeholde dataene. På den anden side, jo flere begrænsninger der er i en tabel, jo længere tid tager det at opdatere dataene.

Du kan angive begrænsninger på en af to måder: som en del af kolonnedefinitionen (kendt som en kolonnebegrænsning) eller i slutningen af sætningen Opret tabel (kendt som en tabelbegrænsning). Klausuler, der begrænser flere kolonner, skal være tabelbegrænsninger.

Kandidatnøglen

en kandidatnøgle er en kombination af en eller flere kolonner, hvis værdier entydigt identificerer hver række i en tabel. Følgende liste viser oprettelsen af en unik begrænsning for PROBLEMTABELLEN:

nøglen til denne tabel er kombinationen af by og SAMPLE_DATE. Bemærk, at begge kolonner også erklæres for ikke at være NULL. Denne funktion kræver, at du angiver værdier for bestemte kolonner, for at rækker kan indsættes. Det er klart, at oplysninger om temperatur og nedbør ikke er nyttige uden at vide, hvor eller hvornår de blev indsamlet. Denne teknik er almindelig for kolonner, der er tabellens primære nøgle, men det er også nyttigt, hvis visse kolonner er kritiske for, at rækken af data skal være meningsfuld. Hvis ikke NULL ikke er angivet, kan kolonnen have NULL-værdier.

Når du opretter en entydig begrænsning, opretter Oracle et entydigt indeks for at håndhæve værdiernes entydighed. Inden for en primær nøglebegrænsning skal mindst en af kolonnerne i den primære nøgle for hver række ikke være NULL.

den primære nøgle

den primære nøgle i en tabel er en af de kandidatnøgler, du giver nogle specielle egenskaber. Du kan kun have en primær nøgle, og en primær nøgle kolonne kan ikke indeholde nuller.

følgende Opret TABELOPGØRELSE har samme effekt som den foregående, bortset fra at du kan have flere unikke begrænsninger, men kun en primær nøglebegrænsning:

for primære eller kandidatnøgler med en kolonne kan du definere nøglen i kolonnen med en kolonnebegrænsning i stedet for en tabelbegrænsning:

i dette tilfælde er kolonnen forfatternavn den primære nøgle, og Oracle genererer et navn til den primære nøglebegrænsning. Dette anbefales ikke, hvis du vil håndhæve en fælles navngivningsstandard for nøgler, som diskuteret senere i “Navngivningsbegrænsninger.”

udpegning af indeks Tablespaces

unikke og primære nøglebegrænsninger skaber indekser. Medmindre du fortæller Oracle anderledes, placeres disse indekser i din standard tablespace. For at angive et andet tablespace skal du bruge klausulen brug af indeks TABLESPACE i kommandoen Opret tabel som vist i følgende liste:

indekset, der er knyttet til AUTHOR_PK primary key-begrænsningen, placeres i USERS tablespace.

Bemærk

i de fleste standardinstallationer oprettes brugernes tablespace og er standard tablespace.

den fremmede nøgle

en fremmed nøgle er en kombination af kolonner med værdier baseret på de primære nøgleværdier fra en anden tabel. En fremmed nøglebegrænsning, også kendt som en referenceintegritetsbegrænsning, angiver, at værdierne for den fremmede nøgle svarer til de faktiske værdier for den primære nøgle i den anden tabel. I tabellen bogreol henviser kolonnen kategorinavn f.eks. til værdier for kolonnen kategorinavn i tabellen kategori:

Du kan henvise til en primær eller unik nøgle, selv i den samme tabel. Du kan dog ikke henvise til en tabel i en fjerndatabase i HENVISNINGSKLAUSULEN. Du kan bruge tabelformularen (som bruges tidligere til at oprette en primær nøgle i tabellen problemer) i stedet for kolonneformularen til at angive fremmede nøgler med flere kolonner.

Nogle gange vil du måske slette disse afhængige rækker, når du sletter den række, de er afhængige af. I tilfælde af bogreol og kategori, hvis du sletter et kategorinavn fra kategori, kan du gøre de matchende kolonneværdier for bogreol kategorinavn NULL. I et andet tilfælde vil du måske slette hele rækken. Klausulen om Slet kaskade tilføjet til REFERENCEKLAUSULEN fortæller Oracle at slette den afhængige række, når du sletter den tilsvarende række i den overordnede tabel. Denne handling opretholder automatisk referentiel integritet.

KONTROLBEGRÆNSNINGEN

mange kolonner skal have værdier, der ligger inden for et bestemt interval, eller som opfylder visse betingelser. Med en KONTROLBEGRÆNSNING kan du angive et udtryk, der altid skal være sandt for hver række i tabellen. For at begrænse de tilgængelige værdier ud over de grænser, der håndhæves af kolonnedefinitionen, kan du bruge en KONTROLBEGRÆNSNING, som vist i følgende liste:

en kontrolbegrænsning på kolonneniveau kan ikke henvise til værdier i andre rækker; den kan ikke bruge pseudokolonnerne som SYSDATE, USER, CURRVAL, NÆSTVAL, niveau og RÆKKENUM. Du kan bruge formularen tabelbegrænsning (i modsætning til formularen kolonnebegrænsning) til at henvise til flere kolonner i en KONTROLBEGRÆNSNING.

Navngivningsbegrænsninger

Du kan navngive dine begrænsninger. Hvis du bruger et effektivt navngivningsskema til dine begrænsningsnavne, vil du være bedre i stand til at identificere og administrere begrænsningerne. Navnet på en begrænsning skal identificere den tabel, den handler på, og den type begrænsning, den repræsenterer. For eksempel kan den primære nøgle på TROUBLE_PK hedde TROUBLE_PK.

Du kan angive et navn for en begrænsning, når du opretter begrænsningen. Hvis du ikke angiver et navn til begrænsningen, genererer Oracle et navn. De fleste af Oracles genererede begrænsningsnavne er af formularen SYS_C###### (for eksempel SYS_C000145). Da det systemgenererede begrænsningsnavn ikke fortæller dig noget om tabellen eller begrænsningen, skal du navngive dine begrænsninger.

i følgende eksempel oprettes og navngives den primære nøglebegrænsning som en del af kommandoen Opret tabel for tabellen problemer (Bemærk BEGRÆNSNINGSKLAUSULEN):

BEGRÆNSNINGSKLAUSULEN i kommandoen Opret tabel navngiver begrænsningen (i dette tilfælde TROUBLE_PK). Du kan bruge dette begrænsningsnavn senere, når du aktiverer eller deaktiverer begrænsninger.