CREATE TABLE DOCUMENT (
    DOCUMENT_ID INTEGER PRIMARY KEY,
    COCUMENTBESCHRIJVING VARCHAR(255),
    DATUMCREATIEDOCUMENT DATE,
    DATUMONTVANGSTDOCUMENT DATE,
    DATUMVERZENDINGDOCUMENT DATE,
    DOCUMENTAUTEUR VARCHAR(200),
    DOCUMENTIDENTIFICATIE VARCHAR(255),
    DOCUMENTTITEL VARCHAR(200),
    VERTROUWELIJKAANDUIDING VARCHAR(20)
);

CREATE TABLE RECHTSPERSOON (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY,
    ADRESBINNENLAND VARCHAR(255),
    ADRESBUITENLAND VARCHAR(255),
    ADRESCORRESPONDENTIE VARCHAR(100),
    EMAILADRES VARCHAR(80),
    FAXNUMMER VARCHAR(20),
    IDENTIFICATIE VARCHAR(255),
    KVKNUMMER VARCHAR(20),
    NAAM VARCHAR(200),
    RECHTSVORM VARCHAR(100),
    REKENINGNUMMER VARCHAR(255),
    TELEFOONNUMMER VARCHAR(20)
);

CREATE TABLE OMGEVINGSVERGUNNING (
    OMGEVINGSVERGUNNING_ID INTEGER PRIMARY KEY
);

CREATE TABLE UITVOERDER_GRAAFWERKZAAMHEDEN (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY
);

CREATE TABLE GRONDBEHEERDER (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY
);

CREATE TABLE OPBREKING (
    OPBREKING_ID INTEGER PRIMARY KEY,
    MAAKT_RECHTSPERSOON_ID INTEGER
);

CREATE TABLE LEVERANCIER (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY,
    NAAM VARCHAR(200),
    NUMMER VARCHAR(255)
);

CREATE TABLE MEDEWERKER (
    MEDEWERKER_ID INTEGER PRIMARY KEY,
    ACHTERNAAM VARCHAR(200),
    DATUMINDIENST DATE,
    DATUMUITDIENST DATE,
    EMAILADRES VARCHAR(255),
    EXTERN BOOLEAN,
    FUNCTIE VARCHAR(50),
    GELEVERD_VIA_RECHTSPERSOON_ID INTEGER,
    GESLACHTSAANDUIDING VARCHAR(255),
    MEDEWERKERIDENTIFICATIE VARCHAR(255),
    MEDEWERKERTOELICHTING VARCHAR(255),
    ROEPNAAM VARCHAR(255),
    TELEFOONNUMMER VARCHAR(20),
    VOORLETTERS VARCHAR(20),
    VOORVOEGSELACHTERNAAM VARCHAR(255)
);

CREATE TABLE KP_GRNDBHRDR_RCHTSPRSN (
    KP_GRNDBHRDR_RCHTSPRSN_ID INTEGER PRIMARY KEY,
    GRONDBEHEERDER_ID INTEGER,
    RECHTSPERSOON_ID INTEGER
);

CREATE TABLE KP_UTVRDR_GRFWRKZMHDN_GRNDBHRDR (
    KP_UTVRDR_GRFWRKZMHDN_GRNDBHRDR_ID INTEGER PRIMARY KEY,
    UITVOERDER_GRAAFWERKZAAMHEDEN_ID INTEGER,
    GRONDBEHEERDER_ID INTEGER
);

CREATE TABLE MOOR_MELDING (
    MOOR_MELDING_ID INTEGER PRIMARY KEY,
    ADRESAANDUIDING VARCHAR(255),
    BETREFT_OPBREKING_ID INTEGER,
    DATUMAANMELDING DATE,
    DATUMGOEDKEURING DATE,
    DOET_RECHTSPERSOON_ID INTEGER,
    EINDTIJD TIMESTAMP,
    GOEDGEKEURD BOOLEAN,
    HERSTELWERKZAAMHEDENVEREIST BOOLEAN,
    OMSCHRIJVINGHERSTELWERKZAAMHEDEN TEXT,
    PUBLICEREN BOOLEAN,
    STARTTIJD TIMESTAMP,
    VERPLICHT_TOT_OMGEVINGSVERGUNNING_ID INTEGER,
    WEGBEHEERDER VARCHAR(80)
);

