CREATE TABLE wydawnictwa(
id_wydawnictwo NUMBER(10) CONSTRAINT wydawnictwo_pk PRIMARY KEY,
nazwa VARCHAR2(20) CONSTRAINT wydawnictwo_nazwa_u UNIQUE,
ulica VARCHAR2(30),
nr_domu VARCHAR2(8),
nr_lokalu VARCHAR2(4),
kod_pocztowy VARCHAR2(6),
poczta VARCHAR2(20)
)
/
--
CREATE TABLE ksiazki(
id_ksiazka NUMBER(6) CONSTRAINT ksiazka_pk PRIMARY KEY,
tytul VARCHAR2(30) CONSTRAINT ksiazka_tytul_nn NOT NULL
)
/
--
CREATE TABLE autorzy(
id_autor NUMBER(6) CONSTRAINT autor_pk PRIMARY KEY,
nazwisko VARCHAR2(20) CONSTRAINT autor_nazwisko_nn NOT NULL,
imie VARCHAR2(20) CONSTRAINT autor_imie_nn NOT NULL
)
/
--
CREATE TABLE autorzy_ksiazek(
waznosc NUMBER(2),
-- najwazniejszy autor ma waznosci o wartosci 1, kolejny 2, itd.
id_ksiazka NUMBER(6) CONSTRAINT ak_ksiazka_fk REFERENCES ksiazki(id_ksiazka),
id_autor NUMBER(6) CONSTRAINT ak_autor_fk REFERENCES autorzy(id_autor),
CONSTRAINT ak_pk PRIMARY KEY (id_ksiazka, id_autor)
)
/
--
CREATE TABLE egzemplarze(
id_egzemplarz NUMBER(6) CONSTRAINT egzemplarz_pk PRIMARY KEY,
id_ksiazka NUMBER(6) CONSTRAINT egzemplarz_ksiazka_fk REFERENCES ksiazki(id_ksiazka),
id_wydawnictwo NUMBER(6) CONSTRAINT egzemplarz_wydawnictwo_fk REFERENCES wydawnictwa(id_wydawnictwo),
-- informacja o wydaniu moze byc przedstawiona w postaci oddzielnej relacji
rok_wydania NUMBER(4) CONSTRAINT egzemplarz_rok_wydania_nn NOT NULL,
-- stan = 0 oznacza, ze dany egzemplarz jest wypozyczony
-- stan = 1 oznacza, ze dany egzemplarz jest dostepny
-- informacje o stanie egzemplarza mozna takze uzyskac na podstawie wypozyczen
stan NUMBER(1) DEFAULT 1 CONSTRAINT egzemplarz_stan_ck CHECK (stan = 0 OR stan = 1)
)
/
--
CREATE TABLE pracownicy(
id_pracownik NUMBER(6) CONSTRAINT pracownik_pk PRIMARY KEY,
nazwisko VARCHAR2(20) CONSTRAINT pracownik_nazwisko_nn NOT NULL,
imie VARCHAR2(20) CONSTRAINT pracownik_imie_nn NOT NULL,
wynagrodzenie NUMBER(8,2) DEFAULT(10000),
-- informacja o stanowisku moze byc przedstawiona w postaci oddzielnej relacji
stanowisko VARCHAR2(20) DEFAULT 'Bibliotekarz'
)
/
--
CREATE TABLE faktury(
id_faktura NUMBER(6) CONSTRAINT faktura_pk PRIMARY KEY,
id_wydawnictwo NUMBER(10) CONSTRAINT faktura_wydawnictwo_fk REFERENCES wydawnictwa(id_wydawnictwo),
id_pracownik NUMBER(6) CONSTRAINT faktura_pracownik_fk REFERENCES pracownicy(id_pracownik),
data date DEFAULT(sysdate)
-- faktura moze zawierac takze informacje o sumie
)
/
--
CREATE TABLE pozycje_faktur(
id_pozycja_faktury NUMBER(4) CONSTRAINT pf_pk PRIMARY KEY,
-- jezeli jak klucz glowny zostaloby uzyte (id_faktura, id_ksiazka)
-- to na jednej fakturze moglibysmy miec tylko jedno wydanie danej ksiazki
id_faktura NUMBER(6) CONSTRAINT pf_faktura_fk REFERENCES faktury(id_faktura),
id_ksiazka NUMBER(6) CONSTRAINT pf_ksiazka_fk REFERENCES ksiazki(id_ksiazka),
rok_wydania NUMBER(6) CONSTRAINT pf_rok_wydania_nn NOT NULL,
ilosc NUMBER(6) CONSTRAINT pf_ilosc_nn NOT NULL,
cena NUMBER(8,2) CONSTRAINT pf_cena_nn NOT NULL
)
/
--
CREATE TABLE czytelnicy(
id_czytelnik NUMBER(10) CONSTRAINT czytelnik_pk PRIMARY KEY,
nazwisko VARCHAR2(30) CONSTRAINT czytelnik_nazwisko_nn NOT NULL,
imie VARCHAR2(30) CONSTRAINT czytelnik_imie_nn NOT NULL,
ulica VARCHAR2(30),
nr_domu VARCHAR2(8),
nr_lokalu VARCHAR2(4),
kod_pocztowy VARCHAR2(6),
poczta VARCHAR2(20),
kara NUMBER(6)
)
/
--
CREATE TABLE wypozyczenia(
id_wypozyczenie NUMBER(10) CONSTRAINT wypozyczenie_pk PRIMARY KEY,
id_czytelnik NUMBER(10) CONSTRAINT wypozyczenie_czytelnik_fk REFERENCES czytelnicy(id_czytelnik),
id_egzemplarz NUMBER(6) CONSTRAINT wypozyczenie_egzemplarz_fk REFERENCES egzemplarze(id_egzemplarz),
-- Pracownik wypozyczajacy ksiazke
id_pracownik_wyp NUMBER(6) CONSTRAINT wypozyczenie_pracownik_wyp_fk REFERENCES pracownicy(id_pracownik),
data_wypozyczenia date DEFAULT(sysdate),
-- Pracownik przyjmujacy zwracana ksiazke
id_pracownik_zwr NUMBER(6) CONSTRAINT wypozyczenie_pracownik_zwr_fk REFERENCES pracownicy(id_pracownik),
data_zwrotu date DEFAULT(NULL)
)
/