Tabela je v prvi normalni obliki, če so vsi njeni atributi atomarni - vsaka celica vsebuje le eno vrednost.
Primer:
Predmet | Profesor | Smer |
---|---|---|
Seminar I | J. Moder | Pedagoška |
Analiza III | B. Novak | Teoretična, Uporabna |
Računalništvo II | K. Perko | Uporabna |
Fizika | M. Jazbec | Pedagoška, Uporabna, Teoretična |
V stolpcu Smer se lahko pojavi več vrednosti - tabela ni v prvi normalni obliki!
Predmet | Profesor |
---|---|
Seminar I | J. Moder |
Analiza III | B. Novak |
Računalništvo II | K. Perko |
Fizika | M. Jazbec |
Predmet |
Smer |
---|---|
Seminar I | Pedagoška |
Analiza III | Teoretična |
Analiza III | Uporabna |
Računalništvo II | Uporabna |
Fizika | Pedagoška |
Fizika | Uporabna |
Fizika | Teoretična |
Tabela je v drugi normalni obliki, če je v prvi normalni obliki in nima netrivialnih funkcijskih odvisnosti od prave podmnožice kakšnega kandidata za ključ.
Primer:
Predmet | Profesor | Dan | Ura | Kabinet |
---|---|---|---|---|
Seminar I | J. Moder | Sreda | 10:00 | 23 |
Analiza III | B. Novak | Četrtek | 12:00 | 34 |
Računalništvo II | K. Perko | Sreda | 9:00 | 12 |
Uvod v programiranje | K. Perko | Ponedeljek | 11:00 | 12 |
Fizika | M. Jazbec | Torek | 14:00 | 17 |
Do težave pride, če npr. profesor zamenja kabinet - moramo popraviti povsod!
Predmet | Profesor |
Dan | Ura |
---|---|---|---|
Seminar I | J. Moder | Sreda | 10:00 |
Analiza III | B. Novak | Četrtek | 12:00 |
Računalništvo II | K. Perko | Sreda | 9:00 |
Uvod v programiranje | K. Perko | Ponedeljek | 11:00 |
Fizika | M. Jazbec | Torek | 14:00 |
Profesor | Kabinet |
---|---|
J. Moder | 23 |
B. Novak | 34 |
K. Perko | 12 |
M. Jazbec | 17 |
V praksi je pogosto en sam kandidat za ključ, ta pa sestoji iz enega stolpca - taka tabela je že v drugi normalni obliki.
Tabela je v tretji normalni obliki, če je v drugi normalni obliki in nima tranzitivnih funkcijskih odvisnosti od kakšnega kandidata za ključ.
Primer:
Predmet | Profesor | Dan | Ura | Kabinet |
---|---|---|---|---|
Seminar I | J. Moder | Sreda | 10:00 | 23 |
Analiza III | B. Novak | Četrtek | 12:00 | 34 |
Računalništvo II | K. Perko | Sreda | 9:00 | 12 |
Uvod v programiranje | K. Perko | Ponedeljek | 11:00 | 12 |
Fizika | M. Jazbec | Torek | 14:00 | 17 |
Spet bodo težave, če profesor zamenja kabinet.
Predmet | Profesor |
Dan | Ura |
---|---|---|---|
Seminar I | J. Moder | Sreda | 10:00 |
Analiza III | B. Novak | Četrtek | 12:00 |
Računalništvo II | K. Perko | Sreda | 9:00 |
Uvod v programiranje | K. Perko | Ponedeljek | 11:00 |
Fizika | M. Jazbec | Torek | 14:00 |
Profesor | Kabinet |
---|---|
J. Moder | 23 |
B. Novak | 34 |
K. Perko | 12 |
M. Jazbec | 17 |
Običajno normaliziramo (vsaj) do tretje normalne oblike.
ER diagram:
Tri tabele:
Dodatne omejitve:
CREATE TABLE film (
id integer PRIMARY KEY AUTOINCREMENT,
naslov text NOT NULL,
leto integer NOT NULL CHECK (leto > 1900),
dolzina integer NOT NULL CHECK (dolzina > 0),
UNIQUE (naslov, leto)
);
CREATE TABLE dvorana (
id integer PRIMARY KEY AUTOINCREMENT,
kapaciteta integer NOT NULL CHECK (kapaciteta > 0)
);
CREATE TABLE spored (
id integer PRIMARY KEY AUTOINCREMENT,
film integer NOT NULL REFERENCES film(id),
dvorana integer NOT NULL REFERENCES dvorana(id),
termin datetime NOT NULL,
UNIQUE (dvorana, termin)
);
CREATE TABLE kraj (
posta integer PRIMARY KEY,
kraj text NOT NULL
);
CREATE TABLE oseba (
emso text PRIMARY KEY,
ime text NOT NULL,
priimek text NOT NULL,
ulica text NOT NULL,
posta integer NOT NULL
REFERENCES kraj(posta)
);
CREATE TABLE racun (
stevilka integer PRIMARY KEY
AUTOINCREMENT,
lastnik text NOT NULL
REFERENCES oseba(emso)
);
CREATE TABLE transakcija (
id integer PRIMARY KEY
AUTOINCREMENT,
racun integer NOT NULL
REFERENCES racun(stevilka),
znesek integer NOT NULL,
cas timestamp NOT NULL
DEFAULT CURRENT_TIMESTAMP,
opis text
);