CREATE TABLE ENUMHUISHOUDENSSOORT_ENUM (
    ENUMHUISHOUDENSSOORT_ENUM_ID INTEGER PRIMARY KEY,
    VALUE VARCHAR(255)
);

INSERT INTO ENUMHUISHOUDENSSOORT_ENUM (ENUMHUISHOUDENSSOORT_ENUM_ID, VALUE) VALUES
    (1, 'INSTITUUTTIONEEL_HUISHOUDEN'),
    (2, 'PARTICULIER_HUISHOUDEN');

CREATE TABLE ENUMSCHULDENSOORT_ENUM (
    ENUMSCHULDENSOORT_ENUM_ID INTEGER PRIMARY KEY,
    VALUE VARCHAR(255)
);

INSERT INTO ENUMSCHULDENSOORT_ENUM (ENUMSCHULDENSOORT_ENUM_ID, VALUE) VALUES
    (1, 'NUTS'),
    (2, 'OVERIG'),
    (3, 'PUBLIEK'),
    (4, 'ZORG');

CREATE TABLE ONDERNEMER (
    ONDERNEMER_ID INTEGER PRIMARY KEY,
    EINDDATUM DATE,
    STARTDATUM DATE
);

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 ENUMWONINGBEZIT_ENUM (
    ENUMWONINGBEZIT_ENUM_ID INTEGER PRIMARY KEY,
    VALUE VARCHAR(255)
);

INSERT INTO ENUMWONINGBEZIT_ENUM (ENUMWONINGBEZIT_ENUM_ID, VALUE) VALUES
    (1, 'EIGEN_WONING'),
    (2, 'HUURWONING'),
    (3, 'HUURWONING_GEEN_HUURTOESLAG'),
    (4, 'HUURWONING_WEL_HUURTOESLAG');

CREATE TABLE HUISHOUDEN (
    HUISHOUDEN_ID INTEGER PRIMARY KEY,
    SOORT_ENUM_ID INTEGER
);

CREATE TABLE SCHULDEISER (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY,
    NAAM VARCHAR(200),
    PEILDATUM DATE
);

CREATE TABLE WONINGBEZIT (
    WONINGBEZIT_ID INTEGER PRIMARY KEY,
    EINDDATUM DATE,
    SOORT_ENUM_ID INTEGER,
    STARTDATUM DATE
);

CREATE TABLE NATUURLIJKPERSOON (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY,
    AANDUIDINGNAAMGEBRUIK VARCHAR(50),
    AANHEFAANSCHRIJVING VARCHAR(50),
    ACADEMISCHETITEL VARCHAR(80),
    ACHTERNAAM VARCHAR(100),
    ADELLIJKETITELOFPREDIKAAT VARCHAR(255),
    ANUMMER VARCHAR(20),
    BIJZONDERNEDERLANDERSCHAP VARCHAR(50),
    BURGERSERVICENUMMER VARCHAR(255),
    DATUMGEBOORTE DATE,
    DATUMOVERLIJDEN DATE,
    GEBOORTELAND VARCHAR(255),
    GEBOORTEPLAATS VARCHAR(200),
    GESLACHTSAANDUIDING VARCHAR(255),
    GESLACHTSNAAM VARCHAR(200),
    GESLACHTSNAAMAANSCHRIJVING VARCHAR(200),
    HANDLICHTING VARCHAR(50),
    INDICATIEAFSCHERMINGPERSOONSGEGEVENS BOOLEAN,
    INDICATIEOVERLEDEN BOOLEAN,
    LANDOVERLIJDEN VARCHAR(255),
    MAAKT_ONDERDEEL_UIT_VAN_HUISHOUDEN_ID INTEGER,
    NATIONALITEIT VARCHAR(100),
    OVERLIJDENSPLAATS VARCHAR(200),
    VOORLETTERSAANSCHRIJVING VARCHAR(20),
    VOORNAMEN VARCHAR(200),
    VOORNAMENAANSCHRIJVING VARCHAR(200),
    VOORVOEGSELGESLACHTSNAAM VARCHAR(80)
);

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

CREATE TABLE KP_SCHLDSR_RCHTSPRSN (
    KP_SCHLDSR_RCHTSPRSN_ID INTEGER PRIMARY KEY,
    SCHULDEISER_ID INTEGER,
    RECHTSPERSOON_ID INTEGER
);

CREATE TABLE KP_NTRLJKPRSN_RCHTSPRSN (
    KP_NTRLJKPRSN_RCHTSPRSN_ID INTEGER PRIMARY KEY,
    NATUURLIJKPERSOON_ID INTEGER,
    RECHTSPERSOON_ID INTEGER
);

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

CREATE TABLE LEEFSITUATIE (
    LEEFSITUATIE_ID INTEGER PRIMARY KEY,
    DATUMGELDIGTOT DATE,
    DATUMGELDIGVANAF DATE,
    HEEFT_FINANCIELE_SITUATIE_CLIENT_ID INTEGER,
    IS_ONDERNEMER_ID INTEGER
);

