venerdì 7 febbraio 2014

Oracle: Vincoli e tabelle

In questo periodo sto leggendo il libro SQL Certified Expert Exam Guide di Steve O'Hearm e mi sono imbattuto in alcune tematiche che ritengo interessanti e che voglio segnare in questo blog per futura memoria.
Una di queste tematiche riguarda la creazione di vincoli (constraint) contestualmente alla creazione delle tabelle in Oracle.
In Oracle ci sono cinque tipologie di vincoli che poso essere definite nell'atto di creare una tabella:
  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
In realtà, con l'eccezione di NOT NULL, questi vincoli possono essere definiti tramite un comando di ALTER TABLE anche a valla della creazione di una tabella.
Il vincolo NOT NULL può essere definito solo "inline" sia in fasi di creazione di una tabella:
CREATE TABLE PORTS(
PORT_ID NUMBER,
PORT_NAME VARCHAR2(40) NOT NULL
);
oppure in fase di modifica:
ALTER TABLE PORTS MODIFY PORT_NAME NOT NULL;
Un'altra peculiarità di questo genere di vincolo è la possibilità di specificare un nome per il vincolo stesso:
CREATE TABLE PORTS(
PORT_ID NUMBER,
PORT_NAME VARCHAR2(40) CONSTRINT PORTS_NN NOT NULL
);
oppure:
ALTER TABLE PORTS MODIFY PORT_NAME CONSTRINT PORTS_NN NOT NULL
Quanto appena detto vale anche per gli altri vincoli:
CREATE TABLE VENDORS(
VENDOR_ID NUMBER PRIMARY KEY,
VENDOR_NAME VARCHAR2(30),
STATUS NUMBER(1) CONSTRAINT VENDORS_CHECK CHECK (STATUS IN (4,5)),
CATEGORY VARCHAR2(5)
);
I vincoli di PRIMARY KEY, FOREIGN KEY, CHECK e UNIQUE possono essere definiti anche in "out line":
CREATE TABLE PORTS(
PORT_ID NUMBER,
PORT_NAME VARCHAR2(40),
CONSTRAINT PORTS_PK PRIMARY KEY (PORT_ID)
);
oppure:
ALTER TABLE PORTS ADD CONSTRAINT PORTS_PK PRIMARY KEY (PORT_ID);

Nessun commento:

Posta un commento