Articles

Beperkingen definiëren binnen tabel maken in Oracle 12c

u kunt het statement tabel maken gebruiken om verschillende soorten beperkingen op een tabel af te dwingen: kandidaatsleutels, primaire sleutels, buitenlandse sleutels en controlevoorwaarden. Een BEPERKINGSCLAUSULE kan een enkele kolom of groep kolommen in een tabel beperken. Het punt van deze beperkingen is om Oracle het grootste deel van het werk te laten doen in het behoud van de integriteit van uw database. Hoe meer beperkingen je toevoegt aan een tabeldefinitie, hoe minder werk je moet doen in applicaties om de gegevens te onderhouden. Aan de andere kant, hoe meer beperkingen er zijn in een tabel, hoe langer het duurt om de gegevens bij te werken.

u kunt beperkingen op twee manieren opgeven: als onderdeel van de kolomdefinitie (bekend als een kolombeperking) of aan het einde van het statement CREATE TABLE (bekend als een tabelbeperking). Clausules die meerdere kolommen beperken, moeten tabelbeperkingen zijn.

de Kandidaatsleutel

een kandidaatsleutel is een combinatie van een of meer kolommen waarvan de waarden elke rij van een tabel uniek identificeren. De volgende lijst toont de creatie van een unieke beperking voor de TROUBLE table:

de sleutel voor deze tabel is de combinatie van CITY en SAMPLE_DATE. Merk op dat beide kolommen ook niet NULL zijn verklaard. Voor deze functie moet u waarden opgeven voor bepaalde kolommen om rijen in te voegen. Het is duidelijk dat informatie over temperatuur en neerslag niet nuttig is zonder te weten waar of wanneer het werd verzameld. Deze techniek is gebruikelijk voor kolommen die de primaire sleutel van de tabel zijn, maar het is ook handig als bepaalde kolommen van cruciaal belang zijn voor de rij met gegevens om zinvol te zijn. Als NULL niet is opgegeven, kan de kolom NULL-waarden hebben.

wanneer u een unieke beperking maakt, maakt Oracle een unieke index om de uniciteit van de waarden af te dwingen. Binnen een beperking van de primaire sleutel mag ten minste één van de kolommen in de primaire sleutel voor elke rij niet NULL zijn.

de primaire sleutel

de primaire sleutel van een tabel is een van de kandidaat-sleutels die u een aantal speciale kenmerken geeft. U kunt slechts één primaire sleutel hebben en een kolom met primaire sleutel kan geen NULLs bevatten.

De volgende instructie CREATE TABLE heeft hetzelfde effect als de vorige, behalve dat je kunt hebben diverse UNIEKE beperkingen, maar slechts één PRIMAIRE SLEUTEL beperking:

Voor één kolom primaire of kandidaat-sleutels-hiermee kunt u de toets op de kolom met een kolom beperking in plaats van een tabel beperking:

In dit geval, de AUTHOR_NAME kolom is de primaire sleutel, en Oracle zal het genereren van een naam voor de PRIMAIRE SLEUTEL beperking. Dit wordt niet aanbevolen als u een gemeenschappelijke naamgevingsstandaard voor sleutels wilt afdwingen, zoals later besproken in “Naming Constraints.”

indicating Index Tablespaces

UNIQUE and PRIMARY KEY constraints create indexes. Tenzij je Oracle anders vertelt, worden die indexen in je standaard tablespace geplaatst. Om een andere tablespace op te geven, gebruikt u de index TABLESPACE-clausule van het CREATE TABLE-commando, zoals weergegeven in de volgende lijst:

de index die geassocieerd is met de author_pk primaire sleutelbeperking zal in de tablespace van gebruikers worden geplaatst.

NOTE

in de meeste standaardinstallaties wordt de tablespace van gebruikers aangemaakt en is dit de standaard tablespace.

de vreemde sleutel