CREATE TABLE SCHULD (
    SCHULD_ID INTEGER PRIMARY KEY,
    BEDRAG DECIMAL(10,2),
    HEEFT_SCHULDHULPTRAJECT_ID INTEGER,
    PEILDATUM DATE,
    SCHULDSOORT_ENUM_ID INTEGER,
    SCHULD_BIJ_RECHTSPERSOON_ID INTEGER,
    ZAKELIJKESCHULD BOOLEAN
);

CREATE TABLE PARTNER (
    RECHTSPERSOON_ID INTEGER PRIMARY KEY,
    DATUMTOT DATE,
    DATUMVANAF DATE,
    GETROUWDOFGEREGISTREERDPARTNER BOOLEAN,
    HEEFT_LEEFSITUATIE_ID INTEGER,
    SAMENWONEND BOOLEAN
);

CREATE TABLE KP_LFSTT_WNNGBZT (
    KP_LFSTT_WNNGBZT_ID INTEGER PRIMARY KEY,
    LEEFSITUATIE_ID INTEGER,
    WONINGBEZIT_ID INTEGER
);

CREATE TABLE INKOMEN (
    INKOMEN_ID INTEGER PRIMARY KEY,
    BRUTOBEDRAG DECIMAL(10,2),
    EINDDATUM DATE,
    HEEFT_LEEFSITUATIE_ID INTEGER,
    INKOMENSCATEGORIE INTEGER,
    INKOMSTENBRON INTEGER,
    NETTOBEDRAG DECIMAL(10,2),
    STARTDATUM DATE
);

CREATE TABLE KP_PRTNR_NTRLJKPRSN (
    KP_PRTNR_NTRLJKPRSN_ID INTEGER PRIMARY KEY,
    PARTNER_ID INTEGER,
    NATUURLIJKPERSOON_ID INTEGER
);

ALTER TABLE PARTNER ADD CONSTRAINT FK_PARTNER_GEN_NATUURLIJKPERSOON FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES NATUURLIJKPERSOON (RECHTSPERSOON_ID);
-- Generalization to NATUURLIJKPERSOON

ALTER TABLE SCHULDEISER ADD CONSTRAINT FK_SCHULDEISER_GEN_RECHTSPERSOON FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- Generalization to RECHTSPERSOON

ALTER TABLE NATUURLIJKPERSOON ADD CONSTRAINT FK_NATUURLIJKPERSOON_GEN_RECHTSPERSOON FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- Generalization to RECHTSPERSOON

ALTER TABLE KP_SCHLDSR_RCHTSPRSN ADD CONSTRAINT FK_KP_SCHLDSR_RCHTSPRSN_1 FOREIGN KEY (SCHULDEISER_ID) REFERENCES SCHULDEISER (RECHTSPERSOON_ID);
-- SCHULDEISER (many-to-many junction, Connector_ID: 969)

ALTER TABLE KP_SCHLDSR_RCHTSPRSN ADD CONSTRAINT FK_KP_SCHLDSR_RCHTSPRSN_2 FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- RECHTSPERSOON (many-to-many junction, Connector_ID: 969)

ALTER TABLE KP_PRTNR_NTRLJKPRSN ADD CONSTRAINT FK_KP_PRTNR_NTRLJKPRSN_1 FOREIGN KEY (PARTNER_ID) REFERENCES PARTNER (RECHTSPERSOON_ID);
-- PARTNER (many-to-many junction, Connector_ID: 973)

ALTER TABLE KP_PRTNR_NTRLJKPRSN ADD CONSTRAINT FK_KP_PRTNR_NTRLJKPRSN_2 FOREIGN KEY (NATUURLIJKPERSOON_ID) REFERENCES NATUURLIJKPERSOON (RECHTSPERSOON_ID);
-- NATUURLIJKPERSOON (many-to-many junction, Connector_ID: 973)

ALTER TABLE KP_LFSTT_WNNGBZT ADD CONSTRAINT FK_KP_LFSTT_WNNGBZT_1 FOREIGN KEY (LEEFSITUATIE_ID) REFERENCES LEEFSITUATIE (LEEFSITUATIE_ID);
-- LEEFSITUATIE (many-to-many junction, Connector_ID: 984)

ALTER TABLE KP_LFSTT_WNNGBZT ADD CONSTRAINT FK_KP_LFSTT_WNNGBZT_2 FOREIGN KEY (WONINGBEZIT_ID) REFERENCES WONINGBEZIT (WONINGBEZIT_ID);
-- WONINGBEZIT (many-to-many junction, Connector_ID: 984)

ALTER TABLE KP_NTRLJKPRSN_RCHTSPRSN ADD CONSTRAINT FK_KP_NTRLJKPRSN_RCHTSPRSN_1 FOREIGN KEY (NATUURLIJKPERSOON_ID) REFERENCES NATUURLIJKPERSOON (RECHTSPERSOON_ID);
-- NATUURLIJKPERSOON (many-to-many junction, Connector_ID: 1898)

