2013-09-24 5 views
12

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

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

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

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

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

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

ответ

11

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

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

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

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

+0

Может ли атрибут PersonID быть как первичным ключом, так и внешним ключом в этой таблице Student? – Lana

+0

@ Lana да, это прекрасно подходит для атрибута PK, а также для FK, ссылающегося на другую таблицу (и в этом случае это необходимо) –

+0

Если Person-entity содержит много общих атрибутов для Student and Teacher, это все же хорошая идея разделите его на две таблицы? У вас были бы дубликаты атрибутов? Я собираюсь сохранить таблицу Person и иметь ссылку на нее, не имеющую нуля, от ученика и учителя. – Jake

0

Это зависит исключительно от характера отношений.

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

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

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

CREATE TABLE Person ( грех BIGINT, имя текста, PRIMARY KEY (син) );

CREATE TABLE Student ( GPA поплавок, fk_sin BigInt, FOREIGN KEY (fk_sin) Лит Person (грех) );

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

+0

. Я не получаю вашу мощность _IF ..._. ОП говорит: «Человек должен быть либо учеником, либо учителем». Таким образом, в отношениях 'Person' to' Student 'не будет от 1 до N ни от M до N, а от 1 до 0..1 – xmojmr

2

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

вариант 1

  • Person (SIN, Имя)
  • Студент (SIN, GPA)
  • Преподаватель (SIN, Зарплата)

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

  • Студент (SIN, имя, GPA)
  • Учитель (SIN, имя, зарплата)

вариант 3

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

вариант 4

  • Person (SIN, имя, GPA, зарплата, студент, преподаватель) Студент и преподаватель являются BOOL поля типа , это может быть да или нет, хороший вариант для перекрытия

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