Нормализуется ли гендерная таблица слишком далеко? - PullRequest
10 голосов
/ 18 августа 2010

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

User table:
userid int pk,
genderid char(1) fk
etc...

gender table:
genderid char(1) pk,
gender varchar(20)

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

Ответы [ 7 ]

11 голосов
/ 18 августа 2010

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

Я бы нормализовал, если:

  • Вы хотите иметь возможность управлять «описанием» пола в базе данных, а не в коде.
    • Это позволяет быстро изменить описание, например, «Мужчина / Женщина» на «Мужчина / Женщина».
  • Ваше приложение в настоящее время должно обрабатывать или, возможно, будет обрабатывать требования локализации в будущем, то есть иметь возможность указывать пол на разных языках.
  • Ваш бизнес требует, чтобы все было нормализовано.

Я бы не нормализовал, если:

  • У вас есть относительно простое приложение, в котором вы можете легко управлять описанием пола в коде, а не в базе данных.
  • У вас есть жесткий программный контроль данных, входящих и выходящих из поля пола , так что вы можете обеспечить согласованность данных в этом поле.
  • Вам нужно только поле пола для сбора информации, то есть вам не нужно много программных обновлений этого поля, как только оно установлено в первый раз.
3 голосов
/ 18 августа 2010

Я могу представить себе приложения, в которых я бы использовал разные столбцы для пола и пола, у меня есть три значения для пола (мужчина / женщина / отказ от статуса) и шесть для пола (мужчина / женщина / трансгендерный мужчина / трансгендерная женщина / бесполое)/отказаться от состояния).Конечно, я живу в Сан-Франциско, где существует уровень публичного обсуждения проблем трансгендеров, за которым стоит большая часть остального мира.

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

3 голосов
/ 18 августа 2010

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

1 голос
/ 18 августа 2010

Что ж, ваша компания может потребовать, чтобы, по возможности, все было нормализовано.

Кроме того, в зависимости от бизнеса и данных, вам также может понадобиться включить транссексуалов, которые могли бы создать 3+ пола (я не знаю, сколько их, не проверяли)

0 голосов
/ 29 апреля 2011

Просто подумал, что я бы здесь высказал свое мнение.У @Ben McCormack есть отличный ответ с небольшим предостережением: что касается локализации, иногда есть лучшие способы справиться с этим, чем значения, определенные непосредственно в вашей базе данных.

Например, вы упоминаете WPF.С .Net у вас есть различные ресурсы локализации, которые гораздо лучше подходят для управления различиями в том, чтобы испускать "Male" или "Samec" (чешский).

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


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

На первый взгляд это звучит как ваши стандартные мужские / женские варианты;но это не так.Гендер гораздо сложнее, так как ему нужен контекст, чтобы иметь смысл.Например, в контексте отношений мужчина (по полу) может иметь один из нескольких «полов»: мужской, женский или даже нейтральный.Это независимо от того, какого пола является их партнер.

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

По крайней мере, один человек отметил, что пол необходим для определения чести, используемой в рассылках.Я бы предположил, что нет никакой связи между полом и этими почестями.Например, женщина (в разбивке по полу) может пожелать, чтобы ее называли мисс / мисс / миссис / доктор / мадам / профессор или даже г-н, если они находятся в процессе или уже завершили операцию, чтобы стать "мужчиной".Этот список ни в коем случае не является всеобъемлющим, и в любом случае гораздо лучше позволить этому человеку выбрать, каким образом он хочет обратиться.


Что подводит меня к моему последнему пункту: перед тем, как собрать какой-либо кусокДанные, которые вы должны иметь определенную причину для этого.Моя компания специализируется на сборе данных через онлайн-формы.Одна из вещей, которые мы делаем, это смотрит на то, что просят наши клиенты, и разбирается по полю, чтобы определить, используются ли данные где-либо еще.

Чаще всего организация (компания / правительство / и т. Д.) Запрашивает гораздо больше информации, чем она заботится.Это может иметь дополнительные последствия в случае, если данные будут потеряны, украдены или просто просмотрены неуполномоченными лицами.Кроме того, на человека, который заполняет формы для каждого поля, которое он должен заполнить, возлагается бремя.

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

0 голосов
/ 18 августа 2010

Замечу по другому аспекту: сортировка.Обычно «М» сортируется после «F»;в проекте один раз таблица базы данных имела поле пола с любым из этих двух значений.Было желание иметь возможность сортировать результаты по полу (данные переписи) и дальнейшее предпочтение, чтобы «M» появлялось перед «F».Мое решение состояло в том, чтобы добавить отдельную таблицу поиска, присваивая мужскому значению идентификатор 0, а женскому - 1. Таким образом, запросы в основной таблице можно было легко отсортировать в новом поле половой идентификации.

0 голосов
/ 18 августа 2010

Да. Я думаю, что Вы можете использовать enum в коде и привязывать его к нему.

ноль - неизвестно; 0 - мужчина; 1 - женщина;

или вы можете использовать тип bool для определения этого

ноль - неизвестно; правда - мужчина; ложь - женщина

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