Data Model
The PostgreSQL schema is built around six core entities. All of them are deployed through migrations and are live in the production database.
Core entities
User — the base identity record, specialized into three roles: Innovator, Mentor, and Admin. Role determines which dashboard a user sees and which API routes they can call.
Incubation Application — links to a User, tracks the application's status through its lifecycle (submitted, under review, approved, rejected), and is the record that, once approved, triggers automatic account creation for a new innovator.
Event — created and managed by an Admin, visible to Innovators for registration. Events are the mechanism through which innovators engage with Centre activities outside the core incubation stages.
Mentor Assignment — a junction entity between Innovator and Mentor, capturing which mentor is responsible for which innovator. This is the entity the domain-matching logic writes to when an administrator confirms an assignment.
Progress Log — records stage transitions and milestones for an innovator over time, forming the history behind the progress view on the innovator dashboard.
Notification — stores communication records so that in-app, email, and SMS notifications have a durable, queryable trail, not just a fire-and-forget side effect.
Relationships at a glance
- A User with role Innovator has one profile and can hold many Incubation Applications and Progress Logs over time.
- An Incubation Application, once approved, results in exactly one active innovator account.
- A Mentor Assignment connects exactly one Mentor to one Innovator at a time, though a Mentor may hold several assignments concurrently.
- Events are independent of incubation stage — any registered Innovator can apply to any open Event.
- Notifications reference the User they were sent to and, where relevant, the entity that triggered them (an application decision, a new assignment, an upcoming deadline).
Design intent
The schema favors explicit junction tables (like Mentor Assignment) over denormalized foreign keys, so that history isn't lost when a mentor is reassigned — the prior assignment record simply becomes inactive rather than being overwritten. This is what makes the audit trail described in Ethical Considerations possible without additional logging infrastructure.