Диаграмма взаимоотношений сущностей. Как отношение ISA переводится в таблицы?

My drawing of a simple ER diagram

Мне просто интересно, как отношение ISA на диаграмме ER переводится в таблицы в базе данных.

Было бы 3 таблицы? Один для человека, один для ученика и один для Учителя?

Или было бы 2 таблицы? Один для ученика и один для учителя, с каждой сущностью, имеющей атрибуты человека + свои собственные?

Или будет ли одна таблица со всеми 4 атрибутами, а некоторые из квадратов в таблице равны нулю в зависимости от того, был ли это учеником или учителем в строке?

ПРИМЕЧАНИЕ. Я забыл добавить это, но есть полное отношение к отношениям ISA, поэтому человек должен быть либо учеником, либо учителем.

Ответ 1

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

Если участие вместо этого является необязательным (это не ваше дело, но пусть оно полно), то опция 3 таблицы - это путь, с таблицей Person (PersonID, Name), а затем две другие таблицы который будет ссылаться на таблицу Person, например Студент (PersonID, GPA), с PersonID, являющимся PK и FK, ссылающимся на Person (PersonID).

Вариант 1 таблицы, вероятно, не самый лучший способ здесь, и он будет создавать несколько записей с нулевыми значениями (если человек является учеником, атрибуты только для учителя будут равны нулю и наоборот).

Если дизъюнктность различна, то это другая история.

Ответ 2

есть 4 варианта, которые вы можете использовать, чтобы сопоставить это с ER,

вариант 1

  • Лицо ( SIN, Имя)
  • Student ( SIN, GPA)
  • Учитель ( SIN, зарплата)

вариант 2. Поскольку это отношение покрытия, опция 2 не подходит.

  • Student ( SIN, имя, GPA)
  • Учитель ( SIN, имя, зарплата)

вариант 3

  • Человек ( SIN, имя, GPA, зарплата, Person_Type)   человек тип может быть студентом/преподавателем

вариант 4

  • Лицо ( SIN, Имя, GPA, Зарплата, Студент, Учитель) Студент и Учитель - это поля типа bool, это может быть да или нет, хороший вариант для перекрытия

Поскольку подкласс не имеет большого количества атрибутов, вариант 3 и вариант 4 лучше сопоставить это с ER

Ответ 3

Это полностью зависит от природы отношений.

ЕСЛИ отношения между Лицом и Студентом будут от 1 до N (от одного до многих), тогда правильным способом было бы создать отношение внешнего ключа, где у студента есть внешний ключ обратно в колонку первичного ключа идентификатора личности, То же самое для отношений "Человек к учителю".

Однако, если отношение M от N (от многих до многих), тогда вы захотите создать отдельную таблицу, содержащую эти отношения.

Предполагая, что ваш ERD использует отношения от 1 до N, ваша структура таблицы должна выглядеть примерно так:

СОЗДАТЬ ТАБЛИЦУ ( грех bigint, текст имени, ПЕРВИЧНЫЙ КЛЮЧ (грех) );

CREATE TABLE Студент ( GPA float, fk_sin bigint, FOREIGN KEY (fk_sin) ССЫЛКИ Лицо (грех) );

и следуйте тому же примеру таблицы Учителя. Этот подход позволит вам добраться до третьей нормальной формы.