UniTrack is a PostgreSQL project for building and practicing a university database. It helps you learn relational schema design, SQL queries, joins, aggregation, views, transactions, indexes, JSONB, full-text search, and triggers while managing professors, students, courses, and enrollments.
unitrack/
├── README.md
├── Phases.md
├── schema/
│ ├── 01_create_tables.sql
│ ├── 02_seed_data.sql
│ └── 03_alter_tables.sql
├── sql/
│ ├── 03_joins.sql
│ ├── 04_basic_queries.sql
│ ├── 05_aggregations.sql
│ ├── 06_intermediate.sql
│ ├── 07_views.sql
│ ├── 08_transactions.sql
│ ├── 09_indexes_optimization.sql
│ ├── 10_json_fulltext.sql
│ ├── 11_procedures_triggers.sql
│ └── 12_advanced_queries.sql
└── screenshots/
└── explain_analyze/
-
professorsidprimary keynamedepartment
-
studentsidprimary keynameageemailgpametadataJSONB
-
coursesidprimary keytitlecreditprofessor_idforeign keymax_capacityenrolled_countdescriptiondescription_tsv
-
enrollementstudent_idforeign keycourse_idforeign keygradeenrolled_datesemester
-
deleted_students_logstudent_idnamedeleted_at
- Create the database.
CREATE DATABASE unitrack;- Connect to it in PostgreSQL.
- Run the schema files in order.
Run these files from top to bottom:
schema/01_create_tables.sql
schema/02_seed_data.sql
schema/03_alter_tables.sql
sql/03_joins.sql
sql/04_basic_queries.sql
sql/05_aggregations.sql
sql/06_intermediate.sql
sql/07_views.sql
sql/08_transactions.sql
sql/09_indexes_optimization.sql
sql/10_json_fulltext.sql
sql/11_procedures_triggers.sql
sql/12_advanced_queries.sql
- Phase 1: project setup
- Phase 2: core tables and constraints
- Phase 3: seed data
- Phase 4: basic
SELECTqueries - Phase 5: joins
- Phase 6: aggregation reports
- Phase 7: subqueries and CTEs
- Phase 8: schema extensions for GPA, capacity, and semester
- Phase 9: views
- Phase 10: transactions
- Phase 11: indexes and query plans
- Phase 12: JSONB and full-text search
- Phase 13: procedures and triggers
- Phase 14: advanced analytical queries
- The project intentionally keeps the current names
enrollementandcreditin the SQL files. - See Phases.md for the learning-first phase plan.
- The SQL files are written for PostgreSQL.
\dt
SELECT * FROM students;
SELECT * FROM courses;
SELECT * FROM enrollement;