Структура базы данных: создание таблицы Person, на которую будут ссылаться другие таблицы

#database #foreign-keys

#База данных #внешние ключи

Вопрос:

У меня есть вопрос о создании сущностей, специфичный для информационной системы для студентов, которую я создаю. я создал таблицу Person (id ..), и я пытаюсь выяснить, как я могу обрабатывать ссылки на моего ученика, родительские ссылки. хорошая ли идея создать две отдельные таблицы (Student, Parent), которые ссылаются на таблицу Person с помощью отношения FK? Все сведения о человеке (имя, фамилия, SSN …) были заданы в таблице Person, но есть различия между родителем и учеником, как вы обрабатываете это в базе данных?

Ответ №1:

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

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

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

1. Если я создам две отдельные таблицы (Parent, Student), то у меня будет всего три таблицы (включая таблицу Person). Как мне избежать создания повторяющихся записей в каждой из этих таблиц. Моему приложению необходимо создать Student и подключить их к родительскому, но я должен был уточнить свой вопрос. Я спрашивал, нужна ли мне вообще таблица Person?

2. Таблица person не нужна. Технически родитель и ученик могут быть подклассами person. Но это большая дополнительная работа, которая не приносит большой пользы в этом примере. Я бы определенно перенес записи из таблицы person в правильную таблицу (student или parent) и удалил таблицу person.

3. Я использовал таблицу Person из-за увеличения числа ролей в моем приложении. Однако в итоге я создал таблицу (student amp; parent) для упрощения связи, как вы упомянули. Спасибо за вашу помощь.

Ответ №2:

Я согласен с Кейси Робинсоном в том, что это чистое решение.

Но если у вас уже есть заполненная таблица Person, которая используется другим кодом … короче говоря, вы не можете изменить таблицу Person, тогда вот что я бы предложил:

Создайте таблицу (studentParent), в которой будут два столбца (student_id и parent_id) с обоими внешними ключами. studentParent.student_id = Person.id ученика и studentParent.parent_id = Person.id родительской.

Таким образом, вам не придется изменять таблицу Person. И сможет создать отношения parent, student.

Ответ №3:

Без знания более подробной информации кажется, что двух таблиц Person и Student должно быть достаточно. В таблице Student есть два столбца, такие как Student_id и Parent_id, каждый из которых является значением FK для person_id в таблице Person. Предполагается, что вам нужно будет знать только для student, который является родителем, а не для каждого пользователя. Также предполагается, что и ученик, и родитель являются person.