Я создаю базу данных для сообщества, чтобы хранить детали всех участников.Как лучше всего создать такую ​​базу данных? - PullRequest
0 голосов
/ 08 мая 2019

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

Для примера: есть семья из четырех человек. Мать, отец, сын и дочь.Сын выходит замуж за девушку из другой семьи в том же сообществе (их данные также находятся в той же базе данных).У молодоженов скоро новый член.Кроме того, они должны добавить своих бабушек и дедушек в базу данных на более позднем этапе (в данном случае родители как матери, так и отца).

Каков наилучший способ создания схемы для такой базы данных

У меня есть схема member_details, в которой данные всех участников сообщества будут храниться в одной таблице примерно так.

member_details: ID | Name | Birthdate | Gender | Father | Mother | Spouse | Child

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

Работает ли эта схема с технической точки зрения?

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

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Я бы посоветовал вам использовать две таблицы. Один для членов сообщества и один для отношений между ними. Примерно так:

Members:
ID | Name | Birth | Gender
Relations:
First Member ID | Second Member ID | Relation

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

1 голос
/ 08 мая 2019

Как обычно, «это зависит».

Первый вопрос: «Как вы будете использовать эти данные?». Какие вопросы вы ожидаете от базы данных? Если вы хотите показать профиль человека с его отношениями, это довольно просто. Если вы хотите узнать, сколько у человека детей, или кто является дедушкой человека, или возраст чьего-то младшего ребенка, это может быть немного сложнее.

Второй вопрос: "Насколько вы уверены, что это единственные отношения, которые вы хотите сохранить?" Возможно, вы также хотите сохранить «сосед», «член команды», «busy_to» - или, возможно, вам нужно сохранить эту информацию позже. Может быть, вам нужно принять во внимание развод людей или повторный брак.

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

@ ba3a предлагает отделить информацию о людях от информации об отношениях. Это намного «чище» - и с меньшей вероятностью потребует новых столбцов, поскольку вы сохраняете больше типов отношений. Для отображения профиля человека требуется запрос с большим количеством внешних объединений. Чтобы найти прародителя, требуются самостоятельные объединения в таблице «отношений».

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