CREATE TABLE `CONTACTPERSOON` (
    `CONTACTPERSOON_ID` INT PRIMARY KEY,
    `EMAIL` VARCHAR(255),
    `FUNCTIETITEL` VARCHAR(200),
    `NAAM` VARCHAR(200),
    `TELEFOONNUMMER` VARCHAR(200)
) ENGINE=InnoDB;

CREATE TABLE `ENUMSCHULDENSOORT_ENUM` (
    `ENUMSCHULDENSOORT_ENUM_ID` INT PRIMARY KEY,
    VALUE VARCHAR(255)
) ENGINE=InnoDB;

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

CREATE TABLE `ENUMBEGELEIDINGSSOORT_ENUM` (
    `ENUMBEGELEIDINGSSOORT_ENUM_ID` INT PRIMARY KEY,
    VALUE VARCHAR(255)
) ENGINE=InnoDB;

INSERT INTO `ENUMBEGELEIDINGSSOORT_ENUM` (`ENUMBEGELEIDINGSSOORT_ENUM_ID`, VALUE) VALUES
    (1, 'BESCHERMINGSBEWIND'),
    (2, 'BUDGETBEGELEIDING'),
    (3, 'BUDGETBEHEER'),
    (4, 'BUDGETCOACHING'),
    (5, 'LANGE_TERMIJN_BEGELEIDING_DFD_');

CREATE TABLE `ENUMOPLOSSINGSSOORT_ENUM` (
    `ENUMOPLOSSINGSSOORT_ENUM_ID` INT PRIMARY KEY,
    VALUE VARCHAR(255)
) ENGINE=InnoDB;

INSERT INTO `ENUMOPLOSSINGSSOORT_ENUM` (`ENUMOPLOSSINGSSOORT_ENUM_ID`, VALUE) VALUES
    (1, '0_AANBOD'),
    (2, 'BETALINGSREGELING'),
    (3, 'HERFINANCIERING'),
    (4, 'SANERINGSKREDIET'),
    (5, 'SCHULDBEMIDDELING');

CREATE TABLE `NIETNATUURLIJKPERSOON` (
    `NIETNATUURLIJKPERSOON_ID` INT 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)
) ENGINE=InnoDB;

CREATE TABLE `OPLOSSINGSSOORT` (
    `OPLOSSINGSSOORT_ID` INT PRIMARY KEY,
    `SOORT_ENUM_ID` INT
) ENGINE=InnoDB;

CREATE TABLE `BEGELEIDINGSSOORT` (
    `BEGELEIDINGSSOORT_ID` INT PRIMARY KEY,
    `SOORT_ENUM_ID` INT
) ENGINE=InnoDB;

CREATE TABLE `SCHULDHULPORGANISATIE` (
    `NIETNATUURLIJKPERSOON_ID` INT PRIMARY KEY,
    `NAAM` VARCHAR(200)
) ENGINE=InnoDB;

CREATE TABLE `OPLOSSING` (
    `OPLOSSING_ID` INT PRIMARY KEY,
    `EINDDATUM` DATE,
    `SOORT_ENUM_ID` INT,
    `SOORT_OPLOSSINGSSOORT_ID` INT,
    `STARTDATUM` DATE,
    `VTLB` VARCHAR(255)
) ENGINE=InnoDB;

CREATE TABLE `KP_SCHLDHLPRGNST_BGLDNGSSRT` (
    `KP_SCHLDHLPRGNST_BGLDNGSSRT_ID` INT PRIMARY KEY,
    `SCHULDHULPORGANISATIE_ID` INT,
    `BEGELEIDINGSSOORT_ID` INT
) ENGINE=InnoDB;

CREATE TABLE `KP_SCHLDHLPRGNST_NTNTRLJKPRSN` (
    `KP_SCHLDHLPRGNST_NTNTRLJKPRSN_ID` INT PRIMARY KEY,
    `SCHULDHULPORGANISATIE_ID` INT,
    `NIETNATUURLIJKPERSOON_ID` INT
) ENGINE=InnoDB;

