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

CREATE TABLE PROGRAMMA (
    PROGRAMMA_ID NUMBER PRIMARY KEY,
    NAAM VARCHAR2(80)
);

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

CREATE TABLE ENERGIELABEL_ENUM (
    ENERGIELABEL_ENUM_ID NUMBER PRIMARY KEY,
    VALUE VARCHAR2(255)
);

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

CREATE TABLE OPPERVLAKTE_WONING_ENUM (
    OPPERVLAKTE_WONING_ENUM_ID NUMBER PRIMARY KEY,
    VALUE VARCHAR2(255)
);

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

CREATE TABLE PROJECTONTWIKKELAAR (
    NIETNATUURLIJKPERSOON_ID NUMBER PRIMARY KEY,
    ADRES VARCHAR2(200),
    NAAM VARCHAR2(80)
);

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

CREATE TABLE PROJECTLEIDER (
    NATUURLIJKPERSOON_ID NUMBER PRIMARY KEY,
    NAAM VARCHAR2(80)
);

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

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

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

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

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

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

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

CREATE TABLE STUDENTENWONINGEN (
    GEBOUW_ID NUMBER PRIMARY KEY,
    HUURPRIJS NUMBER(10,2),
    ZELFSTANDIG NUMBER(1)
);

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

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

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

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

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)

