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

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

CREATE TABLE OMGEVINGSVERGUNNING (
    OMGEVINGSVERGUNNING_ID NUMBER PRIMARY KEY
);

CREATE TABLE UITVOERDER_GRAAFWERKZAAMHEDEN (
    RECHTSPERSOON_ID NUMBER PRIMARY KEY
);

CREATE TABLE GRONDBEHEERDER (
    RECHTSPERSOON_ID NUMBER PRIMARY KEY
);

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

CREATE TABLE LEVERANCIER (
    RECHTSPERSOON_ID NUMBER PRIMARY KEY,
    NAAM VARCHAR2(200),
    NUMMER VARCHAR2(255)
);

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

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

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

CREATE TABLE MOOR_MELDING (
    MOOR_MELDING_ID NUMBER PRIMARY KEY,
    ADRESAANDUIDING VARCHAR2(255),
    BETREFT_OPBREKING_ID NUMBER,
    DATUMAANMELDING DATE,
    DATUMGOEDKEURING DATE,
    DOET_RECHTSPERSOON_ID NUMBER,
    EINDTIJD TIMESTAMP,
    GOEDGEKEURD NUMBER(1),
    HERSTELWERKZAAMHEDENVEREIST NUMBER(1),
    OMSCHRIJVINGHERSTELWERKZAAMHEDEN CLOB,
    PUBLICEREN NUMBER(1),
    STARTTIJD TIMESTAMP,
    VERPLICHT_TOT_OMGEVINGSVERGUNNING_ID NUMBER,
    WEGBEHEERDER VARCHAR2(80)
);

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

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

CREATE TABLE PROCES_VERBAAL_MOOR_MELDING (
    PROCES_VERBAAL_MOOR_MELDING_ID NUMBER PRIMARY KEY,
    BETREFT_MOOR_MELDING_ID NUMBER,
    DATUM DATE,
    GOEDKEURING NUMBER(1),
    HEEFT_DOCUMENT_ID NUMBER,
    OPMERKINGEN CLOB,
    VERLEENT_MEDEWERKER_ID NUMBER
);

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)

