Отношения многие ко многим

Пожалуйста, помогите мне понять many to many отношения. Предположим, у меня есть таблица учителя и учеников, и в моем понимании это one-to- many,

учитель

TeacherId Primary Key 
TeacherName 

Ученик

StudentId Primary Key
TeacherId Foreign Key
StudentName

TeacherId может появиться несколько раз в таблице учеников. Я в замешательстве, потому что у ученика может быть много учителей.

  1. Когда я могу сказать что-то one-to-many и когда это many to many?

Я могу сказать, что у одного ученика может быть много учителей.

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

  1. Если у одного учителя и одного ученика может быть много учеников (для учителя), много учителей (для учеников). Как мне построить таблицу (ы)?
  2. Можно ли рассматривать отношения ученика и учителя или наоборот many-to-many?

Я понимаю, что после того, как я правильно определил отношения, мне будет легче решить, сколько таблиц создать, или нет необходимости создавать объединяющую таблицу. Из учебников и информации, которую я читаю онлайн, говорится, что я должен создать join-table если отношения many-to-many, Поэтому я подумал, что это должно выглядеть примерно так.

учитель

TeacherId Primary Key 
TeacherName 

Ученик

StudentId Primary Key
StudentName

Teacher_Student(присоединиться к столу)

Id Primary Key
TeacherId PRIMARY KEY
StudentId --took PKs of both Student and Teacher table.

Существуют ли условия, чтобы легко идентифицировать отношения, возможно, зависит ли это от одной таблицы или нет?

Буду признателен за любое объяснение. Я только начал изучать это.

Благодарю.

3 ответа

  1. Я думаю, что самый простой способ определить отношение "один ко многим" - это думать логически, например, одна книга может иметь много страниц, но одна страница не может иметь много книг. С вашим примером учеников и учителей вы правы, предполагая, что это отношения многих ко многим.

  2. Конструкция таблицы должна быть такой, как вы перечислили выше, одна таблица для студентов и преподавателей - со всеми метаданными, например, именем и т. Д. Затем вы можете использовать таблицу связи / соединения, чтобы превратить ваши отношения "многие ко многим" в отношения "один ко многим".

С другой стороны, в приведенном выше примере TeacherId указан как первичный ключ в Teacher_Student(таблица соединений), что неверно - это должны быть либо два соединения с внешним ключом с полем первичного Id, либо составной первичный ключ между teacherid и studentid - это устраняет необходимость в поле Id в таблице соединений.

  1. Да, в большинстве случаев эти отношения можно рассматривать как многие ко многим, потому что логически обдумывая это, один ученик может иметь учителей по разным предметам, а один учитель может иметь несколько учеников в одном классе. Можно было бы доказать, что могут быть некоторые особые случаи, когда учитель имеет только одного ученика, или у ученика есть только один класс - их все еще можно смоделировать с помощью таблицы присоединения, поэтому было бы лучше обрабатывать все случаи, а затем создавать ограниченную таблицу. структура, которая не может быть расширена.

Надеюсь, что это помогает ^^

Таблица имеет два поля внешнего ключа, например, таблицу Teacher_Student, где

 StudentId Foreign Key
 TeacherId Foreign Key

Обычно отношение многие ко многим определяется на диаграмме ER

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

Вы можете создать, например, таблицу курсов

с этими атрибутами (номер CRN обычно целое число, идентификатор студента, идентификатор учителя, тема, день и время

Примечание: день и время необязательны. Я просто уточню, как это будет

Я хотел бы, чтобы я мог помочь вам:)

Другие вопросы по тегам