Database Structure
This document describes the database schema used by the Kantinator API service.
Overview
Kantinator uses MySQL as its database system with Entity Framework Core for data access. The database follows a normalized relational design with proper foreign key constraints and relationships.
Entity-Relationship Diagram
The following ER diagram shows the conceptual data model:

Database Schema
The complete database schema with all tables, columns, data types, and relationships:

Core Entities
User Management
Users
Stores user account information including credentials and profile data.
Related Entities:
UserRole- Many-to-many relationship with rolesRefreshToken- One-to-many relationship for authentication tokensPreorder- One-to-many relationship for meal preorders
Roles
Defines different user roles in the system (Admin, Manager, User).
Related Entities:
UserRole- Many-to-many relationship with usersRolePermission- Many-to-many relationship with permissions
Permissions
Granular permissions for fine-grained access control.
Related Entities:
RolePermission- Many-to-many relationship with roles
Menu Management
WeeklyMenu
Represents a menu for a specific week (identified by calendar week and year).
Related Entities:
Menu- One-to-many relationship with daily menus
Menu
Represents a menu for a specific date.
Related Entities:
WeeklyMenu- Many-to-one relationshipMenuDailyMenu- Many-to-many relationship with daily menus
DailyMenu
Represents a specific meal offering with its foods.
Related Entities:
MenuDailyMenu- Many-to-many relationship with menusFood- Many-to-one relationshipStatus- Many-to-one relationship for availability status
Food
Represents individual food items with their properties.
Related Entities:
FoodType
Categorizes foods (e.g., Main Course, Side Dish, Dessert).
Related Entities:
Food- One-to-many relationship
Status
Tracks the availability status of menu items.
Related Entities:
DailyMenu- One-to-many relationship
Orders
Preorder
Stores user meal preorders.
Related Entities:
Authentication
RefreshToken
Stores refresh tokens for JWT authentication with token rotation support.
Related Entities:
User- Many-to-one relationship
Key Relationships
Many-to-Many Relationships
Users ↔ Roles
- Junction Table:
UserRole - Allows users to have multiple roles
- Junction Table:
Roles ↔ Permissions
- Junction Table:
RolePermission - Allows roles to have multiple permissions
- Junction Table:
Menu ↔ DailyMenu
- Junction Table:
MenuDailyMenu - Allows a menu to have multiple daily menu options
- Junction Table:
One-to-Many Relationships
-
- A weekly menu contains multiple daily menus
-
- Each food belongs to one food type
-
- Each food can be part of multiple daily menus
-
- Tracks availability of daily menu items
-
- Each user can have multiple refresh tokens
-
- Each user can have multiple preorders
Migrations
The database schema is managed through Entity Framework Core migrations located in:
Kantinator.ApiService/Migrations/
Migration History
20251127133329_Initial- Initial database schema20251127140640_ChangedMenuFoods- Modified menu-food relationships20251127145749_AddedCalenderWeek- Added calendar week tracking20251127211529_RemovedWeekDay- Removed weekday enum20251128080545_ExpandedMenuDailyMenu- Expanded menu daily menu junction20251128184007_FixedDateTimeTypes- Fixed DateTime type handling20251202130331_ChangedSomeDataTypes- Data type adjustments20251207092948_UserAndRefreshTokenTables- Added user authentication tables20251209134329_AddedUserRolesAndPermissions- Added role-based access control
Database Context
The database context is defined in:
KantinatorDbContext
It includes:
- Entity configurations
- Relationship mappings
- Seed data setup
- Index definitions
Connection String
The application uses MySQL with connection strings configured in appsettings.json. The connection string format:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=kantinator;User=root;Password=***"
}
}
Data Seeding
Initial data seeding is handled by:
DatabaseSeeder
This includes:
- Default roles and permissions
- Sample food types
- Test users (in development mode)