web-dev-qa-db-ja.com

名、ミドルネーム、姓。なぜフルネームではないのですか?

テーブルに人の名前を格納するためのより良いアプローチを見つけようとしています。個人の名前を保存するために、1つのフィールドよりも3つのフィールドの利点は何ですか?

[〜#〜]更新[〜#〜]

ここに、名前とユーザーエクスペリエンスの保存に関する興味深いディスカッションとリソースがあります。

名/姓を1つのフィールドにマージ

43
ashraf

データをできるだけクリーンに保つ!

どうやって?

ユーザーに尋ねるできるだけ少ない必要なもの絶対に必要な質問したとき。

名前の保存方法は関係ありません。重要なのは

  1. ユーザーエクスペリエンスは可能な限り優れています
  2. システムに誤ったデータがない

必須フィールドを入力してユーザーに何度も入力したり再質問したりすると、ユーザーは動揺してアプリケーションをすぐに購入できなくなる可能性があります。あなたは常に悪いユーザー体験を避けたいです。

データベースでミドルネームを検索するのがどれほど簡単かは気にしません。彼は簡単で、良い経験をしたい、それだけです。

通知が不要な「読み取り専用」アカウントのみが必要な場合に、住所やメールアドレスなどのデータを入力するように強いられた場合、ユーザーはどうしますか?彼らはあなたのシステムにゴミデータを入れます。これはとにかくあなたのスーパーサーチとソートアルゴリズムを役に立たなくします。

したがって、私のアドバイスは、どのアプリでも、ユーザーから情報をほとんど収集しないようにすることですそれらを提供するために本当に必要な

たとえば、ペットフードのオンラインショップを運営している場合は、サインアップ時にユーザーにどのような種類のペットを飼っているか尋ねないでください。ログインしてすべてがハッピー(新規顧客)になったら、入力できるようにします。彼らが実際に家に運ばれるものを注文するまで、彼らに彼らの郵便アドレスを尋ねないでください、彼らが支払うもののもの、そしてあなたが正確な座標を持っていることを気にしてください

これにより、データ品質が大幅に向上します。これは、ユーザーがメリットのない技術的な詳細ではなく、注意する必要があることです。

あなたの例では私は完全な名前を尋ねるだけですが(確かではありません)、ユーザーがニュースレターを喜んで購読したら、ユーザーにどのように対処したいかを決めさせます...

37
raoulsson

コンポーネントから常にフルネームを作成できますが、コンポーネントにフルネームを常に分解することはできません。

「Dear Richie」で始まるメールを書きたいとします。given_nameフィールドがあれば簡単にできますが、フルネームから誰かの名前が何であるかを理解するのは簡単ではありません。

given_namefamily_name、またはその他の何でも簡単に検索またはソートすることもできます。

(私はgiven_namefamily_nameではなくfirst_namelast_nameなどを使用していることに注意してください。カルチャが異なると、順序が異なるためです。)

一般的なケースでこの問題を解決するのは難しいです。これがどれほど難しいかを示す記事です ダブリンコアでの人の名前の表現

64
RichieHindle

他の人が言ったように、完全な名前をそのコンポーネント部分にどのように分解しますか?.

  • コリンアンガスマッカイ
  • ジャン・ミシェル・ジャール
  • ヴィンセント・ヴァン・ゴッホ
  • パブロディエゴホセフランシスコデパウラファンネポムセノマリアデロスレメディオスチプリアーノデラサンティシマトリニダードルイスイピカソ

どのようにしてそのロットを確実に分解しますか?

詳細については、 プログラマーが名前を信じる虚偽 を参照してください。

17
Colin Mackay

先日 スペイン内戦 を調べていたところ、ほとんどのルールでこの例外が見つかりました。


次回、名前を保存する必要のあるシステムに取り組むときは、根本的なこと、つまり要件から設計することを試します。

名前は何に使うのですか?

  1. 郵便サービスの住所ラベルの名前
  2. ウェブサイトでの挨拶
  3. 非公式な名前

名前の用途に基づいて、保存する情報の量を決定します。たぶん、最初のケースの改行を含め、ユーザーがこれら3つすべてを入力できるようにするかもしれません(Generalissimo Francoは、まだ死んでいない場合は、完全なタイトルと予定をリストする必要があるかもしれません)。多分、最初、中間、最後、世代をオプションとして提供し、残りをデフォルトとして入力します。多分私達は姓、名のような他の一般的なオプションを提供します。

これは、1975年にCOBOLでプログラミングを始める前から使用しており、それ以来「適合」した古いスタイルのFirst、Middle、Lastとは対照的です。

13
John Saunders

残念ながら、これはデータベースに数値を保存するための最良の方法を尋ねるようなものです。それはあなたがそれで何をしようとしているのかに依存します-時々あなたはintが必要な場合もあれば、バイトが必要な場合もあり、場合によってはフロートです。名前は、ユーザーがどのような文化から来ると期待するか、名前をどのように処理するかなどによって異なります(これらの名前を使用して、名前を「姓、名」として保存する別のシステムに接続しますか? )、そしてユーザーをいらいらさせる余裕のある額。これが内部のHRアプリケーションである場合、おそらくユーザーに多くの迷惑をかける余裕があり、名前の構成要素の非常に構造化された正式な内訳があります(3つ以上あります-mr/mrs、jr、III、複数のミドルネーム、ハイフンで区切られた姓、およびすべてのカルチャの名前を処理しようとしている場合は、他に何を知っているかなど。

11
Peter Recore

3つの個別のフィールドで1つを検索し、その安価なフルネームを連結することができます。

例えばすべてのMr. Nolansを検索する場合、クエリは次のようになります。

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

フルネームだけでこれを行うのは面倒です。

7
Johnno Nolan

フィールドを分離しておくことで、姓が最初に記述されるさまざまな出力形式とカルチャをサポートできます。

4
Ken Keenan

私は英語で、名前は1つだけです。私は通常、それを「姓」フィールドに入れて、悪化を最小限にします。私は通常「名」フィールドにも何かを入力することを強いられますが、これは定義上間違っています。

「名前」以上のものを課そうとする試みは、少なくとも時々間違っていることが運命づけられており、時にはユーザーに非常にイライラさせることがあります。単一の名前は、南インド、インドネシア、パキスタン(数億人)だけでなく、私のような英国の奇妙な奇妙なものにも共通しています。

「最初、中間、最後」は非常に米国中心です。他の国では、このように名前を考えている人はほとんどいません。やめてください。

4
Wookey

名前を複数のフィールドに分割すると、ORDER BY firstnameORDER BY lastnameなどが可能になります。

すべての名前を1つのフィールドにまとめるのは簡単ではありません。

4
bobobobo

私が考えることができる唯一のものについては、検索目的のためです。 [いいね]と言うよりも、[=]を使用してフィールドを検索する方が少し良いです。

名前を別の単語として表示する必要がない場合は、単一のフィールドを使用してください。

しかし、[Dear Mr. Achu]のようなことをする必要がある場合は、おそらく3フィールドアプローチの方が良いでしょう。

2
griegs

ほとんどの場合、「Mr。so-and-so」のような定型書簡のサポート、または非常に一般的な姓による検索/ソートを行うために存在します。

最初/中間/最後がすべての文化に当てはまるとは限らないことを考えると、より良いアプローチがあるかもしれません。 「非公式な名前」/「正式な名前」/「正式な名前」などのように表現するとよいでしょう。

それでも、この時点では最初/中間/最後が非常に一般的であり、データ入力の観点からは、誰もが期待することです。

2
Chris Arguin

これが問題です。人間でさえこれを常に正しく行うことはできません。データが多すぎ、特殊なケースが多すぎます。今は自分の名前を20パーツに変更できます。真ん中の13を私の「ファースト」名にします。名前の部分には任意の数の単語を含めることができ、名前の部分はいくつでも存在できます。名前が1つしかない人(姓なし)もあります。一部の人々はミドルネームをたくさん持っています。一部の人々は、いくつかの単語で構成される姓または姓を持っています。最初に姓をリストする人もいます。一部の人々はミドルネームで行きます。一部の人々は、自分の名前に明らかに関係のないニックネームで行く。

ソフトウェアでこれらの規則を推測しようとすると、失敗します。限目。たぶんあなたはそれを時々正しくするかもしれません、多分ほとんどの場合さえ、それはそれだけの価値がありますか?私の意見では、名前を1つのフィールドとして格納し、名前を使用して人物を参照することでかわいくなろうとするのをやめるべきです。名前(ニックネームなど)に関する追加情報が必要な場合は、ユーザーに尋ねてください。

2
Wedge

どの程度実用的かはわかりませんが、開発中のアプリケーションのコンテキストで文化的配慮が重要である場合、名前はコレクションである必要があります。コレクションの各要素は、名前がアドレス可能な「名」かどうかを示す値を持っている必要があります"または"アドレス "のように"姓 "などを識別できるようにする必要があります。名前IDは、フルネームを再構成するための要素の順序を識別するために使用できます。

1
Lloyd McFarlin

個々の名前はそれぞれ、アトミックなデータです。それらが別々に保存されている場合、Firstname LastnameやLastname、Firstnameなどのさまざまな形式で印刷する方が簡単です。

1
geofflane

姓、名、または姓で並べ替えや検索を行う必要がない場合は、メリットはありません。

1
dkretz

柔軟性。

例えば誰かがダブルバレルの姓を持っていて、ミドルネームを持っていない場合。

1
Smalltown2k

私はこれらの回答のいくつかに賛成票を投じましたが、コード内で反復的または冗長な、または乱雑な連結を回避したい場合は、データベース内の計算列、または一貫して再構築された名前を公開するクラス内のメソッドをいつでも使用できます。これらの連結が高価な場合(100万のステートメントを出力するため)、永続化された列を使用できます。

多くの場合、ユーザーがニックネームやわかりやすい名前などの名前を指定できるようにして、レコード内の名前で、または常にスミス氏として参照しないようにします。

それはすべてあなたの要件に依存します。満足できる環境がなければ、良い答えは1つではありません。

1
Cade Roux

「氏名」と「優先名」という2つのフィールドがあれば簡単です。存在するすべての名前をサポートします(言語にレキシカルシンボルがある限り...つまり、書かれた形式を持たない言語は除外されます)。

それらが何らかのユニコード形式で処理され、アプリケーションコードがユニコード変換を適切に処理することを確認してください。

1
Arafangion

I18nの問題は、いずれにせよバグを引き起こす可能性があります。特定の文化では、姓と名を最後に使用します。これは、姓と名の考え方に反するため、姓と名のフィールドに移動します。 待機、一部のカルチャには姓がないか、姓が名前の性別によって変更されます。
私たちは、その人物が成人期に改名される部族文化に入ることができます。 「シッティング・ブル」の子供時代の名前は「ジャンプ・バジャー」でした。
これはいくぶんばらばらですが、私が示しているのは、フィールドが多いほど、設計が正確になるということです。少なくともnot null 'given name'フィールドとoptional 'surname'フィールドは、整数であるPKに関連付けられています。前述の要件が満たされている場合、クエリを中断する問題なくフィールドを追加できます。

0
WolfmanDragon

私にとっては、3つの名前を保存する方がいいので、個々のコンポーネントが必要な場合は、後で明示的な解析が必要になります。

0
phpnewbie

姓と氏名を常に完全かつ確実に区別できるとは限らないため、姓が必要になることが多いため、姓を分離するのには十分な理由があります。その後、2つの一般的なアプローチがあります。

  1. first_nameおよびmiddle_name;または
  2. 名前。

(2)人々は時々与えられた名前を2つ以上持っているので(1)これに関してより柔軟性がないので、間違いなくより好ましいです。

また、別の一般的なフィールドは、preferred_nameです(上記に加えて)。

0
cletus

いくつかの問題は、PreferredNameのような追加の列を格納することでも解決できます。これをDBで行い、プレフィックス列とサフィックス列も格納します。たとえば、「インディアナジョーンズ」という名前の「ヘンリーWジョーンズJnr教授」。

0
softveda