Skip to content

Technische documentatie

Op deze pagina vind je een voorbeeld van hoe je een ERD ontwerpt, die naar een EERD vertaald, daar een SQL bestand van maakt en dit vervolgens als een MVC-structuur binnen je code implementeert.

ERD

ERD

EERD

erDiagram
    direction LR

    Event ||--o{ Participant : "has"

    Event {
        INT id "PK"
        VARCHAR name
        VARCHAR description "NULL"
        DATE date
        BOOLEAN archived
    }

    Participant {
        INT id "PK"
        INT eventId "FK"
        VARCHAR name
        INT share
    }

MySQL

/* Tables */
CREATE TABLE `event` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  `date` date NOT NULL,
  `archived` tinyint(1) NOT NULL
);

CREATE TABLE `participant` (
  `id` int(11) NOT NULL,
  `eventId` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `share` int(11) NOT NULL
);

/* Primary keys */
ALTER TABLE `event`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `participant`
  ADD PRIMARY KEY (`id`),
  ADD KEY `fk_participant_event` (`eventId`);

/* Auto increment */
ALTER TABLE `event`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `participant`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

/* Foreign keys */
ALTER TABLE `participant`
  ADD CONSTRAINT `fk_participant_event` FOREIGN KEY (`eventId`) REFERENCES `event` (`id`);

/* Data */
INSERT INTO `event` (`id`, `name`, `description`, `date`, `userId`, `archived`) VALUES
(1, 'Boottocht', 'Door de grachten van Amsterdam', '2025-08-21', 1, 0),
(2, 'Maandborrel', 'In Fest', '2025-08-28', 1, 1);

INSERT INTO `participant` (`id`, `eventId`, `name`, `share`) VALUES
(1, 1, 'Lennard', 10),
(2, 1, 'Ronald', 15),
(6, 2, 'Lennard', 64),
(7, 2, 'Ingrid', 64);

Class Diagram

---
  config:
    class:
      hideEmptyMembersBox: true
---
classDiagram
    direction LR

    event-add-ts -- event-add-html
    event-delete-ts -- event-delete-html
    event-detail-ts -- event-detail-html
    event-edit-ts -- event-edit-html
    events-overview-ts -- events-overview-html
    event-add-ts *-- EventController
    event-delete-ts *-- EventController
    event-detail-ts *-- EventController
    event-edit-ts *-- EventController
    events-overview-ts *-- EventController
    Controller <|-- EventController
    EventController *-- EventRepository
    EventController o-- Event
    EventRepository o-- Event
    EventRepository -- EventData

    namespace wwwroot {
        class event-add-html {
        }
        class event-delete-html {
        }
        class event-detail-html {
        }
        class event-edit-html {
        }
        class events-overview-html {
        }
    }

    namespace pages {
        class event-add-ts {
        }
        class event-delete-ts {
        }
        class event-detail-ts {
        }
        class event-edit-ts {
        }
        class events-overview-ts {
        }
    }

    namespace controllers {
        class Controller {
            +renderNav() void
        }

        class EventController {
            -eventRepository: EventRepository

            +constructor()
            +renderOverviewPage() Promise~void~
            +renderAddPage() Promise~void~
            +renderEditPage() Promise~void~
            +renderDeletePage() Promise~void~
            +renderDetailPage() Promise~void~
        }
    }

    namespace models {
        class Event {
            -_id: number
            -_name: string
            _description?: string
            _date: Date
            _archived: boolean

            +constructor(id, name, description, date, archived?)
            +get id() number
            +set id(value: number) void
            +get name() string
            +set name(value: number) void
            +get description() string | undefined
            +set description(value: string | undefined) void
            +get date() Date
            +set date(value: Date) void
            +get archived() boolean
            +set archived(value: boolean) void
        }
    }

    namespace repositories {
        class EventData {
            <<type>>
            id: number
            name: string
            description?: string
            date: Date
            archived: boolean
        }

        class EventRepository {
            +getById(id) Event | undefined
            +getAll() Event[]
            +create(name, description, date, archived) Event | undefined
            +update(event: Event) boolean
            +delete(id) boolean
        }
    }