ALTER TABLE KP_NTRLJKPRSN_RCHTSPRSN ADD CONSTRAINT FK_KP_NTRLJKPRSN_RCHTSPRSN_2 FOREIGN KEY (RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- RECHTSPERSOON (many-to-many junction, Connector_ID: 1898)

ALTER TABLE CLIENT ADD CONSTRAINT FK_CLIENT_MAAKT_ONDERDEEL_UIT_VAN FOREIGN KEY (MAAKT_ONDERDEEL_UIT_VAN_HUISHOUDEN_ID) REFERENCES HUISHOUDEN (HUISHOUDEN_ID);
-- MAAKT_ONDERDEEL_UIT_VAN (0..* to 1, Connector_ID: 949)

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

ALTER TABLE SCHULD ADD CONSTRAINT FK_SCHULD_HEEFT FOREIGN KEY (HEEFT_SCHULDHULPTRAJECT_ID) REFERENCES SCHULDHULPTRAJECT (SCHULDHULPTRAJECT_ID);
-- HEEFT (1 to 0..*, Connector_ID: 970)

ALTER TABLE SCHULD ADD CONSTRAINT FK_SCHULD_SCHULD_BIJ FOREIGN KEY (SCHULD_BIJ_RECHTSPERSOON_ID) REFERENCES RECHTSPERSOON (RECHTSPERSOON_ID);
-- SCHULD_BIJ (0..* to 1, Connector_ID: 971)

ALTER TABLE LEEFSITUATIE ADD CONSTRAINT FK_LEEFSITUATIE_HEEFT_FINANCIELE_SITUATIE FOREIGN KEY (HEEFT_FINANCIELE_SITUATIE_CLIENT_ID) REFERENCES CLIENT (CLIENT_ID);
-- HEEFT_FINANCIELE_SITUATIE (1 to 0..*, Connector_ID: 981)

ALTER TABLE LEEFSITUATIE ADD CONSTRAINT FK_LEEFSITUATIE_IS FOREIGN KEY (IS_ONDERNEMER_ID) REFERENCES ONDERNEMER (ONDERNEMER_ID);
-- IS (1 to 0..1, Connector_ID: 983)

ALTER TABLE PARTNER ADD CONSTRAINT FK_PARTNER_HEEFT FOREIGN KEY (HEEFT_LEEFSITUATIE_ID) REFERENCES LEEFSITUATIE (LEEFSITUATIE_ID);
-- HEEFT (0..1 to 0..*, Connector_ID: 985)

ALTER TABLE INKOMEN ADD CONSTRAINT FK_INKOMEN_HEEFT FOREIGN KEY (HEEFT_LEEFSITUATIE_ID) REFERENCES LEEFSITUATIE (LEEFSITUATIE_ID);
-- HEEFT (1 to 0..*, Connector_ID: 988)

ALTER TABLE NATUURLIJKPERSOON ADD CONSTRAINT FK_NATUURLIJKPERSOON_MAAKT_ONDERDEEL_UIT_VAN FOREIGN KEY (MAAKT_ONDERDEEL_UIT_VAN_HUISHOUDEN_ID) REFERENCES HUISHOUDEN (HUISHOUDEN_ID);
-- MAAKT_ONDERDEEL_UIT_VAN (1..* to 0..1, Connector_ID: 1889)

ALTER TABLE SCHULD ADD CONSTRAINT FK_SCHULD_SCHULDSOORT_ENUM_ID FOREIGN KEY (SCHULDSOORT_ENUM_ID_ENUMSCHULDENSOORT_ENUM_ID) REFERENCES ENUMSCHULDENSOORT_ENUM (ENUMSCHULDENSOORT_ENUM_ID);
-- SCHULDSOORT_ENUM_ID (1 to 1, Connector_ID: enum_ref)

ALTER TABLE WONINGBEZIT ADD CONSTRAINT FK_WONINGBEZIT_SOORT_ENUM_ID FOREIGN KEY (SOORT_ENUM_ID_ENUMWONINGBEZIT_ENUM_ID) REFERENCES ENUMWONINGBEZIT_ENUM (ENUMWONINGBEZIT_ENUM_ID);
-- SOORT_ENUM_ID (1 to 1, Connector_ID: enum_ref)

ALTER TABLE HUISHOUDEN ADD CONSTRAINT FK_HUISHOUDEN_SOORT_ENUM_ID FOREIGN KEY (SOORT_ENUM_ID_ENUMHUISHOUDENSSOORT_ENUM_ID) REFERENCES ENUMHUISHOUDENSSOORT_ENUM (ENUMHUISHOUDENSSOORT_ENUM_ID);
-- SOORT_ENUM_ID (1 to 1, Connector_ID: enum_ref)

