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 PROGRAMMA (
    PROGRAMMA_ID INTEGER PRIMARY KEY,
    NAAM VARCHAR(80)
);

CREATE TABLE NATUURLIJKPERSOON (
    NATUURLIJKPERSOON_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),
    NATIONALITEIT VARCHAR(100),
    OVERLIJDENSPLAATS VARCHAR(200),
    VOORLETTERSAANSCHRIJVING VARCHAR(20),
    VOORNAMEN VARCHAR(200),
    VOORNAMENAANSCHRIJVING VARCHAR(200),
    VOORVOEGSELGESLACHTSNAAM VARCHAR(80)
);

CREATE TABLE ENERGIELABEL_ENUM (
    ENERGIELABEL_ENUM_ID INTEGER PRIMARY KEY,
    VALUE VARCHAR(255)
);

INSERT INTO ENERGIELABEL_ENUM (ENERGIELABEL_ENUM_ID, VALUE) VALUES
    (1, 'A'),
    (2, 'B'),
    (3, 'C'),
    (4, 'D'),
    (5, 'E'),
    (6, 'F');

CREATE TABLE OPPERVLAKTE_WONING_ENUM (
    OPPERVLAKTE_WONING_ENUM_ID INTEGER PRIMARY KEY,
    VALUE VARCHAR(255)
);

INSERT INTO OPPERVLAKTE_WONING_ENUM (OPPERVLAKTE_WONING_ENUM_ID, VALUE) VALUES
    (1, '100_124_M2'),
    (2, '125_149_M2'),
    (3, '150_EN_GROTER'),
    (4, '15_49_M2'),
    (5, '50_74_M2'),
    (6, '75_99_M2'),
    (7, 'KLEINER_DAN_15_M2');

CREATE TABLE PROJECTONTWIKKELAAR (
    NIETNATUURLIJKPERSOON_ID INTEGER PRIMARY KEY,
    ADRES VARCHAR(200),
    NAAM VARCHAR(80)
);

CREATE TABLE PLAN (
    PLAN_ID INTEGER PRIMARY KEY,
    70PROCENTVERKOCHT BOOLEAN,
    AARDGASLOOS BOOLEAN,
    BESTEMMINGGOEDGEKEURD BOOLEAN,
    BINNEN_PROGRAMMA_PROGRAMMA_ID INTEGER,
    EERSTEOPLEVERING DATE,
    EIGENDOMGEMEENTE BOOLEAN,
    GEBIEDSTRANSFORMATIE BOOLEAN,
    INTENTIE BOOLEAN,
    IS_PROJECTLEIDER_VAN_NATUURLIJKPERSOON_ID INTEGER,
    LAATSTEOPLEVERING DATE,
    NAAM VARCHAR(80),
    NUMMER VARCHAR(255),
    ONHERROEPELIJK BOOLEAN,
    PERCELEN VARCHAR(255),
    STARTBOUW DATE,
    STARTVERKOOP DATE
);

CREATE TABLE PROJECTLEIDER (
    NATUURLIJKPERSOON_ID INTEGER PRIMARY KEY,
    NAAM VARCHAR(80)
);

CREATE TABLE KP_NTNTRLJKPRSN_NTRLJKPRSN (
    KP_NTNTRLJKPRSN_NTRLJKPRSN_ID INTEGER PRIMARY KEY,
    NIETNATUURLIJKPERSOON_ID INTEGER,
    NATUURLIJKPERSOON_ID INTEGER
);

CREATE TABLE KP_PRJCTNTWKKLR_NTNTRLJKPRSN (
    KP_PRJCTNTWKKLR_NTNTRLJKPRSN_ID INTEGER PRIMARY KEY,
    PROJECTONTWIKKELAAR_ID INTEGER,
    NIETNATUURLIJKPERSOON_ID INTEGER
);

CREATE TABLE KP_PRJCTNTWKKLR_PLN (
    KP_PRJCTNTWKKLR_PLN_ID INTEGER PRIMARY KEY,
    PROJECTONTWIKKELAAR_ID INTEGER,
    PLAN_ID INTEGER
);

