CREATE TABLE INGESCHREVENPERSOON (
    INGESCHREVENPERSOON_ID INTEGER PRIMARY KEY,
    ADRESHERKOMST VARCHAR(255),
    ANUMMER VARCHAR(20),
    BESCHRIJVINGLOCATIE VARCHAR(200),
    BUITENLANDSREISDOCUMENT VARCHAR(80),
    BURGERLIJKESTAAT VARCHAR(255),
    DATUMBEGINGELDIGHEIDVERBLIJFPLAATS DATE,
    DATUMEINDEGELDIGHEIDVERBLIJFSPLAATS DATE,
    DATUMINSCHRIJVINGGEMEENTE DATE,
    DATUMOPSCHORTINGBIJHOUDING DATE,
    DATUMVERTREKUITNEDERLAND DATE,
    DATUMVESTIGINGNEDERLAND DATE,
    GEMEENTEVANINSCHRIJVING VARCHAR(80),
    GEZINSRELATIE VARCHAR(255),
    INDICATIEGEHEIM BOOLEAN,
    INGEZETENE BOOLEAN,
    LANDWAARNAARVERTROKKEN VARCHAR(255),
    LANDWAARVANDAANINGESCHREVEN VARCHAR(255),
    OUDER1 VARCHAR(255),
    OUDER2 VARCHAR(255),
    OUDER_1_INGESCHREVENPERSOON_ID INTEGER,
    OUDER_2_INGESCHREVENPERSOON_ID INTEGER,
    PARTNERID VARCHAR(255),
    REDENEINDEBEWONING DATE,
    REDENOPSCHORTINGBIJHOUDING VARCHAR(200),
    SIGNALERINGREISDOCUMENT BOOLEAN,
    VERBLIJFSTITEL VARCHAR(255)
);

CREATE TABLE NIETNATUURLIJKPERSOON (
    NIETNATUURLIJKPERSOON_ID INTEGER PRIMARY KEY,
    DATUMAANVANG DATE,
    DATUMEINDE DATE,
    DATUMUITSCHRIJVING DATE,
    DATUMVOORTZETTING DATE,
    FAXNUMMER VARCHAR(20),
    INGESCHREVEN BOOLEAN,
    INOPRICHTING BOOLEAN,
    KVKNUMMER VARCHAR(255),
    NNPID VARCHAR(255),
    RECHTSVORM VARCHAR(255),
    RSINNUMMER VARCHAR(255),
    STATUTAIRENAAM VARCHAR(255),
    STATUTAIREZETEL VARCHAR(255),
    WEBSITEURL VARCHAR(200)
);

CREATE TABLE CLIENT (
    INGESCHREVENPERSOON_ID INTEGER PRIMARY KEY,
    CODE VARCHAR(80),
    GEZAGSDRAGERGEKEND BOOLEAN,
    JURIDISCHESTATUS VARCHAR(80),
    WETTELIJKEVERTEGENWOORDIGING VARCHAR(80)
);

CREATE TABLE SCHULDHULPTRAJECT (
    SCHULDHULPTRAJECT_ID INTEGER PRIMARY KEY,
    EINDDATUM DATE,
    HEEFT_TRAJECT_INGESCHREVENPERSOON_ID INTEGER,
    OMSCHRIJVING TEXT,
    STARTDATUM DATE,
    TOEKENNINGSDATUM DATE,
    TOTAALSCHULDBEDRAGBIJAANVANGSCHULD DECIMAL(10,2)
);

CREATE TABLE SCHULDHULPORGANISATIE (
    NIETNATUURLIJKPERSOON_ID INTEGER PRIMARY KEY,
    NAAM VARCHAR(200)
);

CREATE TABLE KP_CLNT_INGSCHRVNPRSN (
    KP_CLNT_INGSCHRVNPRSN_ID INTEGER PRIMARY KEY,
    CLIENT_ID INTEGER,
    INGESCHREVENPERSOON_ID INTEGER
);

CREATE TABLE KP_SCHLDHLPRGNST_SCHLDHLPTRJCT (
    KP_SCHLDHLPRGNST_SCHLDHLPTRJCT_ID INTEGER PRIMARY KEY,
    SCHULDHULPORGANISATIE_ID INTEGER,
    SCHULDHULPTRAJECT_ID INTEGER
);

CREATE TABLE KP_SCHLDHLPRGNST_NTNTRLJKPRSN (
    KP_SCHLDHLPRGNST_NTNTRLJKPRSN_ID INTEGER PRIMARY KEY,
    SCHULDHULPORGANISATIE_ID INTEGER,
    NIETNATUURLIJKPERSOON_ID INTEGER
);

