Имя Второе Имя Фамилия. Почему не полное имя? - PullRequest
41 голосов
/ 14 июля 2009

Я пытаюсь найти лучший подход для хранения имени людей в таблице. Каковы преимущества 3 поля над 1 полем для хранения имени человека?

UPDATE

Вот интересная дискуссия и ресурсы о хранении имен и опыта пользователя

Объединение имени / фамилии в одно поле

Ответы [ 22 ]

65 голосов
/ 14 июля 2009

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

Скажем, вы хотите написать электронное письмо, начинающееся с "Дорогой Ричи" - вы можете сделать это тривиально, если у вас есть поле given_name, но выяснить, чье имя указано по полному имени, нетривиально. *

Вы также можете выполнять простой поиск или сортировку по given_name, или family_name, или как угодно.

(Обратите внимание, что я использую given_name, family_name и т. Д. Вместо first_name, last_name, потому что разные культуры называют свои имена в разных порядках.)

Решить эту проблему в общем случае сложно - вот статья, которая дает представление о том, насколько сложно это сделать: Представление имен людей в Дублинском ядре .

36 голосов
/ 14 июля 2009

Держите ваши данные как можно более чистыми!

Как?

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

Как вы храните имя не имеет значения. Важно то, что

  1. пользовательский опыт настолько хорош, насколько может быть
  2. у вас нет ложных данных в вашей системе

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

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

Что делают пользователи, если они вынуждены вводить данные, например, свой почтовый адрес или даже адрес электронной почты, когда им нужна учетная запись «только для чтения» без уведомлений? Они помещают мусорные данные в вашу систему. Это сделает ваши супер-алгоритмы поиска и сортировки бесполезными в любом случае.

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

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

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

В вашем примере я бы просто попросил полное имя (хотя и не уверен), и как только пользователь добровольно подпишется на вашу рассылку, пусть пользователь решит, как он / она хочет обратиться ...

16 голосов
/ 14 июля 2009

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

  • Колин Ангус Маккей
  • Жан Мишель Жарр
  • Винсент Ван Гог
  • Пабло Диего Хосе Франсиско де Паула Хуан Непомуцено Мария де лос Ремедиос Сиприано де ла Сантисима Тринидад Руис и Пикассо

Как вы надежно разлагаете этот лот?

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

12 голосов
/ 14 июля 2009

На днях я искал Гражданскую войну в Испании и нашел это исключение из большинства правил:


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

Для чего мы будем использовать имена?

  1. Имя на адресной табличке почтовой службы
  2. Приветствие на сайте
  3. Неофициальное имя

Исходя из того, для чего будут использоваться имена, мы определяем, сколько информации хранить. Может быть, мы позволим пользователю ввести все три из них, включая разрывы строк в первом случае (генералиссимус Франко может пожелать, чтобы его полные титулы и назначения были указаны, если он еще не умер). Может быть, мы предоставляем First, Middle, Last, Generation в качестве опции, а остальные заполняем как значения по умолчанию. Может быть, мы предлагаем другие распространенные варианты, такие как Фамилия, Имя.

Это контрастирует со старым, первым, средним и последним стилем, который мы использовали с тех пор, как я начал программировать на COBOL в 1975 году, и с тех пор "поправлялся".

11 голосов
/ 14 июля 2009

К сожалению, это все равно, что спросить, каков наилучший способ сохранить число в базе данных. Это зависит от того, что вы собираетесь с ним делать - иногда вы хотите получить int, иногда байт, а иногда и число с плавающей точкой. С именами это зависит от того, от каких культур вы ожидаете, что ваши пользователи придут, что вы планируете делать с именами (будете ли вы использовать эти имена для соединения с другой системой, которая хранит имена как «фамилия, имя»)? ), и сколько вы можете позволить себе раздражать своих пользователей. Если это внутреннее HR-приложение, вы, вероятно, можете позволить себе сильно раздражать пользователей и иметь очень структурированную, формальную разбивку компонентов имен (есть более 3-х - не забудьте про mr / mrs, jr, III, множественные отчества, дефисные фамилии и кто знает, что еще, если вы пытаетесь обрабатывать имена из всех культур. Если у вас есть веб-приложение, которое может интересовать или не интересовать пользователей, вы не можете попросить их слишком сильно заботиться.

7 голосов
/ 14 июля 2009

Возможно, вы захотите выполнить поиск по 3 отдельным полям для одного и его недорого, чтобы объединить полное имя.

например. Если вы хотите найти всех мистеров Ноланов, ваш запрос будет

SELECT Title+' '+FirstName+' '+Surname As FullName  
from table where firstname = 'Mr' and surname ='Nolan'

делать это только с полными именами было бы больно.

4 голосов
/ 14 июля 2009

Разделение полей позволяет вам поддерживать различные выходные форматы и культуры, в которых фамилия пишется первой

4 голосов
/ 21 января 2013

Я англичанин и имею только одно имя. Я обычно помещаю это в поле 'фамилии' для наименьшего обострения. Обычно я также вынужден что-то вводить в поле «имя», что по определению неверно.

Любая попытка навязать что-то большее, чем «Имя», обречена быть ошибочной, по крайней мере, в некоторых случаях, а иногда очень разочаровывает пользователей. Одиночные имена распространены в Южной Индии, Индонезии и Пакистане (а это сотни миллионов человек), а также в случайных странностях в Великобритании, таких как я.

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

4 голосов
/ 14 июля 2009

Такие вещи, как ORDER BY firstname или ORDER BY lastname возможны, когда вы разбиваете имя на несколько полей.

Это не так просто сделать, когда вы смешиваете все имена в одном поле.

2 голосов
/ 14 июля 2009

Вот в чём дело, даже люди не могут всё сделать правильно, слишком много данных и слишком много особых случаев. Я мог бы изменить свое имя прямо сейчас, чтобы оно состояло из 20 частей, с серединой 13 в качестве моего «первого» имени. Части имен могут содержать любое количество слов, и может быть любое количество частей имен. У некоторых людей есть только 1 имя (без фамилии). У некоторых людей много отчеств. У некоторых людей имена или фамилии состоят из нескольких слов. Некоторые люди сначала называют свою фамилию. Некоторые люди называют свое второе имя. Некоторые люди используют псевдонимы, которые явно не связаны с их именем.

Если вы попытаетесь угадать эти соглашения в программном обеспечении, вы не справитесь. Период. Может быть, вы когда-нибудь сделаете это правильно, может быть, даже большую часть времени, но стоит ли это того? На мой взгляд, вы должны хранить имена как одно поле и перестать пытаться быть милыми, используя имена для обозначения человека. Если вам нужна дополнительная информация об имени (например, псевдоним), спросите пользователя!

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