een vreemde sleutel is een combinatie van kolommen met waarden gebaseerd op de primaire sleutelwaarden uit een andere tabel. Een FOREIGN key constraint, ook bekend als een referentiële integrity constraint, specificeert dat de waarden van de foreign key corresponderen met de werkelijke waarden van de primaire key in de andere tabel. In de BOEKENPLANKTABEL, bijvoorbeeld, verwijst de kolom CATEGORY_NAME naar waarden voor de kolom CATEGORY_NAME in de CATEGORIETABEL:

U kunt verwijzen naar een primaire of unieke sleutel, zelfs in dezelfde tabel. U kunt echter niet verwijzen naar een tabel in een externe database in de verwijzing clausule. U kunt het tabelformulier (dat eerder wordt gebruikt om een primaire sleutel op de PROBLEEMTABEL te maken) gebruiken in plaats van het kolomformulier om buitenlandse sleutels met meerdere kolommen op te geven.

soms wilt u deze afhankelijke Rijen verwijderen wanneer u de rij verwijdert waarvan ze afhankelijk zijn. In het geval van BOOKSHELF en CATEGORY, als u een CATEGORY_NAME uit categorie verwijdert, wilt u misschien de overeenkomende kolomwaarden van BOOKSHELF CATEGORY_NAME NULL maken. In een ander geval wilt u misschien de hele rij verwijderen. De clausule over CASCADE verwijderen die is toegevoegd aan de verwijzing-clausule vertelt Oracle om de afhankelijke rij te verwijderen wanneer u de overeenkomstige rij in de bovenliggende tabel verwijdert. Deze actie handhaaft automatisch de referentiële integriteit.

de CONTROLEBEPERKING

veel kolommen moeten waarden hebben die binnen een bepaald bereik liggen of die aan bepaalde voorwaarden voldoen. Met een controlebeperking kunt u een expressie opgeven die altijd waar moet zijn voor elke rij in de tabel. Bijvoorbeeld, de WAARDERINGSTABEL slaat geldige waarderingen op; om de beschikbare waarden te beperken boven de limieten die door de kolomdefinitie worden afgedwongen, kunt u een CONTROLEBEPERKING gebruiken, zoals in de volgende lijst wordt getoond:

een controlebeperking op kolomniveau kan niet verwijzen naar waarden in andere rijen; het kan geen pseudokolommen gebruiken zoals SYSDATE, USER, CURRVAL, NEXTVAL, LEVEL en ROWNUM. U kunt het formulier voor tabelbeperking gebruiken (in tegenstelling tot het formulier voor kolombeperking) om te verwijzen naar meerdere kolommen in een CONTROLEBEPERKING.

Naamgevingsbeperkingen

u kunt uw beperkingen een naam geven. Als u een effectief naamschema gebruikt voor uw beperkingsnamen, zult u beter in staat zijn om de beperkingen te identificeren en te beheren. De naam van een beperking moet de tabel aangeven waarop hij werkt en het type beperking dat hij vertegenwoordigt. Bijvoorbeeld, de primaire sleutel op de TROUBLE table kan worden genoemd TROUBLE_PK.

u kunt een naam opgeven voor een beperking wanneer u de beperking maakt. Als u geen naam opgeeft voor de beperking, genereert Oracle een naam. De meeste door Oracle gegenereerde constraintnamen hebben de vorm SYS_C##### # (bijvoorbeeld SYS_C000145). Omdat de door het systeem gegenereerde constraint naam je niets vertelt over de tabel of de constraint, moet je je constraints een naam geven.

in het volgende voorbeeld wordt de primaire sleutelbeperking gemaakt en benoemd, als onderdeel van het CREATE TABLE commando voor de TROUBLE table (let op de CONSTRAINT clausule):

de CONSTRAINT clausule van het CREATE TABLE Commando noemt de constraint (in dit geval TROUBLE_PK). U kunt deze constraintnaam later gebruiken wanneer u beperkingen in-of uitschakelt.