drop table if exists Artysta;
drop table if exists Eksponat;
drop table if exists Galeria;
drop table if exists Instytucja;
drop table if exists Przechowanie;
drop table if exists Wypozyczenia;

CREATE TABLE Artysta (
    ID varchar(10)  NOT NULL,
    Imie varchar(15)  NOT NULL,
    Nazwisko varchar(25)  NOT NULL,
    Data_urodzenia date  NOT NULL,
    Data_smierci date
    CONSTRAINT Artysta_pk PRIMARY KEY (ID)
);

CREATE TABLE Eksponat (
    ID varchar(10)  NOT NULL,
    Tytul varchar(50)  NOT NULL,
    Typ varchar(50)  NOT NULL,
    Wysokosc_w_cm int  NOT NULL,
    Szerokos_w_cm int  NOT NULL,
    Waga_w_g int  NOT NULL,
    ID_Artysty varchar(10),
    CONSTRAINT Eksponat_pk PRIMARY KEY (ID)
);

CREATE TABLE Galeria (
    ID varchar(10)  NOT NULL,
    Nazwa varchar(50)  NOT NULL,
    Sala varchar(50)  NOT NULL,
    CONSTRAINT Galeria_pk PRIMARY KEY (ID)
);

CREATE TABLE Instytucja (
    ID varchar(10)  NOT NULL,
    Nazwa varchar(50)  NOT NULL,
    Miasto varchar(50)  NOT NULL,
    CONSTRAINT Instytucja_pk PRIMARY KEY (ID)
);

CREATE TABLE Przechowanie (
    Eksponat_ID varchar(10)  NOT NULL,
    Miejsce varchar(50) check (Miejsce in ('Muzeum','Schowek','Wypozyczony')) NOT NULL,
    ID_Galerii varchar(10),
    ID_Instytucji varchar(10),
    CONSTRAINT Przechowanie_pk PRIMARY KEY (Eksponat_ID)
);

CREATE TABLE Wypozyczenia (
    Numerek int  NOT NULL,
    Eksponat_ID varchar(10)  NOT NULL,
    Poczatek date  NOT NULL,
    Koniec date,
    ID_Galerii varchar(10),
    ID_Instytucji varchar(10),
    CONSTRAINT Wypozyczenia_pk PRIMARY KEY (Numerek)
);

ALTER TABLE Eksponat ADD CONSTRAINT Eksponat_Artysta
    FOREIGN KEY (ID_Artysty)
    REFERENCES Artysta (ID)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

ALTER TABLE Przechowanie ADD CONSTRAINT Przechowania_Eksponat
    FOREIGN KEY (Eksponat_ID)
    REFERENCES Eksponat (ID)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

ALTER TABLE Przechowanie ADD CONSTRAINT Przechowanie_Galeria
    FOREIGN KEY (ID_Galerii)
    REFERENCES Galeria (ID)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

ALTER TABLE Przechowanie ADD CONSTRAINT Przechowanie_Instytucja
    FOREIGN KEY (ID_Instytucji)
    REFERENCES Instytucja (ID)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

ALTER TABLE Wypozyczenia ADD CONSTRAINT Wypozyczenia_Eksponat
    FOREIGN KEY (Eksponat_ID)
    REFERENCES Eksponat (ID)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

