· 4 years ago · Jun 05, 2021, 01:16 PM
1CREATE SCHEMA `wypozyczalnia_filmow` DEFAULT CHARACTER SET utf8 ;
2
3
4CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`jezyk` (
5 `idjezyk` INT NOT NULL AUTO_INCREMENT,
6 `jezyk` VARCHAR(45) NOT NULL,
7 PRIMARY KEY (`idjezyk`)
8 );
9
10
11
12
13CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`rezyser` (
14 `idrezyser` INT NOT NULL AUTO_INCREMENT,
15 `imie` VARCHAR(90) NULL,
16 `nazwisko` VARCHAR(90) NULL,
17 PRIMARY KEY (`idrezyser`)
18 );
19
20
21
22
23CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`film` (
24 `idfilm` INT NOT NULL AUTO_INCREMENT,
25 `tytul` VARCHAR(255) NOT NULL,
26 `rok_produkcji` DATE NULL,
27 `dlugosc_min` INT NULL,
28 `opis` VARCHAR(255) NULL,
29 `ocena` INT NULL,
30 `cena` DECIMAL(4,2) NOT NULL,
31 `jezyk_idjezyk` INT NOT NULL,
32 `rezyser_idrezyser` INT NOT NULL,
33 `okres_wypozyczenia` INT NOT NULL,
34 PRIMARY KEY (`idfilm`),
35 CONSTRAINT `fk_film_jezyk1`
36 FOREIGN KEY (`jezyk_idjezyk`)
37 REFERENCES `wypozyczalnia_filmow`.`jezyk` (`idjezyk`),
38 CONSTRAINT `fk_film_rezyser1`
39 FOREIGN KEY (`rezyser_idrezyser`)
40 REFERENCES `wypozyczalnia_filmow`.`rezyser` (`idrezyser`)
41 );
42
43
44
45CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`kategorie` (
46 `idkategorie` INT NOT NULL AUTO_INCREMENT,
47 `kategoria` VARCHAR(45) NULL,
48 PRIMARY KEY (`idkategorie`)
49 );
50
51
52
53CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`kategorie_filmu` (
54 `film_idfilm` INT NOT NULL,
55 `kategorie_idkategorie` INT NOT NULL,
56 CONSTRAINT `fk_kategorie_filmu_film`
57 FOREIGN KEY (`film_idfilm`)
58 REFERENCES `wypozyczalnia_filmow`.`film` (`idfilm`),
59 CONSTRAINT `fk_kategorie_filmu_kategorie1`
60 FOREIGN KEY (`kategorie_idkategorie`)
61 REFERENCES `wypozyczalnia_filmow`.`kategorie` (`idkategorie`)
62 );
63
64
65
66CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`aktorzy` (
67 `idaktorzy` INT NOT NULL AUTO_INCREMENT,
68 `imie` VARCHAR(90) NULL,
69 `nazwisko` VARCHAR(90) NULL,
70 PRIMARY KEY (`idaktorzy`)
71 );
72
73
74
75CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`aktorzy_film` (
76 `film_idfilm` INT NOT NULL,
77 `aktorzy_idaktorzy` INT NOT NULL,
78 CONSTRAINT `fk_aktorzy_film_film1`
79 FOREIGN KEY (`film_idfilm`)
80 REFERENCES `wypozyczalnia_filmow`.`film` (`idfilm`),
81 CONSTRAINT `fk_aktorzy_film_aktorzy1`
82 FOREIGN KEY (`aktorzy_idaktorzy`)
83 REFERENCES `wypozyczalnia_filmow`.`aktorzy` (`idaktorzy`)
84 );
85
86
87
88CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`dane_kontaktowe` (
89 `iddane_kontaktowe` INT NOT NULL AUTO_INCREMENT,
90 `numer_telefonu` VARCHAR(45) NULL,
91 `email` VARCHAR(45) NULL,
92 PRIMARY KEY (`iddane_kontaktowe`));
93
94
95
96CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`adres` (
97 `idadres` INT NOT NULL AUTO_INCREMENT,
98 `ulica` VARCHAR(45) NULL,
99 `nr_budynku` INT NULL,
100 `nr_lokalu` INT NULL,
101 `miasto` VARCHAR(45) NULL,
102 `kod_pocztowy` VARCHAR(45) NULL,
103 PRIMARY KEY (`idadres`));
104
105
106
107CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`klient` (
108 `idklient` INT NOT NULL AUTO_INCREMENT,
109 `imie` VARCHAR(90) NOT NULL,
110 `nazwisko` VARCHAR(90) NOT NULL,
111 `data_urodzenia` DATE NULL,
112 `czas_utworzenia` DATE NULL,
113 `dane_kontaktowe_iddane_kontaktowe` INT NOT NULL,
114 `adres_idadres` INT NOT NULL,
115 PRIMARY KEY (`idklient`),
116 CONSTRAINT `fk_klient_dane_kontaktowe1`
117 FOREIGN KEY (`dane_kontaktowe_iddane_kontaktowe`)
118 REFERENCES `wypozyczalnia_filmow`.`dane_kontaktowe` (`iddane_kontaktowe`),
119 CONSTRAINT `fk_klient_adres1`
120 FOREIGN KEY (`adres_idadres`)
121 REFERENCES `wypozyczalnia_filmow`.`adres` (`idadres`)
122 );
123
124
125
126CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`wypozyczalnia_filmow` (
127 `idwypozyczalnia_filmow` INT NOT NULL AUTO_INCREMENT,
128 `nazwa` VARCHAR(255) NULL,
129 `adres_idadres` INT NOT NULL,
130 PRIMARY KEY (`idwypozyczalnia_filmow`),
131 CONSTRAINT `fk_wypozyczalnia_filmow_adres1`
132 FOREIGN KEY (`adres_idadres`)
133 REFERENCES `wypozyczalnia_filmow`.`adres` (`idadres`)
134 );
135
136
137
138CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`stanowisko` (
139 `idstanowisko` INT NOT NULL AUTO_INCREMENT,
140 `nazwa` VARCHAR(45) NULL,
141 `wyplata` INT NULL,
142 PRIMARY KEY (`idstanowisko`));
143
144
145
146CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`pracownicy` (
147 `idpracownicy` INT NOT NULL AUTO_INCREMENT,
148 `imie` VARCHAR(255) NOT NULL,
149 `nazwisko` VARCHAR(255) NOT NULL,
150 `stanowisko_idstanowisko` INT NOT NULL,
151 `dane_kontaktowe_iddane_kontaktowe` INT NOT NULL,
152 `data_zatrudnienia` DATE NULL,
153 `wypozyczalnia_filmow_idwypozyczalnia_filmow` INT NOT NULL,
154 `adres_idadres` INT NOT NULL,
155 PRIMARY KEY (`idpracownicy`),
156 CONSTRAINT `fk_pracownicy_stanowisko1`
157 FOREIGN KEY (`stanowisko_idstanowisko`)
158 REFERENCES `wypozyczalnia_filmow`.`stanowisko` (`idstanowisko`),
159 CONSTRAINT `fk_pracownicy_dane_kontaktowe1`
160 FOREIGN KEY (`dane_kontaktowe_iddane_kontaktowe`)
161 REFERENCES `wypozyczalnia_filmow`.`dane_kontaktowe` (`iddane_kontaktowe`),
162 CONSTRAINT `fk_pracownicy_wypozyczalnia_filmow1`
163 FOREIGN KEY (`wypozyczalnia_filmow_idwypozyczalnia_filmow`)
164 REFERENCES `wypozyczalnia_filmow`.`wypozyczalnia_filmow` (`idwypozyczalnia_filmow`),
165 CONSTRAINT `fk_pracownicy_adres1`
166 FOREIGN KEY (`adres_idadres`)
167 REFERENCES `wypozyczalnia_filmow`.`adres` (`idadres`)
168 );
169
170
171
172CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`inwentarz` (
173 `idinwentarz` INT NOT NULL AUTO_INCREMENT,
174 `film_idfilm` INT NOT NULL,
175 `wypozyczalnia_filmow_idwypozyczalnia_filmow` INT NOT NULL,
176 PRIMARY KEY (`idinwentarz`),
177 CONSTRAINT `fk_inwentarz_film1`
178 FOREIGN KEY (`film_idfilm`)
179 REFERENCES `wypozyczalnia_filmow`.`film` (`idfilm`),
180 CONSTRAINT `fk_inwentarz_wypozyczalnia_filmow1`
181 FOREIGN KEY (`wypozyczalnia_filmow_idwypozyczalnia_filmow`)
182 REFERENCES `wypozyczalnia_filmow`.`wypozyczalnia_filmow` (`idwypozyczalnia_filmow`)
183 );
184
185CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`wypozyczenie` (
186 `klient_idklient` INT NOT NULL,
187 `inwentarz_idinwentarz` INT NOT NULL,
188 `czas_wypozyczenia` DATE NULL,
189 `idwypozyczenie` INT NOT NULL AUTO_INCREMENT,
190 `czas_zwrotu` DATE NULL,
191 PRIMARY KEY (`idwypozyczenie`),
192 CONSTRAINT `fk_wypozyczenie_klient1`
193 FOREIGN KEY (`klient_idklient`)
194 REFERENCES `wypozyczalnia_filmow`.`klient` (`idklient`),
195 CONSTRAINT `fk_wypozyczenie_inwentarz1`
196 FOREIGN KEY (`inwentarz_idinwentarz`)
197 REFERENCES `wypozyczalnia_filmow`.`inwentarz` (`idinwentarz`)
198 );
199
200CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`zaplata` (
201 `idzaplata` INT NOT NULL AUTO_INCREMENT,
202 `wartosc` INT NOT NULL,
203 `data_zaplaty` DATE NULL,
204 `klient_idklient` INT NOT NULL,
205 `pracownicy_idpracownicy` INT NOT NULL,
206 `wypozyczenie_idwypozyczenie` INT NOT NULL,
207 PRIMARY KEY (`idzaplata`),
208 CONSTRAINT `fk_zaplata_klient1`
209 FOREIGN KEY (`klient_idklient`)
210 REFERENCES `wypozyczalnia_filmow`.`klient` (`idklient`),
211 CONSTRAINT `fk_zaplata_pracownicy1`
212 FOREIGN KEY (`pracownicy_idpracownicy`)
213 REFERENCES `wypozyczalnia_filmow`.`pracownicy` (`idpracownicy`),
214 CONSTRAINT `fk_zaplata_wypozyczenie1`
215 FOREIGN KEY (`wypozyczenie_idwypozyczenie`)
216 REFERENCES `wypozyczalnia_filmow`.`wypozyczenie` (`idwypozyczenie`)
217 );
218
219
220CREATE TABLE IF NOT EXISTS `wypozyczalnia_filmow`.`podsumowanie_transakcji` (
221 `suma_transakcji` DECIMAL(10,2),
222 `ilosc_transakcji` INT,
223 `ostatnia_akcja` DATE
224 );
225
226commit;
227
228delimiter $$
229create trigger sprawdz_numer_telefonu before insert on dane_kontaktowe
230for each row
231begin
232if (new.numer_telefonu regexp '^[0-9]{9}$') = 0 then
233signal sqlstate '45000'
234set message_text = 'Niepoprawny numer telefonu';
235end if;
236end$$
237delimiter ;
238
239
240delimiter $$
241create trigger sprawdz_email before insert on dane_kontaktowe
242for each row
243begin
244if (new.email regexp '^[^@].*\@.*\..*[^@]$') = 0 then
245signal sqlstate '45000'
246set message_text = 'Niepoprawny email';
247end if;
248end$$
249delimiter ;
250
251
252delimiter $$
253create trigger sprawdz_kod_pocztowy before insert on adres
254for each row
255begin
256if (new.kod_pocztowy regexp '^[0-9]{2}-[0-9]{3}$') = 0 then
257signal sqlstate '45000'
258set message_text = 'Niepoprawny kod pocztowy';
259end if;
260end$$
261delimiter ;
262
263
264delimiter $$
265create trigger suma_wartosci before insert on zaplata
266for each row begin
267update podsumowanie_transakcji
268set suma_transakcji = suma_transakcji + new.wartosc;
269update podsumowanie_transakcji
270set ilosc_transakcji = ilosc_transakcji + 1;
271update podsumowanie_transakcji
272set ostatnia_akcja = current_date();
273end;
274$$
275delimiter ;
276
277
278delimiter $$
279create trigger usun_adres after delete on klient
280for each row begin
281delete from adres
282where adres.idadres = old.adres_idadres;
283end $$
284delimiter ;
285
286commit;
287
288