MySQL дизайн один ко многим? - PullRequest
1 голос
/ 30 марта 2012

У меня есть база данных, которая имеет дело со студентами.Итак, у меня есть стол студентов и классы.Теперь каждый ученик может посещать столько классов, сколько он хочет;Как бы я смоделировать это в схеме базы данных MySQL?

Таблица студентов:

student_id
student_name
student_age
...

Таблица классов:

class_id
class_name
class_profesor
...

По сути, я не знаю, как проектироватьстол, где один ученик может зарегистрировать себя для столько классов, сколько он хочет?

Должен ли я составить для этого еще одну таблицу?
Это отношение один-ко-многим?

Ответы [ 3 ]

3 голосов
/ 30 марта 2012

Вам нужна таблица «многие ко многим» или таблица сопоставления, например ::10000

class_student
-------------
class_id
student_id

Первичный ключ для этой таблицы должен быть: (class_id, student_id).
Создать индекс на:
(class_id, student_id) и
(student_id, class_id).
Взгляните на этот другой ТАК вопрос и ответы для более подробной информации.


Как только вы это настроите, вы можете запросить зачисленных в данный класс с помощью:

SELECT c.class_name, s.student_name, ...
FROM   class_student cs
       LEFT JOIN class c   ON c.class_id = cs.class_id
       LEFT JOIN student s ON s.student_id = cs.student_id
WHERE  cs.class_id = '<some_class_id_here>'
0 голосов
/ 30 марта 2012

Согласитесь с Берни, это отношения многие ко многим. В дополнение к тому, что объяснил Берни, вы можете добавить дополнительные поля в таблицу «class_student», например, например, среднюю оценку ученика в этом классе или сколько раз он не посещал этот класс.

0 голосов
/ 30 марта 2012

Вы можете поддерживать еще одну таблицу «Goes_to», в которой будут храниться только student_id и class_id. Это нормализует ваши данные, а также вы можете писать различные типы запросов на основе ваших требований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...