CREATE TABLE ENUMHUISHOUDENSSOORT_ENUM (
    ENUMHUISHOUDENSSOORT_ENUM_ID NUMBER PRIMARY KEY,
    VALUE VARCHAR2(255)
);

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

CREATE TABLE ENUMSCHULDENSOORT_ENUM (
    ENUMSCHULDENSOORT_ENUM_ID NUMBER PRIMARY KEY,
    VALUE VARCHAR2(255)
);

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

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

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

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

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

CREATE TABLE SCHULDEISER (
    RECHTSPERSOON_ID NUMBER PRIMARY KEY,
    NAAM VARCHAR2(200),
    PEILDATUM DATE
);

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

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

CREATE TABLE CLIENT (
    CLIENT_ID NUMBER PRIMARY KEY,
    CODE VARCHAR2(80),
    GEZAGSDRAGERGEKEND NUMBER(1),
    JURIDISCHESTATUS VARCHAR2(80),
    MAAKT_ONDERDEEL_UIT_VAN_HUISHOUDEN_ID NUMBER,
    WETTELIJKEVERTEGENWOORDIGING VARCHAR2(80)
);

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

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

CREATE TABLE SCHULDHULPTRAJECT (
    SCHULDHULPTRAJECT_ID NUMBER PRIMARY KEY,
    EINDDATUM DATE,
    HEEFT_TRAJECT_CLIENT_ID NUMBER,
    OMSCHRIJVING CLOB,
    STARTDATUM DATE,
    TOEKENNINGSDATUM DATE,
    TOTAALSCHULDBEDRAGBIJAANVANGSCHULD NUMBER(10,2)
);

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

CREATE TABLE SCHULD (
    SCHULD_ID NUMBER PRIMARY KEY,
    BEDRAG NUMBER(10,2),
    HEEFT_SCHULDHULPTRAJECT_ID NUMBER,
    PEILDATUM DATE,
    SCHULDSOORT_ENUM_ID NUMBER,
    SCHULD_BIJ_RECHTSPERSOON_ID NUMBER,
    ZAKELIJKESCHULD NUMBER(1)
);

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

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

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

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

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)

