Student Enrollment design question ER Diagram - data-modeling

I am working on a edtech project where I am trying to create a ER diagram between entities. Its a project for a school
Here are the assumptions.
School has programs
Program has batches (batch of 2020, 21, 22 etc)
Student enroll to a batch for a particular program for a academic year (20, 21, 22..etc)
Program has courses.
Courses have instructors.
I have created below entities.
Program
academic year
batch
students
Class (for group of students)
courses
Where I am stuck is I have to make a student enroll to a program, for a said academic year for a batch
Please help me to create a ER model for this and I am at the conceptual modelling phase.
I am new to this subject. So any help will be really appreciated.
Regards,
Dasso

Related

How can I calculate some students in my database?

I have such entities:
There are teachers, students, languages, courseGroups and a junction table GroupStudent
Every courseGroup can have only one teacher and one language, but every teacher and language can have multiple courses.
Also, there are students. Every student can have a few courses and every course can have a few students.
I'm not sure about this. Is it the right scheme?
Why do I think so?
I have a task. I have to calculate the number of students in every group, who study English.
The problem: I don't know how to find students who study English. It would be easier if student could have only one course. Then I'd have just check all English courses. However, student can have a few courses.
Example: Student Stepan has (CourseGroupid=1) an English course and (CourseGroupid=2) a Spanish course. I have to calculate this student for both groups.
P.S. I'd be very grateful if you'd just hit me is it possible to complete the task with this database or how to remake it :)
Do a DISTINCT select on Students.Id to get every student at max once. Then JOIN GroupStudent, CourseGroups and Languages. Lastly add a WHERE clause on Languages.Name = 'English'. You should be able to figure out the exact SQL on your own

Keep getting many-to-many relationships and I don't understand why

I have three tables:
Student - a table with student information including program, year entered, etc. Each student has a unique ID.
Fellowship packages - each academic year has a selection of fellowships available, though some packages can occur in multiple years. Each package has amounts associated for each semester during the academic year.
Awards - I want a table which has entries for: student, academic year of award, package, amounts associated with each package.
I should say, I also will need a field in "Awards" that denotes the funding source for each semester in each award.
The "Awards" table is linked to the "Student" table by the students ID#. It's linked to the "Package" by Academic Year. My problem is that I keep getting many-to-many relationships between "Awards" and "Packages", even if I create a separate table with just a list of the years and go through that.

Relational Database Design (Access)

I am attempting to design a DB that houses peoples time that is assigned to a project.
So for example, Bill is assigned to 20 hours on project A, and 20 hours on project B for weeks 50-52 of this year. For weeks 1-9 of next year he is assigned to project C for 40 hours a week.
How would you structure your database so that it could house all of this information for n number of people and projects?
Without knowing more details, it looks like you need three tables:
Person
Project
Person2Project (the join table)
You would enter your employee information in the Person table, Project Information in the Project table, and use the third table to join a person to a project using a primary key/foreign key. The information regarding weeks and hours would be included in the third table.

Database Schema for Student Report

I am trying to create a database schema for creating an online grade report. The report contains the name of the school, the name of the student, the name of the student’s teacher, the number of absent days, the number of tardy days, the student’s current overall grade, and the name of all assignments completed by the student including the date, category, and score for each of those assignments. The following is what I’ve been able to figure out so far. Does anyone have any suggestions about improving this schema?
School (school_id, school_name, course_id)
Course(course_id, course_name, teacher_id, student_id)
Teacher(teacher_id, teacher_name, student_id)
Student(student_id, student_name, grade, absent_days, tardy_days, assignment_id)
Assignment(assignment_id, assignment_name, assignment_date, category, score, course_id)
I suggest you remove the course_id from the school. The student_id from the course & teacher. The assignment_id from the student as described below. In addition I would probably split the assignments into an Assignment and a Mark table.
This results in the schema that a school can have multiple teachers that teach multiple classes that can have multiple assignments. The students belong to a school and can have multiple assignments. This is a pretty simple model and you might consider adding a 'Booking' table in which you store what students have booked what courses. In addition it might be possible that multiple teachers teach a course and teachers work in multiple schools or a course is offered in multiple schools. Just some ideas to think about...
School (school_id, school_name)
Course(course_id, course_name, teacher_id)
Teacher(teacher_id, teacher_name, school_id)
Student(student_id, student_name, absent_days, tardy_days, school_id)
Assignment(assignment_id, assignment_name, assignment_date, category, score, course_id, student_id)
Microsoft provides a sample school database for free. If you find that is helpful:
https://learn.microsoft.com/en-us/ef/ef6/resources/school-database

Database design decision translating requirements to relational models

So I've volunteer to create a Registering system for my local church's education ministry. It should be able to register new students and keep track of their progress. Here are the requirements I've managed to gather:
The educational institution offers several courses.
Courses have a name and description.
Courses are organized in levels. There are several courses per level.
Courses also have requirements (i.e. other courses that need to be taken first).
A student graduates from a level when it has passed all courses of that level.
If a student cannot pass a course, he may repeat it as many times as he wants/needs.
Students can only take one course per semester.
An inactive student is one that isn't enrolled in the current semester.
Teachers will teach only one course per semester. Teachers may teach a different course each semester.
There could be semesters a teacher doesn't teach.
Now, this is my relational model.
![https://dl.dropbox.com/u/10900918/rmodels.jpg][1]
My questions are:
Are there any tables missing?
Looking at the semester + semester_code_description: is this the best way to do this? Under the assumption that a year has 2 semesters and that each semester have the same start and end months (i.e. semester 1: Aug - Dec, semester 2: Jan - May), is semester_code_description table really necessary?
How could I improve the design?
Sorry I didn't include any arrows. The program I'm using is a mess.
Thanks so much for your valuable time in advance.
1) Nice job on your design. I don't see any missing tables - it looks like you covered all of your requirements.
2) The semester_description table makes sense to me, whether or not you need it depends on whether you plan to do anything with that data.
3) The requirement "students can only take one course per semester" would imply that the Has_Taken relationship's primary key should be (student_id, semester_id). As it stands now, I could insert two different courses for the same student and semester. Similarly for the Has_Teached relationship.
Some other thoughts:
The "last_whatever" columns in some of your tables will force some extra processing on your actual application. You will need some mechanism to monitor/update those. Another option would be to derive them from your tables. I can get a student's last_semester by finding the semester with the max year/code.
One last consideration, how stable are these courses/descriptions/levels? I worked at a university for several years and our courses would change on a semester basis, forcing us to save an entire copy of course records for each change because we want a student's record to reflect what they actually took at that time.
Here's a little example in your app. Let's say I graduated level 1. Then a year later, the church adds a new course (Course A) to level 1. I will effectively be un-graduated b/c now there are level 1 courses I don't have (Course A).
This may not matter to you if your courses are pretty stable. Good luck!

Resources