CREATE TABLE KP_LVRNCR_RCHTSPRSN (
    KP_LVRNCR_RCHTSPRSN_ID INTEGER PRIMARY KEY,
    LEVERANCIER_ID INTEGER,
    RECHTSPERSOON_ID INTEGER
);

CREATE TABLE KP_UTVRDR_GRFWRKZMHDN_LVRNCR (
    KP_UTVRDR_GRFWRKZMHDN_LVRNCR_ID INTEGER PRIMARY KEY,
    UITVOERDER_GRAAFWERKZAAMHEDEN_ID INTEGER,
    LEVERANCIER_ID INTEGER
);

CREATE TABLE PROCES_VERBAAL_MOOR_MELDING (
    PROCES_VERBAAL_MOOR_MELDING_ID INTEGER PRIMARY KEY,
    BETREFT_MOOR_MELDING_ID INTEGER,
    DATUM DATE,
    GOEDKEURING BOOLEAN,
    HEEFT_DOCUMENT_ID INTEGER,
    OPMERKINGEN TEXT,
    VERLEENT_MEDEWERKER_ID INTEGER
);

ALTER TABLE GRONDBEHEERDER ADD CONSTRAINT FK_GRONDBEHEERDER_GEN_RECHTSPERSOON FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- Generalization to RECHTSPERSOON

ALTER TABLE UITVOERDER_GRAAFWERKZAAMHEDEN ADD CONSTRAINT FK_UITVOERDER_GRAAFWERKZAAMHEDEN_GEN_GRONDBEHEERDER FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES GRONDBEHEERDER (RECHTSPERSOON_ID);
-- Generalization to GRONDBEHEERDER

ALTER TABLE LEVERANCIER ADD CONSTRAINT FK_LEVERANCIER_GEN_RECHTSPERSOON FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- Generalization to RECHTSPERSOON

ALTER TABLE KP_LVRNCR_RCHTSPRSN ADD CONSTRAINT FK_KP_LVRNCR_RCHTSPRSN_1 FOREIGN KEY (LEVERANCIER_ID) REFERENCES LEVERANCIER (RECHTSPERSOON_ID);
-- LEVERANCIER (many-to-many junction, Connector_ID: 390)

ALTER TABLE KP_LVRNCR_RCHTSPRSN ADD CONSTRAINT FK_KP_LVRNCR_RCHTSPRSN_2 FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- RECHTSPERSOON (many-to-many junction, Connector_ID: 390)

ALTER TABLE KP_UTVRDR_GRFWRKZMHDN_GRNDBHRDR ADD CONSTRAINT FK_KP_UTVRDR_GRFWRKZMHDN_GRNDBHRDR_1 FOREIGN KEY (UITVOERDER_GRAAFWERKZAAMHEDEN_ID) REFERENCES UITVOERDER_GRAAFWERKZAAMHEDEN (RECHTSPERSOON_ID);
-- UITVOERDER_GRAAFWERKZAAMHEDEN (many-to-many junction, Connector_ID: 720)

ALTER TABLE KP_UTVRDR_GRFWRKZMHDN_GRNDBHRDR ADD CONSTRAINT FK_KP_UTVRDR_GRFWRKZMHDN_GRNDBHRDR_2 FOREIGN KEY (GRONDBEHEERDER_ID) REFERENCES GRONDBEHEERDER (RECHTSPERSOON_ID);
-- GRONDBEHEERDER (many-to-many junction, Connector_ID: 720)