CREATE TABLE OMGEVINGSVERGUNNING (
    OMGEVINGSVERGUNNING_ID INTEGER PRIMARY KEY,
    BETREKKING_OP_PLAN_ID INTEGER
);

CREATE TABLE GEBOUW (
    GEBOUW_ID INTEGER PRIMARY KEY,
    AANTAL INTEGER,
    AANTALADRESSEN INTEGER,
    AANTALKAMERS INTEGER,
    AARDGASLOOS BOOLEAN,
    BESTAAT_UIT_PLAN_ID INTEGER,
    DUURZAAM BOOLEAN,
    ENERGIELABEL_ENUM_ID INTEGER,
    NATUURINCLUSIEF BOOLEAN,
    OPPERVLAKTE_ENUM_ID INTEGER,
    REGENWATER BOOLEAN
);

CREATE TABLE KP_PRJCTLDR_NTRLJKPRSN (
    KP_PRJCTLDR_NTRLJKPRSN_ID INTEGER PRIMARY KEY,
    PROJECTLEIDER_ID INTEGER,
    NATUURLIJKPERSOON_ID INTEGER
);

CREATE TABLE HUURWONINGEN (
    GEBOUW_ID INTEGER PRIMARY KEY,
    HUURPRIJS DECIMAL(10,2)
);

CREATE TABLE STUDENTENWONINGEN (
    GEBOUW_ID INTEGER PRIMARY KEY,
    HUURPRIJS DECIMAL(10,2),
    ZELFSTANDIG BOOLEAN
);

CREATE TABLE KOOPWONINGEN (
    GEBOUW_ID INTEGER PRIMARY KEY,
    KOOPPRIJS DECIMAL(10,2)
);

CREATE TABLE KP_HRWNNGN_GBW (
    KP_HRWNNGN_GBW_ID INTEGER PRIMARY KEY,
    HUURWONINGEN_ID INTEGER,
    GEBOUW_ID INTEGER
);

CREATE TABLE KP_STDNTNWNNGN_GBW (
    KP_STDNTNWNNGN_GBW_ID INTEGER PRIMARY KEY,
    STUDENTENWONINGEN_ID INTEGER,
    GEBOUW_ID INTEGER
);

CREATE TABLE KP_KPWNNGN_GBW (
    KP_KPWNNGN_GBW_ID INTEGER PRIMARY KEY,
    KOOPWONINGEN_ID INTEGER,
    GEBOUW_ID INTEGER
);

ALTER TABLE HUURWONINGEN ADD CONSTRAINT FK_HUURWONINGEN_GEN_GEBOUW FOREIGN KEY (GEBOUW_ID) REFERENCES GEBOUW (GEBOUW_ID);
-- Generalization to GEBOUW

ALTER TABLE KOOPWONINGEN ADD CONSTRAINT FK_KOOPWONINGEN_GEN_GEBOUW FOREIGN KEY (GEBOUW_ID) REFERENCES GEBOUW (GEBOUW_ID);
-- Generalization to GEBOUW

ALTER TABLE PROJECTLEIDER ADD CONSTRAINT FK_PROJECTLEIDER_GEN_NATUURLIJKPERSOON FOREIGN KEY (NATUURLIJKPERSOON_ID) REFERENCES NATUURLIJKPERSOON (NATUURLIJKPERSOON_ID);
-- Generalization to NATUURLIJKPERSOON

ALTER TABLE PROJECTONTWIKKELAAR ADD CONSTRAINT FK_PROJECTONTWIKKELAAR_GEN_NIETNATUURLIJKPERSOON FOREIGN KEY (NIETNATUURLIJKPERSOON_ID) REFERENCES NIETNATUURLIJKPERSOON (NIETNATUURLIJKPERSOON_ID);
-- Generalization to NIETNATUURLIJKPERSOON

ALTER TABLE STUDENTENWONINGEN ADD CONSTRAINT FK_STUDENTENWONINGEN_GEN_GEBOUW FOREIGN KEY (GEBOUW_ID) REFERENCES GEBOUW (GEBOUW_ID);
-- Generalization to GEBOUW

