Структура базы данных SQL с двумя изменяющимися свойствами

#sql #relational-database

#sql #реляционная база данных

Вопрос:

Давайте предположим, что я создаю серверную часть программного обеспечения для управления университетом. У меня есть таблица users со следующими столбцами:

 id
name
birthday
last_english_grade
last_it_grade
  

столбцы таблицы profs:

 id
name
birthday
  

Я хотел бы иметь третью таблицу, с помощью которой я мог бы определить всех профессоров, обучающих студента.
Итак, я хотел бы назначить несколько преподавателей каждому ученику.
Эти преподаватели могут измениться в любое время.
Новые учащиеся также могут быть добавлены в любое время.

Каков наилучший способ добиться этого?

Ответ №1:

Каноническим способом сделать это было бы ввести третью таблицу junction, которая существует главным образом для связи пользователей с профессорами:

 users_profs (
    user_id,
    prof_id,
    PRIMARY KEY (user_id, prof_id)
)
  

Первичный ключ этой таблицы соединений представляет собой комбинацию идентификатора пользователя и профессора. Обратите внимание, что эта таблица довольно скудная и позволяет избежать проблемы повторения метаданных для данного пользователя или профессора. Скорее, информация о пользователе / профессоре остается в ваших двух исходных таблицах и не повторяется.

Комментарии:

1. Спасибо. Как бы я управлял несколькими преподавателями, принадлежащими одному студенту?

2. Каждое уникальное отношение студент-профессор получает одну запись в таблице соединений, которую я предложил.

3. Большое спасибо. Действительно, выглядит как очень чистое решение!