Связи между таблицами. SQL Server

Подскажите, правильно ли я начинаю выстраивать БД:

пока есть 3 таблицы: dbo.Exam, dbo.Offset, dbo.Session.

У экзамена и зачета схожая структура: id name date.

Структура dbo.Session: id fromDate toDate.

Сессия одна, но у нее может быть несколько зачетов и экзаменов.

Как я предполагаю, мне нужно сделать связь Многие ко многим.

Поэтому делаю следующее:

create table dbo.StudentSession
(
   SessionId int foreign key references dbo.Session(Id),
   ExamId int foreign key references dbo.Exam(Id),
   OffsetId int foreign key references dbo.Offset(Id),
   constraint id primary key(SessionId, ExamId, OffsetId)
)

P.s как я потом могу ссылаться на id dbo.StudentSession из других таблиц?


Ответы (1 шт):

Автор решения: Дмитрий Мишенёв

Если вы утверждаете, что одна сессия может содержать несколько экзаменов и зачетов , то это две связи один ко многим. Рациональнее создать таблицы SessionExam SessionOffset , состоящие соответственно из sessionId, examId и sessionId, offsetId. Это позволит не плодить записи в будущей таблице StudentSession. Соответственно потом из этих таблиц по внешнему ключу sessionId можно будет получить всю необходимую информацию об экзаменах и зачётах по id сессии.

→ Ссылка