Entity Relationship Diagram
The diagram below shows all GCMS database tables and the relationships between them. Each box represents a table, and each line represents a foreign key relationship.
erDiagram
users ||--o{ user_projects : "joins"
projects ||--o{ user_projects : "has members"
users ||--o{ projects : "leads"
users ||--o{ projects : "creates"
projects ||--o{ tasks : "contains"
users ||--o{ tasks : "assigned to"
projects ||--o{ messages : "has"
users ||--o{ messages : "sends"
projects ||--o{ meetings : "schedules"
users ||--o{ meetings : "leads"
meetings ||--o{ meeting_attendances : "tracks"
users ||--o{ meeting_attendances : "attends"
projects ||--o{ widgets : "displays"
users ||--o{ notifications : "receives"
projects ||--o{ notifications : "triggers"
projects ||--o{ files : "stores"
projects ||--o{ ai_chat_messages : "has chat history"
users ||--o{ ai_chat_messages : "authors"
users {
uuid user_id PK
varchar user_first_name
varchar user_last_name
varchar user_email UK
text microsoft_id UK
varchar username UK
timestamptz date_created
timestamptz last_login
boolean email_notifications
}
projects {
uuid project_id PK
uuid team_leader_id FK
uuid created_by FK
varchar project_name
date project_deadline
timestamptz p_date_created
timestamptz p_time_updated
}
user_projects {
uuid user_id PK_FK
uuid project_id PK_FK
}
tasks {
uuid task_id PK
uuid project_id FK
uuid assignee_id FK
varchar task_title
text task_description
numeric task_weight
task_status task_status
date task_deadline
timestamptz t_date_created
timestamptz t_time_updated
}
messages {
uuid message_id PK
uuid sender_id FK
uuid project_id FK
text message_content
timestamptz m_date_sent
}
meetings {
uuid meeting_id PK
uuid team_leader_id FK
uuid project_id FK
timestamptz scheduled_time
integer meeting_duration
meeting_location meeting_location
text meeting_notes
}
meeting_attendances {
uuid attendance_id PK
uuid user_id FK
uuid meeting_id FK
attendance_status attendance_status
timestamptz check_in_time
}
notifications {
uuid notification_id PK
uuid user_id FK
uuid project_id FK
notification_type notification_type
text notification_message
timestamptz n_date_created
text target_username
text project_name
}
widgets {
uuid widget_id PK
uuid project_id FK
numeric widget_x
numeric widget_y
varchar widget_text
}
files {
uuid file_id PK
uuid project_id FK
varchar file_name
text storage_path
bigint size
timestamp date_uploaded
}
ai_chat_messages {
uuid ai_message_id PK
uuid project_id FK
uuid user_id FK
ai_chat_role role
text content
timestamptz ai_date_sent
}
Reading the diagram
PK — primary key
FK — foreign key
UK — unique constraint
PK_FK — primary key that is also a foreign key (composite key in junction tables)
||--o{— one-to-many relationship (one entity on the left, many on the right)