Articles

Definiera begränsningar i Create TABLE I Oracle 12c

Du kan använda create TABLE-satsen för att tillämpa flera olika typer av begränsningar på en tabell: kandidatnycklar, primärnycklar, främmande nycklar och kontrollvillkor. En BEGRÄNSNINGSKLAUSUL kan begränsa en enda kolumn eller grupp kolumner i en tabell. Poängen med dessa begränsningar är att få Oracle att göra det mesta av arbetet med att upprätthålla integriteten i din databas. Ju fler begränsningar du lägger till i en tabelldefinition, desto mindre arbete måste du göra i applikationer för att behålla data. Å andra sidan, ju fler begränsningar det finns i en tabell, desto längre tid tar det att uppdatera data.

Du kan ange begränsningar på ett av två sätt: som en del av kolumndefinitionen (känd som en kolumnbegränsning) eller i slutet av skapa TABELLUTTALANDET (känd som en tabellbegränsning). Klausuler som begränsar flera kolumner måste vara tabellbegränsningar.

Kandidatnyckeln

en kandidatnyckel är en kombination av en eller flera kolumner, vars värden unikt identifierar varje rad i en tabell. Följande lista visar skapandet av en unik begränsning för PROBLEMTABELLEN:

nyckeln till denna tabell är kombinationen av stad och SAMPLE_DATE. Observera att båda kolumnerna också förklaras vara inte NULL. Den här funktionen kräver att du anger värden för vissa kolumner för att rader ska infogas. Det är uppenbart att information om temperatur och nederbörd inte är användbar utan att veta var eller när den samlades in. Denna teknik är vanlig för kolumner som är tabellens primära nyckel, men det är också användbart om vissa kolumner är kritiska för att raden med data ska vara meningsfull. Om inte NULL inte anges kan kolumnen ha NULL-värden.

När du skapar en unik begränsning skapar Oracle ett unikt index för att genomdriva värdenas unika egenskaper. Inom en primärnyckelbegränsning måste minst en av kolumnerna i primärnyckeln för varje rad inte vara NULL.

primärnyckeln

primärnyckeln i en tabell är en av kandidatnycklarna som du ger några speciella egenskaper. Du kan bara ha en primärnyckel och en primärnyckelkolumn kan inte innehålla nollor.

följande skapa TABELLUTTALANDE har samma effekt som föregående, förutom att du kan ha flera unika begränsningar men bara en PRIMÄRNYCKELBEGRÄNSNING:

För primära eller kandidatnycklar med en kolumn kan du definiera nyckeln i kolumnen med en kolumnbegränsning istället för en tabellbegränsning:

i det här fallet är kolumnen författarnamn den primära nyckeln, och Oracle kommer att generera ett namn för den primära nyckelbegränsningen. Detta rekommenderas inte om du vill tillämpa en gemensam namngivningsstandard för nycklar, som diskuteras senare i ”Namngivningsbegränsningar.”

ange Indextabeller

unika och primära nyckelbegränsningar skapar index. Om du inte berättar för Oracle annorlunda placeras dessa index i standardtabellen. För att ange ett annat tabellutrymme, använd klausulen använda INDEX tabellutrymme i kommandot Skapa tabell, som visas i följande lista:

indexet som är associerat med AUTHOR_PK primärnyckelbegränsning placeras i användarens tabellutrymme.

OBS

I de flesta standardinstallationer skapas användartabellen och är standardtabellen.

den främmande nyckeln

en främmande nyckel är en kombination av kolumner med värden baserade på primärnyckelvärdena från en annan tabell. En främmande nyckelbegränsning, även känd som en referensintegritetsbegränsning, anger att värdena för den främmande nyckeln motsvarar de faktiska värdena för primärnyckeln i den andra tabellen. I tabellen bokhylla hänvisar till exempel kolumnen kategorinamn till värden för kolumnen kategorinamn i KATEGORITABELLEN:

Du kan referera till en primär eller unik nyckel, även i samma tabell. Du kan dock inte hänvisa till en tabell i en fjärrdatabas i REFERENSKLAUSULEN. Du kan använda tabellformuläret (som används tidigare för att skapa en primärnyckel i tabellen problem) istället för kolumnformuläret för att ange främmande nycklar med flera kolumner.

Ibland kanske du vill ta bort dessa beroende rader när du tar bort raden de är beroende av. När det gäller bokhylla och kategori, Om du tar bort ett kategorinamn från kategori, kanske du vill göra matchande kolumnvärden för bokhylla kategorinamn NULL. I ett annat fall kanske du vill radera hela raden. Klausulen om DELETE CASCADE som läggs till REFERENSKLAUSULEN säger till Oracle att ta bort den beroende raden när du tar bort motsvarande rad i den överordnade tabellen. Denna åtgärd upprätthåller automatiskt referensintegritet.

KONTROLLBEGRÄNSNINGEN

många kolumner måste ha värden som ligger inom ett visst intervall eller som uppfyller vissa villkor. Med en KONTROLLBEGRÄNSNING kan du ange ett uttryck som alltid måste vara sant för varje rad i tabellen. För att begränsa de tillgängliga värdena utöver de gränser som tillämpas av kolumndefinitionen kan du använda en KONTROLLBEGRÄNSNING, som visas i följande lista:

en kontrollbegränsning på kolumnnivå kan inte hänvisa till värden i andra rader; den kan inte använda pseudokolumner som SYSDATE, USER, CURRVAL, NEXTVAL, LEVEL och ROWNUM. Du kan använda formuläret för tabellbegränsning (i motsats till formuläret för kolumnbegränsning) för att hänvisa till flera kolumner i en KONTROLLBEGRÄNSNING.

Namngivningsbegränsningar

Du kan namnge dina begränsningar. Om du använder ett effektivt namngivningsschema för dina begränsningsnamn kommer du bättre att kunna identifiera och hantera begränsningarna. Namnet på en begränsning bör identifiera tabellen den verkar på och vilken typ av begränsning den representerar. Till exempel kan den primära nyckeln på PROBLEMTABELLEN kallas TROUBLE_PK.

Du kan ange ett namn för en begränsning när du skapar begränsningen. Om du inte anger ett namn för begränsningen genererar Oracle ett namn. De flesta av Oracles genererade begränsningsnamn är av formen SYS_C###### (till exempel SYS_C000145). Eftersom det systemgenererade begränsningsnamnet inte berättar något om tabellen eller begränsningen bör du namnge dina begränsningar.

i följande exempel skapas och namnges primärnyckeln som en del av kommandot Skapa tabell för PROBLEMTABELLEN (Lägg märke till BEGRÄNSNINGSKLAUSULEN):

BEGRÄNSNINGSKLAUSULEN i kommandot Skapa tabell namnger begränsningen (i detta fall TROUBLE_PK). Du kan använda detta begränsningsnamn senare när du aktiverar eller inaktiverar begränsningar.