Как вы справляетесь с «Многие имена для 1 человека»? - PullRequest
6 голосов
/ 18 февраля 2009

Одной из наиболее распространенных проблем, с которыми я сталкиваюсь при создании любой информационной системы, является тот факт, что люди называют так много разных имен. Кто-то по имени «Билл Смит» может пойти «Уиллом Смитом», «Уильямом Смитом», «Смитом, Уиллом» и т. Д. Если я скажу, что я хочу написать приложение, чтобы связать сообщения в блогах с авторами, я должен был бы отчитаться для всех этих имен.

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

Ответы [ 6 ]

17 голосов
/ 18 февраля 2009

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

(Table mapping names to UIDs)

Name        UID

Robert S    123456
Bob S       123456
Bert S      123456
Darren      987654
(Table with post information, including author's UID)

Title     Author  ...

Post 1    123456
Post 2    123456
Post 3    987654
(Table with author information)

UID     Preferred Name   Webpage                ...

123456  Robert Smith     http://www.robert.com
987654  Darren Jones     http://www.jones.com

10 голосов
/ 18 февраля 2009

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

Кроме того, я не думаю, что позволил бы моим пользователям иметь несколько имен, если моя система не требовала этого. Если бы я это сделал, я бы разбил его на две таблицы:

  • Пользователи:

    • ИД пользователя (например: 1821)
  • USERNAMES:

    • ИД пользователя (например: 1821)
    • firstName (например, Джонатан)
    • фамилия (например, Сэмпсон)

Кроме того, вы можете добавить в таблицу usernames поле с именем 'isPrimary'. Это будет логическое значение, которое сообщит вам, какое имя следует рассматривать как основное имя пользователя. Это похоже на то, как в википедии хранится история данных / изменений. Они сохраняют все, но помечают, который является «активным», или в вашем случае «основным».

2 голосов
/ 18 февраля 2009

Настоящая проблема возникает, когда у вас есть несколько приложений, и у каждого есть своя собственная схема для информации о пользователе. В биллинговой системе может быть «Уилл Смит»; система начисления заработной платы может иметь "Уильям Смит"; Система претензий может иметь «Вилли X. Смит». Все действительно один и тот же человек. Чем ты занимаешься? Это огромная проблема для дымоходов, старых приложений.

2 голосов
/ 18 февраля 2009

Я согласен с первыми 3 постами о том, как структурировать вашу схему.

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

Затем разрешите псевдонимы в зависимости от требований вашего приложения.

Наличие их полного юридического имени может пригодиться и для выставления счетов / финансовых / кадровых ситуаций.

2 голосов
/ 18 февраля 2009

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

1 голос
/ 18 февраля 2009

Вы всегда можете составить таблицу АКА, в которой вы можете использовать имя, которое предпочитает имя АКА. Так что, если кто-то использует имя Билл, вы всегда можете заменить его на Уильяма.

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

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