ALTER TABLE SCHULDHULPORGANISATIE ADD CONSTRAINT FK_SCHULDHULPORGANISATIE_GEN_NIETNATUURLIJKPERSOON FOREIGN KEY (NIETNATUURLIJKPERSOON_ID) REFERENCES NIETNATUURLIJKPERSOON (NIETNATUURLIJKPERSOON_ID);
-- Generalization to NIETNATUURLIJKPERSOON

ALTER TABLE CLIENT ADD CONSTRAINT FK_CLIENT_GEN_INGESCHREVENPERSOON FOREIGN KEY (INGESCHREVENPERSOON_ID) REFERENCES INGESCHREVENPERSOON (INGESCHREVENPERSOON_ID);
-- Generalization to INGESCHREVENPERSOON

ALTER TABLE KP_CLNT_INGSCHRVNPRSN ADD CONSTRAINT FK_KP_CLNT_INGSCHRVNPRSN_1 FOREIGN KEY (CLIENT_ID) REFERENCES CLIENT (INGESCHREVENPERSOON_ID);
-- CLIENT (many-to-many junction, Connector_ID: 958)

ALTER TABLE KP_CLNT_INGSCHRVNPRSN ADD CONSTRAINT FK_KP_CLNT_INGSCHRVNPRSN_2 FOREIGN KEY (INGESCHREVENPERSOON_ID) REFERENCES INGESCHREVENPERSOON (INGESCHREVENPERSOON_ID);
-- INGESCHREVENPERSOON (many-to-many junction, Connector_ID: 958)

ALTER TABLE KP_SCHLDHLPRGNST_SCHLDHLPTRJCT ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_SCHLDHLPTRJCT_1 FOREIGN KEY (SCHULDHULPORGANISATIE_ID) REFERENCES SCHULDHULPORGANISATIE (NIETNATUURLIJKPERSOON_ID);
-- SCHULDHULPORGANISATIE (many-to-many junction, Connector_ID: 967)

ALTER TABLE KP_SCHLDHLPRGNST_SCHLDHLPTRJCT ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_SCHLDHLPTRJCT_2 FOREIGN KEY (SCHULDHULPTRAJECT_ID) REFERENCES SCHULDHULPTRAJECT (SCHULDHULPTRAJECT_ID);
-- SCHULDHULPTRAJECT (many-to-many junction, Connector_ID: 967)

ALTER TABLE KP_SCHLDHLPRGNST_NTNTRLJKPRSN ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_NTNTRLJKPRSN_1 FOREIGN KEY (SCHULDHULPORGANISATIE_ID) REFERENCES SCHULDHULPORGANISATIE (NIETNATUURLIJKPERSOON_ID);
-- SCHULDHULPORGANISATIE (many-to-many junction, Connector_ID: 968)

ALTER TABLE KP_SCHLDHLPRGNST_NTNTRLJKPRSN ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_NTNTRLJKPRSN_2 FOREIGN KEY (NIETNATUURLIJKPERSOON_ID) REFERENCES NIETNATUURLIJKPERSOON (NIETNATUURLIJKPERSOON_ID);
-- NIETNATUURLIJKPERSOON (many-to-many junction, Connector_ID: 968)

ALTER TABLE SCHULDHULPTRAJECT ADD CONSTRAINT FK_SCHULDHULPTRAJECT_HEEFT_TRAJECT FOREIGN KEY (HEEFT_TRAJECT_INGESCHREVENPERSOON_ID) REFERENCES INGESCHREVENPERSOON (INGESCHREVENPERSOON_ID);
-- HEEFT_TRAJECT (0..* to 1..2, Connector_ID: 965)

ALTER TABLE INGESCHREVENPERSOON ADD CONSTRAINT FK_INGESCHREVENPERSOON_OUDER_1 FOREIGN KEY (OUDER_1_INGESCHREVENPERSOON_ID) REFERENCES INGESCHREVENPERSOON (INGESCHREVENPERSOON_ID);
-- OUDER_1 (1 to 1, Connector_ID: 1871)

ALTER TABLE INGESCHREVENPERSOON ADD CONSTRAINT FK_INGESCHREVENPERSOON_OUDER_2 FOREIGN KEY (OUDER_2_INGESCHREVENPERSOON_ID) REFERENCES INGESCHREVENPERSOON (INGESCHREVENPERSOON_ID);
-- OUDER_2 (1 to 1, Connector_ID: 1873)

