BEGIN; CREATE TABLE osoba ( id INTEGER NOT NULL, imie VARCHAR(50) NOT NULL, nazwisko VARCHAR(100) NOT NULL, data_urodzenia DATE NOT NULL, id_matki INTEGER, id_ojca INTEGER, CONSTRAINT osoba_pk PRIMARY KEY (id), CONSTRAINT osoba_id_dodatnie_chk CHECK (id > 0), CONSTRAINT osoba_matka_fk FOREIGN KEY (id_matki) REFERENCES osoba(id), CONSTRAINT osoba_ojciec_fk FOREIGN KEY (id_ojca) REFERENCES osoba(id), CONSTRAINT osoba_rozni_rodzice_chk CHECK ( id_matki IS NULL OR id_ojca IS NULL OR id_matki <> id_ojca ), CONSTRAINT osoba_nie_wlasna_matka_chk CHECK (id_matki IS NULL OR id_matki <> id), CONSTRAINT osoba_nie_wlasny_ojciec_chk CHECK (id_ojca IS NULL OR id_ojca <> id) ); CREATE TABLE dowod ( nr VARCHAR(20) NOT NULL, id_osoby INTEGER NOT NULL, data_poczatku DATE NOT NULL, data_konca DATE, CONSTRAINT dowod_pk PRIMARY KEY (nr), CONSTRAINT dowod_nr_niepusty_chk CHECK (btrim(nr) <> ''), CONSTRAINT dowod_osoba_fk FOREIGN KEY (id_osoby) REFERENCES osoba(id), CONSTRAINT dowod_okres_chk CHECK ( data_konca IS NULL OR data_poczatku < data_konca ) ); CREATE TABLE adres ( id_osoby INTEGER NOT NULL, data_poczatku DATE NOT NULL, data_konca DATE, ulica VARCHAR(120) NOT NULL, nr_domu VARCHAR(20) NOT NULL, nr_mieszkania VARCHAR(20), kod_pocztowy CHAR(6) NOT NULL, miejscowosc VARCHAR(100) NOT NULL, CONSTRAINT adres_pk PRIMARY KEY (id_osoby, data_poczatku), CONSTRAINT adres_osoba_fk FOREIGN KEY (id_osoby) REFERENCES osoba(id), CONSTRAINT adres_okres_chk CHECK ( data_konca IS NULL OR data_poczatku < data_konca ) ); CREATE TABLE malzenstwo ( id_zony INTEGER NOT NULL, id_meza INTEGER NOT NULL, data_poczatku DATE NOT NULL, data_konca DATE, CONSTRAINT malzenstwo_pk PRIMARY KEY (id_zony, id_meza, data_poczatku), CONSTRAINT malzenstwo_zona_fk FOREIGN KEY (id_zony) REFERENCES osoba(id), CONSTRAINT malzenstwo_maz_fk FOREIGN KEY (id_meza) REFERENCES osoba(id), CONSTRAINT malzenstwo_okres_chk CHECK ( data_konca IS NULL OR data_poczatku < data_konca ), CONSTRAINT malzenstwo_rozne_osoby_chk CHECK (id_zony <> id_meza) ); COMMIT;