Radionica programiranje 32.

Relacije
Integriteti

Strani ključ mogu imati samo tablice tipa InnoDB.
Polaznici tečaja - Računi
Relacija 1:M
Integritet, kopiram SQL od tablice racuni:
  INDEX `par_ind1` (`id_polaznika`),
  CONSTRAINT `id_polaznika`
    FOREIGN KEY (`id_polaznika`)
    REFERENCES `polaznici_tecaja` (`id_polaznika`)
    ON DELETE CASCADE ON UPDATE CASCADE,
Objašnjenje: strani ključ u tablici računi je id_polaznika, treba ga indeksirati. Ograničenje se zasniva na stranom ključu id_polaznika i glasi:
- kad obrišemo polaznika, automatski se brišu svi njegovi računi,
- kad promjenimo nešto kod polaznika, automatski se te promjene dogode i u tablici računi
- najprije moramo unijeti polaznika u tablici polaznici tecaja, ako ga tamo još nema, pa tek onda možemo tom polazniku napraviti račun.

Ovo gore vrijedi za svaku relaciju 1:M, ukoliko smo se odlučili za sve opcije. Na primjer, ako ne napišemo
ON DELETE CASCADE ON UPDATE CASCADE
onda je predzadano restrict = bit će nam javljeno da ne možemo obrisati "roditelja" koji ima "djecu", pa ćemo morati brisati ručno retke u tablici M, koji pripadaju roditelju kojeg želimo obrisati.

Na dijagramu gore je znak beskonačno umjesto znaka M.

Tečajevi:Razredi
1:1

Tečajevi:Stavke računa
1:1

Ostali odnosi su svi 1:M

SQL script cijele baze podataka je ovdje:
Skinite bazu podataka Mariva u MySQL verziji dump1_InnoDB.sql


Primjedbe