Podatkovne baze 1

Načrtovanje podatkovnih baz


Zgradba/arhitektura podatkovnih baz

Zgradbo podatkovnih baz opisuje trinivojska arhitektura ANSI-SPARC.


Podatkovna neodvisnost


Problemi pri načrtovanju podatkovnih baz

</span>


Ključ uspeha je v sodelovanju z uporabniki!

Pri sodelovanju morajo načrtovalci podatkovnih baz in uporabniki govoriti ‘isti’ jezik, sicer pride do večjih razhajanj med dejanskimi in realiziranimi nalogami.

w:500px w:500px


Nivoji načrtovanja


Koraki načrtovanja


Konceptualni nivo načrtovanja

Izhodišče:


Celovit pristop h konceptualnemu načrtovanju


Zbiranje podatkov


Predstavitev podatkov


Primer

Naziv entitetnega tipa Opis Sinonim Število entitet
Profesor Pedagoški delavec, ki je nosilec enega ali več predmetov Pedagoški delavec Vsaka katedra ima enega ali več profesorjev
Izpitni rok Datum, na katerega je za nek predmet in določeno ciljno skupino (letnik, smer, …) razpisan izpitni rok Rok, pisni izpit, kolokvij Na leto se razpiše okrog 300 pisnih izpitov; vsak predmet mora imeti vsaj tri roke letno
     

</span>


Odnosi med entitetami

(angl. relationship, včasih rečemo tudi relacija)


Odnosi ena na ena (1:1)


Odnosi ena na več (1:n)


Odnosi več na več (m:n)


Konceptualni nivo načrtovanja

Postopek:


Primer opisa sistema


ER diagram

(angl. entity-relationship diagram, tudi entitetno-odnosni diagram)

h:350px


Orodja


Entitetni tip - primeri risanja

w:400px

w:400px

</span>

w:400px

</span> </span>


Števnosti odnosov


Vranja notacija

(angl. crow’s foot notation)


Primer - šola

w:1000px


Primer - knjižnica

w:1000px


Logični nivo načrtovanja


Identifikacija tabel


Integritetne omejitve


Logični model - primer

oseba   (#id_osebe, ime, priimek, starost, kraj_rojstva->kraj(id_kraja))
moski   (#id_osebe->oseba(id_osebe), vojaski_cin)
zenska  (#id_osebe->oseba(id_osebe), dekliski_priimek)
kraj    (#id_kraja, ime, prebivalstvo, drzava->drzava(id_drzave))
drzava  (#id_drzave, ime, prebivalstvo)
bivanje (#id_osebe->oseba(id_osebe), #id_kraja->kraj(id_kraja), leta)

Anomalije in normalizacija podatkov


Napake in potrata prostora

</span>


Rešitev


Zgled

</span>

</span> </span>

</span>


Kaj želimo doseči?

</span>


Funkcijske odvisnosti in ključi

</span>


Prva normalna oblika (1NF)


Dekompozicija

Predmet Profesor
Seminar I J. Moder
Analiza III B. Novak
Računalništvo II K. Perko
Fizika M. Jazbec

</span>

Predmet $\to$ 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

</span> </span>


Druga normalna oblika (2NF)


Dekompozicija


Tretja normalna oblika (3NF)


Dekompozicija


Primer ustvarjanja baze


Konceptualni model

</span>

</span> </span>


Logični model (SQLite)

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)
);

Primer: banka


Konceptualni model

h:600px


Logični model (SQLite)

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)
);

</span>

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
);

</span> </span>