CREATE TABLE `KP_SCHLDHLPRGNST_CNTCTPRSN` (
    `KP_SCHLDHLPRGNST_CNTCTPRSN_ID` INT PRIMARY KEY,
    `SCHULDHULPORGANISATIE_ID` INT,
    `CONTACTPERSOON_ID` INT
) ENGINE=InnoDB;

CREATE TABLE `KP_SCHLDHLPRGNST_OPLSSNGSSRT` (
    `KP_SCHLDHLPRGNST_OPLSSNGSSRT_ID` INT PRIMARY KEY,
    `SCHULDHULPORGANISATIE_ID` INT,
    `OPLOSSINGSSOORT_ID` INT
) ENGINE=InnoDB;

CREATE TABLE `SCHULDHULPTRAJECT` (
    `SCHULDHULPTRAJECT_ID` INT PRIMARY KEY,
    `BEVAT_OPLOSSING_ID` INT,
    `EINDDATUM` DATE,
    `OMSCHRIJVING` TEXT,
    `STARTDATUM` DATE,
    `TOEKENNINGSDATUM` DATE,
    `TOTAALSCHULDBEDRAGBIJAANVANGSCHULD` DECIMAL(10,2)
) ENGINE=InnoDB;

CREATE TABLE `KP_SCHLDHLPRGNST_SCHLDHLPTRJCT` (
    `KP_SCHLDHLPRGNST_SCHLDHLPTRJCT_ID` INT PRIMARY KEY,
    `SCHULDHULPORGANISATIE_ID` INT,
    `SCHULDHULPTRAJECT_ID` INT
) ENGINE=InnoDB;

CREATE TABLE `BEGELEIDING` (
    `BEGELEIDING_ID` INT PRIMARY KEY,
    `BEVAT_SCHULDHULPTRAJECT_ID` INT,
    `EINDDATUM` DATE,
    `SOORT_BEGELEIDINGSSOORT_ID` INT,
    `SOORT_ENUM_ID` INT,
    `STARTDATUM` DATE
) ENGINE=InnoDB;

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

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 `KP_SCHLDHLPRGNST_OPLSSNGSSRT` ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_OPLSSNGSSRT_1 FOREIGN KEY (`SCHULDHULPORGANISATIE_ID`) REFERENCES `SCHULDHULPORGANISATIE` (`NIETNATUURLIJKPERSOON_ID`);
-- SCHULDHULPORGANISATIE (many-to-many junction, Connector_ID: 974)

ALTER TABLE `KP_SCHLDHLPRGNST_OPLSSNGSSRT` ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_OPLSSNGSSRT_2 FOREIGN KEY (`OPLOSSINGSSOORT_ID`) REFERENCES `OPLOSSINGSSOORT` (`OPLOSSINGSSOORT_ID`);
-- OPLOSSINGSSOORT (many-to-many junction, Connector_ID: 974)

ALTER TABLE `KP_SCHLDHLPRGNST_CNTCTPRSN` ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_CNTCTPRSN_1 FOREIGN KEY (`SCHULDHULPORGANISATIE_ID`) REFERENCES `SCHULDHULPORGANISATIE` (`NIETNATUURLIJKPERSOON_ID`);
-- SCHULDHULPORGANISATIE (many-to-many junction, Connector_ID: 992)

ALTER TABLE `KP_SCHLDHLPRGNST_CNTCTPRSN` ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_CNTCTPRSN_2 FOREIGN KEY (`CONTACTPERSOON_ID`) REFERENCES `CONTACTPERSOON` (`CONTACTPERSOON_ID`);
-- CONTACTPERSOON (many-to-many junction, Connector_ID: 992)

ALTER TABLE `KP_SCHLDHLPRGNST_BGLDNGSSRT` ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_BGLDNGSSRT_1 FOREIGN KEY (`SCHULDHULPORGANISATIE_ID`) REFERENCES `SCHULDHULPORGANISATIE` (`NIETNATUURLIJKPERSOON_ID`);
-- SCHULDHULPORGANISATIE (many-to-many junction, Connector_ID: 993)

