Моделирование данных: этнические группы с отношениями родитель-ребенок? - PullRequest
1 голос
/ 24 ноября 2010

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

Решение 1 (одна таблица):

Ethnicity
- Id
- Parent Id
- Name

Решение 2 (две таблицы):

Ethnicity Group
- Id
- Name

Ethnicity
- Id
- Ethnicity Group Id
- Name

Я буду использовать это, чтобы пользователи могли искать других пользователей в зависимости от этнической принадлежности.Какой из 2 подходов будет работать лучше для меня?Есть ли другой подход, который я не рассматривал?Я использую MySQL.

Ответы [ 3 ]

1 голос
/ 25 ноября 2010

Что ж, в реальном мире существует такая группа, как этническая группа, поэтому вам нужны две таблицы, а не одна. В реальном мире есть три уровня (самый верхний - Гонка), но я понимаю, что в этом нет необходимости. Если вы разбиваете три уровня на два, вы должны быть осторожны и правильно выложить их в начале. Тем не менее, они будут уязвимы для людей, которые говорят, что хотят настоящего, и вам, возможно, придется изменить его или изменить структуру, чтобы она больше подходила ... гораздо больше работы позже).

Если вы делаете это правильно, в соответствии с реальным миром, эта проблема устранена. Дайте мне знать, если вы хотите Race, и я поменяю модель.

Таблицы слишком малы, а ключи слишком значимы, чтобы добавить к ним столбцы Id-iot; оставьте их как чистые реляционные ключи, иначе вы потеряете силу реляционного движка. Если вам действительно нужны узкие ключи, используйте CHAR (2) EthnicityCode, а не NUMERIC (10,0) или бессмысленное число.

Ссылка на модель данных об этнической принадлежности (плюс ответ на другой вопрос)

Ссылка на нотацию IDEF1X для тех, кто не знаком со стандартом реляционного моделирования.

0 голосов
/ 25 ноября 2010

Я не хочу быть неловким, но что ты собираешься делать с людьми смешанного происхождения?Я думаю, что лучшее, на что вы можете надеяться, это простое одноуровневое перечисление, подобное тому, что вы получаете в формах переписи (например, «черный», «белый», «азиатский», «испаноязычный» и т. Д.).Это не идеально, но позволяет людям довольно легко идентифицировать себя.Такие понятия, как раса и этническая принадлежность, достаточно шерстистые, не пытаясь создать над ними дополнительные (в значительной степени бессмысленные) иерархии, поэтому мое внутреннее чувство заключается в том, чтобы все было просто.

0 голосов
/ 24 ноября 2010

Если в реальном мире нет ничего похожего на «этническую группу», я бы посоветовал вам не включать ее в модель данных.

Все запросы, которые вы можете выполнить со второй, которую выможно также сделать с первым, потому что вы можете просто выбрать FROM ethnicity AS e1 JOIN ethnicity AS es ON (e2.ethnicity_id = e1.parent_id).

...