Luodaan luvun 1.2 esimerkeissä käytössä ollut Oppilaat-taulu ensin ilman viite-eheys- ja avainmäärityksiä. Taulun määrittely alkaa CREATE TABLE -komennolla, jolle kerrotaan luotavan taulun nimi. Taulun nimen jälkeen luetellaan suluissa pilkulla eroteltuina kaikki siihen tulevien kenttien nimet, niiden tietotyypit ja mahdollisesti määriteltävät pituudet seuraavan esimerkin mukaisesti:
CREATE TABLE Oppilaat (
Sotu CHAR(11),
Sukunimi VARCHAR(50),
Etunimi VARCHAR(50),
Katuosoite VARCHAR(50),
Postinumero CHAR(5),
Puhelin VARCHAR(20),
Laitosnumero SMALLINT,
Aloitusvuosi SMALLINT
)
Jokaiselle kentälle on kuitenkin syytä määritellä, onko kyseessä pakollinen kenttä vai ei. Tämä onnistuu lisäämällä kentän tyyppimäärittelyn jälkeen sanat NOT NULL. Jos kyseessä on pakollinen kenttä niin NULL arvoja ei sallita. Haluttaessa kelpuuttaa myös NULL-arvot voidaan kenttätyypin jälkeen lisätä pelkkä sana NULL tai jättää se kokonaan pois, mutta hyvä tapa on laittaa sekin aina näkyviin.
CREATE TABLE Oppilaat (
Sotu CHAR(11) NOT NULL,
Sukunimi VARCHAR(50) NOT NULL,
Etunimi VARCHAR(50) NOT NULL,
Katuosoite VARCHAR(50) NOT NULL,
Postinumero CHAR(5) NOT NULL,
Puhelin VARCHAR(20) NULL,
Laitosnumero SMALLINT NOT NULL,
Aloitusvuosi SMALLINT NOT NULL
)
Taulu on vielä täysin ilman perusavainta ja tarvittavia viiteavaimia. Avainkentät lisätään SQL-92:ssa CONSTRAINT-määreen avulla seuraavaan tapaan:
CREATE TABLE Oppilaat (
Sotu CHAR(11) NOT NULL,
Sukunimi VARCHAR(50) NOT NULL,
Etunimi VARCHAR(50) NOT NULL,
Katuosoite VARCHAR(50) NOT NULL,
Postinumero CHAR(5) NOT NULL,
Puhelin VARCHAR(20) NULL,
Laitosnumero SMALLINT NOT NULL,
Aloitusvuosi SMALLINT NOT NULL,
CONSTRAINT Oppilaat_PK PRIMARY KEY (SOTU)
)
Yllä muodostimme Oppilaat_PK (oppilaat-taulun Primary Key) -nimisen perusavaimen sotu-kentästä. Avaimen nimeäminen helpottaa sen mahdollista poistamista. Samaan tapaan onnistuu viiteavaimen luominen, jota havainnollistaa seuraava esimerkki:
CREATE TABLE Oppilaat (
Sotu CHAR(11) NOT NULL,
Sukunimi VARCHAR(50) NOT NULL,
Etunimi VARCHAR(50) NOT NULL,
Katuosoite VARCHAR(50) NOT NULL,
Postinumero CHAR(5) NOT NULL,
Puhelin VARCHAR(20) NULL,
Laitosnumero SMALLINT NOT NULL,
Aloitusvuosi SMALLINT NOT NULL,
CONSTRAINT Oppilaat_PK
PRIMARY KEY (Sotu),
CONSTRAINT Oppilaat_pnro
FOREIGN KEY (Postinumero)
REFERENCES Kaupunki (Postinumero),
CONSTRAINT Oppilaat_lnro
FOREIGN KEY (Laitosnro)
REFERENCES Laitokset (Laitosnro)
)
Esimerkissä luotiin Oppilaat_pnro-niminen viiteavain Postinumero-kentästä viittaamaan Kaupunki-tauluun ja Oppilaat_lnro-niminen viiteavain Laitosnro-kentästä viittaamaan Laitokset-tauluun. Useimmissa tietokantaohjelmistoissa voidaan viite-eheys määrittelyn mukana määritellä kuinka pitää toimia, jos viite-eheysmäärittelyyn liittyvän äititaulun vastaavia arvoja muutetaan (UPDATE) tai poistetaan (DELETE). REFERENCES-määreen jälkeen voidaan lisätä ON DELETE ja/tai ON UPDATE -määrittelyjä seuraavanlaisilla lisäehdoilla:
a poistaminen tai päivittäminen "vyöryy" äiti-taulusta lapsi-tauluun
N -lisäehdolla (monesti myös RESTRICT) estetään äiti-taulussa olevan tietueen poistaminen tai päivittäminen, jos siihen on olemassa viittauksia.
T NULL -lisäehdolla (joskus myös NULLIFIES) muutetaan lapsitaulun viittauksiin NULL-arvo.
CREATE TABLE Oppilaat (
Sotu CHAR(11) NOT NULL,
Sukunimi VARCHAR(50) NOT NULL,
Etunimi VARCHAR(50) NOT NULL,
Katuosoite VARCHAR(50) NOT NULL,
Postinumero CHAR(5) NOT NULL,
Puhelin VARCHAR(20) NULL,
Laitosnumero SMALLINT NOT NULL,
Aloitusvuosi SMALLINT NOT NULL,
CONSTRAINT Oppilaat_PK
PRIMARY KEY (sotu),
CONSTRAINT Oppilaat_pnro
FOREIGN KEY (postinumero)
REFERENCES Kaupunki (Postinumero)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT Oppilaat_lnro
FOREIGN KEY (laitosnro)
REFERENCES Laitokset (Laitosnro)
ON DELETE NO ACTION
ON UPDATE CASCADE
)
Taulu ei ole vieläkään aivan valmis. Sillä vielä tulee määritellä mahdolliset oletusarvot ja kelpaavat arvot. CHECK-lauseeseen voidaan upottaa SELECT-kysely ja tehdä laskutoimituksia, joiden pohjalta päätetään kenttään kelpaavat arvot. DEFAULT-määreellä voidaan antaa oletusarvo kentän arvoksi, jos siihen ei syötetä mitään. UNIQUE-määreellä voidaan estää kaksoisarvot tietyssä sarakkeessa tai sarakkeissa. CHECK, DEFAULT ja UNIQUE -määreitä ei löydy vielä kaikista ohjelmistoista.
CREATE TABLE Oppilaat (
Sotu CHAR(11) NOT NULL,
Sukunimi VARCHAR(50) NOT NULL,
Etunimi VARCHAR(50) NOT NULL,
Katuosoite VARCHAR(50) NOT NULL,
Postinumero CHAR(5) NOT NULL,
Puhelin VARCHAR(20) DEFAULT 'ei numeroa',
Laitosnumero SMALLINT DEFAULT 1,
Aloitusvuosi SMALLINT DEFAULT 1999,
CONSTRAINT Oppilaat_PK
PRIMARY KEY (sotu),
CONSTRAINT Oppilaat_pnro
FOREIGN KEY (postinumero)
REFERENCES Kaupunki (Postinumero)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT Oppilaat_lnro
FOREIGN KEY (laitosnro)
REFERENCES Laitokset (Laitosnro)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT Aloitusvuosi_tark
CHECK (aloitusvuosi > 1990)
)