и добро пожаловать в переполнение стека. Нам не очень нравятся изображения для определений схемы - с ними сложно работать, и мы в конечном итоге тиражируем содержимое в тексте.
Кажется, ваш дизайн не совсем соответствует требованиям, которые вы описываете.
Таблица student_semester_registrations
предлагает студентам записаться на семестр в рамках программы. Я не могу найти это в ваших требованиях.
Вы не захватываете A program can have many levels
, A program can have many courses
или A course can be in many programs
, A course can have many programs
,
A course can have many sections
, A course can have many groups
.
Чтобы ответить на ваши вопросы:
где я должен поставить оценку за каждый курс
Оценка является признаком участия студента в курсе. Так что это относится к student_course_registration
. Отношения между этим участием и «семестром» не совсем четко представлены в определении вашей проблемы «можно взять», не предполагает, что студент может записаться на курс только на один семестр. Вместо этого он предполагает, что между курсом и семестром существует отношение «многие ко многим» (т. Е. Таблица соединений course_semesters
).
is (it) OK to have composite keys
Да, если вы уверены, что созданные вами ключи являются инвариантными.
I do not know how to related courses and programs tables.
Требования предполагают отношения «многие ко многим» (курс относится к 1 или более программам, программа имеет 1 или более курсов). Вы фиксируете это через таблицу соединений programs_courses
с внешними ключами к курсу и программе.