ALTER TABLE `KP_SCHLDHLPRGNST_BGLDNGSSRT` ADD CONSTRAINT FK_KP_SCHLDHLPRGNST_BGLDNGSSRT_2 FOREIGN KEY (`BEGELEIDINGSSOORT_ID`) REFERENCES `BEGELEIDINGSSOORT` (`BEGELEIDINGSSOORT_ID`);
-- BEGELEIDINGSSOORT (many-to-many junction, Connector_ID: 993)

ALTER TABLE `SCHULDHULPTRAJECT` ADD CONSTRAINT FK_SCHULDHULPTRAJECT_BEVAT FOREIGN KEY (`BEVAT_OPLOSSING_ID`) REFERENCES `OPLOSSING` (`OPLOSSING_ID`);
-- BEVAT (1 to 0..1, Connector_ID: 976)

ALTER TABLE `OPLOSSING` ADD CONSTRAINT FK_OPLOSSING_SOORT FOREIGN KEY (`SOORT_OPLOSSINGSSOORT_ID`) REFERENCES `OPLOSSINGSSOORT` (`OPLOSSINGSSOORT_ID`);
-- SOORT (0..* to 1, Connector_ID: 977)

ALTER TABLE `BEGELEIDING` ADD CONSTRAINT FK_BEGELEIDING_BEVAT FOREIGN KEY (`BEVAT_SCHULDHULPTRAJECT_ID`) REFERENCES `SCHULDHULPTRAJECT` (`SCHULDHULPTRAJECT_ID`);
-- BEVAT (1 to 0..*, Connector_ID: 996)

ALTER TABLE `BEGELEIDING` ADD CONSTRAINT FK_BEGELEIDING_SOORT FOREIGN KEY (`SOORT_BEGELEIDINGSSOORT_ID`) REFERENCES `BEGELEIDINGSSOORT` (`BEGELEIDINGSSOORT_ID`);
-- SOORT (0..* to 1, Connector_ID: 999)

ALTER TABLE `BEGELEIDING` ADD CONSTRAINT FK_BEGELEIDING_SOORT_ENUM_ID FOREIGN KEY (`SOORT_ENUM_ID_ENUMBEGELEIDINGSSOORT_ENUM_ID`) REFERENCES `ENUMBEGELEIDINGSSOORT_ENUM` (`ENUMBEGELEIDINGSSOORT_ENUM_ID`);
-- SOORT_ENUM_ID (1 to 1, Connector_ID: enum_ref)

ALTER TABLE `BEGELEIDINGSSOORT` ADD CONSTRAINT FK_BEGELEIDINGSSOORT_SOORT_ENUM_ID FOREIGN KEY (`SOORT_ENUM_ID_ENUMBEGELEIDINGSSOORT_ENUM_ID`) REFERENCES `ENUMBEGELEIDINGSSOORT_ENUM` (`ENUMBEGELEIDINGSSOORT_ENUM_ID`);
-- SOORT_ENUM_ID (1 to 1, Connector_ID: enum_ref)

ALTER TABLE `OPLOSSING` ADD CONSTRAINT FK_OPLOSSING_SOORT_ENUM_ID FOREIGN KEY (`SOORT_ENUM_ID_ENUMOPLOSSINGSSOORT_ENUM_ID`) REFERENCES `ENUMOPLOSSINGSSOORT_ENUM` (`ENUMOPLOSSINGSSOORT_ENUM_ID`);
-- SOORT_ENUM_ID (1 to 1, Connector_ID: enum_ref)

ALTER TABLE `OPLOSSINGSSOORT` ADD CONSTRAINT FK_OPLOSSINGSSOORT_SOORT_ENUM_ID FOREIGN KEY (`SOORT_ENUM_ID_ENUMSCHULDENSOORT_ENUM_ID`) REFERENCES `ENUMSCHULDENSOORT_ENUM` (`ENUMSCHULDENSOORT_ENUM_ID`);
-- SOORT_ENUM_ID (1 to 1, Connector_ID: enum_ref)