ALTER TABLE KP_STDNTNWNNGN_GBW ADD CONSTRAINT FK_KP_STDNTNWNNGN_GBW_1 FOREIGN KEY (STUDENTENWONINGEN_ID) REFERENCES STUDENTENWONINGEN (GEBOUW_ID);
-- STUDENTENWONINGEN (many-to-many junction, Connector_ID: 711)

ALTER TABLE KP_STDNTNWNNGN_GBW ADD CONSTRAINT FK_KP_STDNTNWNNGN_GBW_2 FOREIGN KEY (GEBOUW_ID) REFERENCES GEBOUW (GEBOUW_ID);
-- GEBOUW (many-to-many junction, Connector_ID: 711)

ALTER TABLE KP_PRJCTNTWKKLR_NTNTRLJKPRSN ADD CONSTRAINT FK_KP_PRJCTNTWKKLR_NTNTRLJKPRSN_1 FOREIGN KEY (PROJECTONTWIKKELAAR_ID) REFERENCES PROJECTONTWIKKELAAR (NIETNATUURLIJKPERSOON_ID);
-- PROJECTONTWIKKELAAR (many-to-many junction, Connector_ID: 712)

ALTER TABLE KP_PRJCTNTWKKLR_NTNTRLJKPRSN ADD CONSTRAINT FK_KP_PRJCTNTWKKLR_NTNTRLJKPRSN_2 FOREIGN KEY (NIETNATUURLIJKPERSOON_ID) REFERENCES NIETNATUURLIJKPERSOON (NIETNATUURLIJKPERSOON_ID);
-- NIETNATUURLIJKPERSOON (many-to-many junction, Connector_ID: 712)

ALTER TABLE KP_PRJCTLDR_NTRLJKPRSN ADD CONSTRAINT FK_KP_PRJCTLDR_NTRLJKPRSN_1 FOREIGN KEY (PROJECTLEIDER_ID) REFERENCES PROJECTLEIDER (NATUURLIJKPERSOON_ID);
-- PROJECTLEIDER (many-to-many junction, Connector_ID: 713)

ALTER TABLE KP_PRJCTLDR_NTRLJKPRSN ADD CONSTRAINT FK_KP_PRJCTLDR_NTRLJKPRSN_2 FOREIGN KEY (NATUURLIJKPERSOON_ID) REFERENCES NATUURLIJKPERSOON (NATUURLIJKPERSOON_ID);
-- NATUURLIJKPERSOON (many-to-many junction, Connector_ID: 713)

ALTER TABLE KP_PRJCTNTWKKLR_PLN ADD CONSTRAINT FK_KP_PRJCTNTWKKLR_PLN_1 FOREIGN KEY (PROJECTONTWIKKELAAR_ID) REFERENCES PROJECTONTWIKKELAAR (NIETNATUURLIJKPERSOON_ID);
-- PROJECTONTWIKKELAAR (many-to-many junction, Connector_ID: 716)

ALTER TABLE KP_PRJCTNTWKKLR_PLN ADD CONSTRAINT FK_KP_PRJCTNTWKKLR_PLN_2 FOREIGN KEY (PLAN_ID) REFERENCES PLAN (PLAN_ID);
-- PLAN (many-to-many junction, Connector_ID: 716)

ALTER TABLE KP_KPWNNGN_GBW ADD CONSTRAINT FK_KP_KPWNNGN_GBW_1 FOREIGN KEY (KOOPWONINGEN_ID) REFERENCES KOOPWONINGEN (GEBOUW_ID);
-- KOOPWONINGEN (many-to-many junction, Connector_ID: 717)

ALTER TABLE KP_KPWNNGN_GBW ADD CONSTRAINT FK_KP_KPWNNGN_GBW_2 FOREIGN KEY (GEBOUW_ID) REFERENCES GEBOUW (GEBOUW_ID);
-- GEBOUW (many-to-many junction, Connector_ID: 717)