ALTER TABLE KP_UTVRDR_GRFWRKZMHDN_LVRNCR ADD CONSTRAINT FK_KP_UTVRDR_GRFWRKZMHDN_LVRNCR_1 FOREIGN KEY (UITVOERDER_GRAAFWERKZAAMHEDEN_ID) REFERENCES UITVOERDER_GRAAFWERKZAAMHEDEN (RECHTSPERSOON_ID);
-- UITVOERDER_GRAAFWERKZAAMHEDEN (many-to-many junction, Connector_ID: 721)

ALTER TABLE KP_UTVRDR_GRFWRKZMHDN_LVRNCR ADD CONSTRAINT FK_KP_UTVRDR_GRFWRKZMHDN_LVRNCR_2 FOREIGN KEY (LEVERANCIER_ID) REFERENCES LEVERANCIER (RECHTSPERSOON_ID);
-- LEVERANCIER (many-to-many junction, Connector_ID: 721)

ALTER TABLE KP_GRNDBHRDR_RCHTSPRSN ADD CONSTRAINT FK_KP_GRNDBHRDR_RCHTSPRSN_1 FOREIGN KEY (GRONDBEHEERDER_ID) REFERENCES GRONDBEHEERDER (RECHTSPERSOON_ID);
-- GRONDBEHEERDER (many-to-many junction, Connector_ID: 743)

ALTER TABLE KP_GRNDBHRDR_RCHTSPRSN ADD CONSTRAINT FK_KP_GRNDBHRDR_RCHTSPRSN_2 FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- RECHTSPERSOON (many-to-many junction, Connector_ID: 743)

ALTER TABLE PROCES_VERBAAL_MOOR_MELDING ADD CONSTRAINT FK_PROCES_VERBAAL_MOOR_MELDING_HEEFT FOREIGN KEY (HEEFT_DOCUMENT_ID) REFERENCES DOCUMENT (DOCUMENT_ID);
-- HEEFT (0..* to 0..1, Connector_ID: 725)

ALTER TABLE OPBREKING ADD CONSTRAINT FK_OPBREKING_MAAKT FOREIGN KEY (MAAKT_RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- MAAKT (1.. to 0..*, Connector_ID: 726)

ALTER TABLE MOOR_MELDING ADD CONSTRAINT FK_MOOR_MELDING_DOET FOREIGN KEY (DOET_RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- DOET (1 to 0..*, Connector_ID: 728)

ALTER TABLE MOOR_MELDING ADD CONSTRAINT FK_MOOR_MELDING_VERPLICHT_TOT FOREIGN KEY (VERPLICHT_TOT_OMGEVINGSVERGUNNING_ID) REFERENCES OMGEVINGSVERGUNNING (OMGEVINGSVERGUNNING_ID);
-- VERPLICHT_TOT (0..* to 0..1, Connector_ID: 729)

ALTER TABLE MOOR_MELDING ADD CONSTRAINT FK_MOOR_MELDING_BETREFT FOREIGN KEY (BETREFT_OPBREKING_ID) REFERENCES OPBREKING (OPBREKING_ID);
-- BETREFT (0..1 to 1, Connector_ID: 730)

ALTER TABLE PROCES_VERBAAL_MOOR_MELDING ADD CONSTRAINT FK_PROCES_VERBAAL_MOOR_MELDING_BETREFT FOREIGN KEY (BETREFT_MOOR_MELDING_ID) REFERENCES MOOR_MELDING (MOOR_MELDING_ID);
-- BETREFT (1 to 0..*, Connector_ID: 731)

ALTER TABLE PROCES_VERBAAL_MOOR_MELDING ADD CONSTRAINT FK_PROCES_VERBAAL_MOOR_MELDING_VERLEENT FOREIGN KEY (VERLEENT_MEDEWERKER_ID) REFERENCES MEDEWERKER (MEDEWERKER_ID);
-- VERLEENT (1 to 0..*, Connector_ID: 2183)

ALTER TABLE MEDEWERKER ADD CONSTRAINT FK_MEDEWERKER_GELEVERD_VIA FOREIGN KEY (GELEVERD_VIA_RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- GELEVERD_VIA (0..* to 0..1, Connector_ID: 2194)

