Raamatukogu andmebaas Rollid: Raamatute liigitaja - varustab raamatu kleebistega, paigutab sobivasse osakonda/riiulisse Raamatute laenutaja (töötaja) - Leiab sobiva raamatu, sobivusel annab kliendile koju Raamatute otsija/laenutaja (klient) - Otsib raamatut, töötaja abil saab kätte Ülevaataja/korraldaja (kokkuvõtted) - Jälgib tööd ja tulemusi eesmärgiga raamatukogu toimimist hoida ja ladusamaks muuta Andmed (olemid) /tabelid raamatud(pealkiri, aasta) eksemplarid(id, raamatupealkiri, osakond, seisukord) osakonnad(osakonnanimi, telefon) isikud(epost, synniaasta) laenutused(id, klient, tootaja, eksemplar, algaeg, tahtaeg, tagastusaeg) CREATE TABLE rk_raamatud( pealkiri VARCHAR(255) NOT NULL PRIMARY KEY, aasta INT ); CREATE TABLE rk_osakonnad( osakonnanimi VARCHAR(50) NOT NULL PRIMARY KEY, telefon VARCHAR(20) ); CREATE TABLE rk_isikud( epost VARCHAR(50) NOT NULL PRIMARY KEY, synniaasta INT ); CREATE TABLE rk_eksemplarid( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, raamatupealkiri VARCHAR(255) NOT NULL, osakond VARCHAR(50), seisukord ENUM('korras', 'kahjustatud', 'katkine', 'kadunud'), FOREIGN KEY(raamatupealkiri) REFERENCES rk_raamatud(pealkiri), FOREIGN KEY(osakond) REFERENCES rk_osakonnad(osakonnanimi) ); CREATE TABLE rk_laenutused( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, klient VARCHAR(50) NOT NULL, tootaja VARCHAR(50), eksemplar INT NOT NULL, algaeg DATETIME, tahtaeg DATE, tagastusaeg DATETIME, FOREIGN KEY(klient) REFERENCES rk_isikud(epost), FOREIGN KEY(tootaja) REFERENCES rk_isikud(epost), FOREIGN KEY(eksemplar) REFERENCES rk_eksemplarid(id) ); -- DROP TABLE rk_laenutused; SELECT * FROM rk_eksemplarid WHERE raamatupealkiri='Kevade'; SELECT * FROM rk_eksemplarid JOIN rk_osakonnad ON rk_eksemplarid.osakond=rk_osakonnad.osakonnanimi WHERE raamatupealkiri='Kevade'; SELECT * FROM rk_laenutused; SELECT * FROM rk_laenutused; SELECT * FROM rk_laenutused JOIN rk_eksemplarid ON rk_laenutused.eksemplar=rk_eksemplarid.id; SELECT klient, raamatupealkiri FROM rk_laenutused JOIN rk_eksemplarid ON rk_laenutused.eksemplar=rk_eksemplarid.id; -- lisage teise JOINi abil ka raamatu väljaandmisaasta SELECT klient, raamatupealkiri, aasta FROM rk_laenutused JOIN rk_eksemplarid ON rk_laenutused.eksemplar=rk_eksemplarid.id JOIN rk_raamatud ON rk_eksemplarid.raamatupealkiri=rk_raamatud.pealkiri; +--------------+------------------+-------+ | klient | raamatupealkiri | aasta | +--------------+------------------+-------+ | madis@tlu.ee | Meil on veevärk | 1986 | +--------------+------------------+-------+ -- Laenutused humanitaarsaalist SELECT * FROM rk_eksemplarid WHERE osakond='humanitaar'; SELECT * FROM rk_eksemplarid JOIN rk_laenutused ON rk_laenutused.eksemplar=rk_eksemplarid.id WHERE osakond='humanitaar'; SELECT COUNT(*) FROM rk_eksemplarid JOIN rk_laenutused ON rk_laenutused.eksemplar=rk_eksemplarid.id WHERE osakond='humanitaar'; +----------+ | COUNT(*) | +----------+ | 1 | +----------+ UPDATE rk_laenutused SET algaeg='2016-10-18' WHERE id=2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM rk_laenutused; +----+--------------+-------------+-----------+---------------------+---------+-------------+ | id | klient | tootaja | eksemplar | algaeg | tahtaeg | tagastusaeg | +----+--------------+-------------+-----------+---------------------+---------+-------------+ | 1 | madis@tlu.ee | kati@tlu.ee | 3 | 2016-10-20 00:00:00 | NULL | NULL | | 2 | mati@tlu.ee | kati@tlu.ee | 1 | 2016-10-18 00:00:00 | NULL | NULL | | 3 | kati@tlu.ee | kati@tlu.ee | 3 | 2016-10-20 00:00:00 | NULL | NULL | +----+--------------+-------------+-----------+---------------------+---------+-------------+ SELECT klient, DATEDIFF(NOW(), algaeg) FROM rk_laenutused; SELECT klient, DATEDIFF(NOW(), algaeg) AS kulunud FROM rk_laenutused; SELECT klient, DATEDIFF(NOW(), algaeg) AS kulunud FROM rk_laenutused WHERE DATEDIFF(NOW(), algaeg)>1; +-------------+---------+ | klient | kulunud | +-------------+---------+ | mati@tlu.ee | 2 | +-------------+---------+