Introduction
Let me be honest SQL has been giving me a hard time for a while. So, I was getting stuck even with the basics. So I decided to stop running away and build a real project from scratch: a student enrollment system.
I wanted something simple but useful, where I could understand how real systems are built with SQL,,including relationships, foreign keys, and triggers. This is how it went down.
What the System Does
This project is all about managing a small school system. It handles:
- Storing student info (name, email, date of birth)
- Keeping track of instructors
- Linking courses to instructors
- Enrolling students to courses
- Logging every enrollment using a trigger
Tables I Created
Table | Description |
---|---|
Students | Stores student details like name and date of birth |
Instructors | Stores instructor info |
Courses | Each course is taught by one instructor |
Enrollments | Shows which student is taking which course |
Enrollment_Log | Automatically logs new enrollments using a trigger |
SQL Code I Used
1. Students Table
CREATE TABLE Students (
student_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100) UNIQUE,
date_of_birth DATE
);
2. Instructors Table
CREATE TABLE Instructors (
instructor_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100) UNIQUE
);
3. Courses Table
CREATE TABLE Courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(100),
instructor_id INT,
FOREIGN KEY (instructor_id) REFERENCES Instructors(instructor_id)
);
4. Enrollments Table
CREATE TABLE Enrollments (
enrollment_id INT PRIMARY KEY,
student_id INT,
course_id INT,
grade CHAR(2),
FOREIGN KEY (student_id) REFERENCES Students(student_id),
FOREIGN KEY (course_id) REFERENCES Courses(course_id)
);
5. Enrollment Log Table
CREATE TABLE Enrollment_Log (
log_id INT PRIMARY KEY AUTO_INCREMENT,
enrollment_id INT,
log_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
6. Trigger to Log Enrollments
CREATE TRIGGER LogNewEnrollment
AFTER INSERT ON Enrollments
FOR EACH ROW
INSERT INTO Enrollment_Log (enrollment_id)
VALUES (NEW.enrollment_id);
Sample Data I Added
1.Instructors
INSERT INTO Instructors (instructor_id, first_name, last_name, email) VALUES
(1, 'Thomas', 'Ndegwa', '[email protected]'),
(2, 'Lilian', 'Achieng', '[email protected]'),
(3, 'George', 'Kariuki', '[email protected]');
2. Students
INSERT INTO Students (student_id, first_name, last_name, email, date_of_birth) VALUES
(101, 'Alice', 'Mwende', '[email protected]', '2002-04-12'),
(102, 'Brian', 'Otieno', '[email protected]', '2001-08-05');
3. Courses
INSERT INTO Courses (course_id, course_name, instructor_id) VALUES
(201, 'Database Systems', 1),
(202, 'Python Programming', 2),
(203, 'Data Analytics', 3);
4.Enrollments
INSERT INTO Enrollments (enrollment_id, student_id, course_id, grade) VALUES
(301, 101, 201, 'A'),
(302, 102, 202, 'B');
What I Learned
Through this project, I’ve learned:
How to design related tables using foreign keys
How to keep data clean and connected
How to use triggers to automate tasks (like logging)
The importance of thinking through the whole structure before writing code
This is way better than just memorizing;
SELECT * FROM table;
What I Might Add Later
Add user logins for students and instructors
Store attendance and class schedules
Build a simple dashboard with Power BI
Final Thoughts
This was a small project, but it really helped me understand SQL better. I now see why people say the database is the heart of any system.
If you're learning SQL, I encourage you to try something small like this,it makes everything more clear.