ALTER TABLE KP_HRWNNGN_GBW ADD CONSTRAINT FK_KP_HRWNNGN_GBW_1 FOREIGN KEY (HUURWONINGEN_ID) REFERENCES HUURWONINGEN (GEBOUW_ID);
-- HUURWONINGEN (many-to-many junction, Connector_ID: 718)

ALTER TABLE KP_HRWNNGN_GBW ADD CONSTRAINT FK_KP_HRWNNGN_GBW_2 FOREIGN KEY (GEBOUW_ID) REFERENCES GEBOUW (GEBOUW_ID);
-- GEBOUW (many-to-many junction, Connector_ID: 718)

ALTER TABLE KP_NTNTRLJKPRSN_NTRLJKPRSN ADD CONSTRAINT FK_KP_NTNTRLJKPRSN_NTRLJKPRSN_1 FOREIGN KEY (NIETNATUURLIJKPERSOON_ID) REFERENCES NIETNATUURLIJKPERSOON (NIETNATUURLIJKPERSOON_ID);
-- NIETNATUURLIJKPERSOON (many-to-many junction, Connector_ID: 1970)

ALTER TABLE KP_NTNTRLJKPRSN_NTRLJKPRSN ADD CONSTRAINT FK_KP_NTNTRLJKPRSN_NTRLJKPRSN_2 FOREIGN KEY (NATUURLIJKPERSOON_ID) REFERENCES NATUURLIJKPERSOON (NATUURLIJKPERSOON_ID);
-- NATUURLIJKPERSOON (many-to-many junction, Connector_ID: 1970)

ALTER TABLE PLAN ADD CONSTRAINT FK_PLAN_IS_PROJECTLEIDER_VAN FOREIGN KEY (IS_PROJECTLEIDER_VAN_NATUURLIJKPERSOON_ID) REFERENCES NATUURLIJKPERSOON (NATUURLIJKPERSOON_ID);
-- IS_PROJECTLEIDER_VAN (0..1 to 0..*, Connector_ID: 714)

ALTER TABLE PLAN ADD CONSTRAINT FK_PLAN_BINNEN_PROGRAMMA FOREIGN KEY (BINNEN_PROGRAMMA_PROGRAMMA_ID) REFERENCES PROGRAMMA (PROGRAMMA_ID);
-- BINNEN_PROGRAMMA (0..1 to 0..*, Connector_ID: 715)

ALTER TABLE GEBOUW ADD CONSTRAINT FK_GEBOUW_BESTAAT_UIT FOREIGN KEY (BESTAAT_UIT_PLAN_ID) REFERENCES PLAN (PLAN_ID);
-- BESTAAT_UIT (1 to 1..*, Connector_ID: 719)

ALTER TABLE OMGEVINGSVERGUNNING ADD CONSTRAINT FK_OMGEVINGSVERGUNNING_BETREKKING_OP FOREIGN KEY (BETREKKING_OP_PLAN_ID) REFERENCES PLAN (PLAN_ID);
-- BETREKKING_OP (0..* to 0..1, Connector_ID: 727)

ALTER TABLE GEBOUW ADD CONSTRAINT FK_GEBOUW_ENERGIELABEL_ENUM_ID FOREIGN KEY (ENERGIELABEL_ENUM_ID_ENERGIELABEL_ENUM_ID) REFERENCES ENERGIELABEL_ENUM (ENERGIELABEL_ENUM_ID);
-- ENERGIELABEL_ENUM_ID (1 to 1, Connector_ID: enum_ref)

ALTER TABLE GEBOUW ADD CONSTRAINT FK_GEBOUW_OPPERVLAKTE_ENUM_ID FOREIGN KEY (OPPERVLAKTE_ENUM_ID_OPPERVLAKTE_WONING_ENUM_ID) REFERENCES OPPERVLAKTE_WONING_ENUM (OPPERVLAKTE_WONING_ENUM_ID);
-- OPPERVLAKTE_ENUM_ID (1 to 1, Connector_ID: enum_ref)

