複数の「姓」をモデル化する方法は?


11

スペイン語圏の国では、次のような複数の姓を使用します。

名↘↙姓
                ペドロアルトゥーロロドリゲスロヨラ
        ミドルネーム↗↖(?)

患者名のデータをモデル化しようとしています。私たちの国では重要なので、2番目の姓を無視することはできませんが、他の開発者、特に英語圏の開発者にとって意味のあるアプリケーションを構築したいと思います。


English.SEで同様の質問を作成しましたが、なぜ両方の値を保持することが重要なのかについての洞察があります。


15
「姓」の値にスペースを含めることを許可してはならないわずかな理由はありますか?いくつかのユースケースで1つの姓を使用し、他のユースケースではすべての姓を使用したいですか?そうでない場合は、問題を確認できません。ユーザーが入力したとおりに「姓」をそのままにしておくと問題ありません。
キリアンフォス14年

3
オランダ語では、「van de Iets」というタイプ名が非常に一般的です。ラストネームフィールドにスペースを含めるだけ
ラチェットフリーク14年

2
nameフィールドを1つだけにできない理由はありますか?
asfallows

2
@asfallows:患者リストを印刷する場合、姓でソートする必要があるためです。たとえば、あなたの名前が「ホセカルロスフェルナンドアルモドバルソト」である場合、「アルモドバル」が最初の姓であることを事前に知るにはどうすればよいですか?
パブロオルモスデアギレラC. 14年

2
@FedericoPoloni:姓で患者を検索している人は、おそらく患者の姓を知っているでしょう。
Mooingダック14年

回答:


19

Q:DBAはどのようにカウントしますか?

A:0、1、多く

個人には、1つ以上の名と1つ以上の姓、および場合によっては肩書きがあります。これらの名前には順序があります。個人の参照方法を決定するのは、ローカライズと文化です。

ContactId
NamePart {「ジョン」、「スミス」、...}
NameType {title、given、family、???}
注文{1、2、3、...}

以下のためにPedro Arturo Rodríguez Loyola(接触#1)は、4つの行を持っているでしょう。

1 /ペドロ/与えられた/ 1
1 /アルトゥーロ/与えられた/ 2
1 /ロドリゲス/家族/ 3
1 /ロヨラ/家族/ 4

この方法では、特定の構造に限定されることはありませんが、特定のコンタクトに対しては依然として意味があります。姓または名が3つまたは4つある人がいる場合はどうしますか?または旧姓ですか?

この回答の前のリビジョンから順序を変更していることに注意してください-順序は名前の種類内の順序ではなく、名前全体の順序ですタイトルパーツ「サージョンスミスII」。

追加の読書


2
+1しかし、このプログラマーは多くのオフショアチームメンバーと仕事をしましたが、私が今まで見た中で最も長い名前は「パブロディエゴホセフランシスコデポーラフアンネポムセノマリアデロスレメディオスクリスピニアーノデラサンティシマトリニダードルイスイピカソ」です。児童虐待かどうか?
エリオットフリッシュ14年

@Darkhogg utnapistimは、答えの最初の 'This'リンクとしてそれを持っています。それらの「決定的なガイド」の1つです。

アイデアは概念としては好きですが、実際の名前を書くつもりであることをユーザーに提示するのは少し難しいことではありませんか?私が思いつくのは、「GMail」連絡先フィールドのようなものだけです。名前の一部を「追加」できます。この種のデータモデルを実際に使用する方法について考えましたか?
パブロオルモスデアギレラC. 14年

1
@Peterisは多くの場合医療アプリケーション(元の質問では「患者」に言及しています)で、他のシステムと統合するために構造化された名前を渡す必要があります。構造化されていないデータがあると、ある病院から別の病院に患者を転送したり、保険金請求のためにフォームフィールドにデータを入力したりする場合でも、他のシステムとの統合が非常に困難になります。したがって、必要なすべての方法でデータを操作できるようにデータを構造化する方法に関する問題。

1
@Benフリーテキストフィールドは、アプリケーションが姓による並べ替えを要求する場合、または救急車から病院への患者の移動(またはその逆)のために古いEDIシステムとのインターフェイスを試みる場合、またはさまざまな保険請求フォームの適切なフィールド。これらはすべて、事実の後に意味を割り当てようとするよりも、名前の各部分を指定する少しのデータを持つ方が簡単な重要な領域です。フリーテキストフィールドは便利ですが、他のシステムで作業するためのオプションではない場合もあります。

10

これが役立つ場合があります。投稿はユーモラスですが、洞察に満ちています。

[名] [姓]は、名前の普遍的な規則ではありません。あなたが住んでいる場所でよくあることです。これにルールを課すと、遅かれ早かれ、システムに追加できない人がいることになります。

基本的に、できる限り制限を少なくし、実際に保存されている名前と余分な名前との間に柔軟性を持たせるようにしてください。

私はこのようなものに行きます:

  • 表示名(フォーム/データを表示するときの一貫した名前の場合):([first] [last]でなければなりません)。
  • 他の名前/フルネーム(検索、より正確な一致など)。ここで、ユーザーは指定された長さまで何でも書くことができます。長さはあなたが合理的に十分であると思うよりも長くなければなりません-例えば、40文字で十分だと思うなら、500を入れてください:))。
  • アドレス指定(Mr、Mrs、Ms、Jr、Sr、-san、カスタム値(Tovなど)など)。
  • 内部ID(このIDは、アプリケーション内のすべての人を一意に識別し、名前の衝突を防ぎます)。

たとえば、ルーマニア固有の発音区別符号のため、ほとんどのヨーロッパ言語では私の名前は正しく書き込めません(したがって、母国以外で名前を書くときは、技術的に間違って書くので、人々はそれを読んで発音できます)。

興味深い名前の例とリンク:

http://en.wikipedia.org/wiki/Nicholas_Barbon

http://en.wikipedia.org/wiki/Prince_%28musician%29

http://en.wikipedia.org/wiki/P_diddy

http://en.wikipedia.org/wiki/Burmese_name


考慮すべきもう1つのことは、並べ替えです。人のリストを姓(または名前のみ、または姓の最初の単語など)でソートできることが望ましい場合がよくあります。アプリケーションがそれを行う必要がある場合、「ソート名」を識別する何らかの方法が必要です。
BenM

しかし、私は全体的にこの考えが好きです。文化的な仮定に基づいて名前を表すのではなく、システムで実行する必要がある機能に基づいて名前を表します。
BenM

あなたの答えが好きです。これがどのように名前を付けるのに役立つかはわかりませんが。たとえば、並べ替える必要があります。通常は姓を使用します。たとえば、「他の名前」または「表示名」と呼ばれるフィールド/列にそれらを配置すると、どのように役立ちますか?ただし、ビルマの名前は称賛に値します。驚くばかり。
パブロオルモスデアギレラC. 14年

@pablox、私のポイントは、概念的には、人の名前をアイデンティティとしてではなく、アイデンティティのメタデータとして扱うべきだということでした(そして、idはユニークなコードでなければなりません)。アプリケーションのニーズに応じて、そのメタデータを整理されたものとみなすことができます。たとえば、「名前トークンのグループ」の2番目の名前(存在する場合)に対する「名前のソート」の役割、最初のトークンとしての「表示名」の役割、および「アドレス名」の役割を選択できます。 「Dr. | Mr. | Ms. | etc」+「表示名」として。
utnapistim 14年

通常、名前の並べ替えは「電話帳の並べ替え」で、名前へのさまざまな付属物を無視して重要な部分で並べ替えます。たとえば、「van de Bogart」は「van」ではなく「Bogart」でソートされます。処理されるマルチパートヒスパニック系の名前は文化的に依存するように起こっているか-その使用の適合を、それが使用されている場所と方法インチ
フィル・ペリー

0

複雑なことではありません.....または何かが欠けています。

次のフィールドがあります:name(varchar)、lastname(varchar)。

次に、完全な名前(例:Jorge Patricioおよび姓)を入力するフォームPèrez Gonzáles

検索には、たとえばMySQLのように、検索にlike役立つ多くの比較演算子があります。

ほとんどの場合、構成された姓は常に順番に並んでいます。Pérez Gonzálezほとんどの場合、姓をそのように言い、逆順ではありません。

他の方法でデータベースを過剰に設計することになります。


1
最初に姓を指定した場合はどうなりますか?リンク

1
@MichaelT、それはどうですか?フィールドを展開し、名前のテーブルを検索して、値の出現を探します。:と「姓」:常にあなたがGoogleのよう検索フィールドを持っていると仮定、あなただけの「名前」のような形かもしれないotherway
JorgeeFG

0

:3つの個人名の種類がありますPolynyms(複数のコンポーネントを持つ名)、Mononyms(一成分のみ、元「シェール」と名)とPictonyms(名前は絵、EXで表さザ・アーティスト)。

個人は複数の名前を持つことができます。たとえば、法的な名前や優先名などの役割を果たします

ポリニムにはいくつかのコンポーネントがあり、その名前と姓は必須です。姓にはいくつかの種類があります。

  1. 通常の姓(ジョーンズ)
  2. 二重バレルの姓(「Vaughn Williams」または「Louis-Dreyfus」)
  3. 真の複合姓{givenName: "Juan Pablo"姓: "FernándezdeCalderón"、secondarySurname: "García-Iglesias"}

3は、フェルナンデス・デ・カルデロン・ガルシア・イグレシアス氏ではなく、フェルナンデス・デ・カルデロン氏として扱われることが期待されるため重要です。

基本的に、必須の姓フィールドと、null許容のsecondarySurnameフィールドがあります。


0

誰かの名前のさまざまなコンポーネントをどのようにモデル化しますか? しないでください。誰かの法的な名前のすべてのコンポーネントに加えて、敬称、称号、非公式の名前、ユーザー名、ニックネーム、およびハンドルに個別のフィールドをモデル化する代わりに、関心のあるもののみをモデル化します。

オッズは、システムが実際に誰かの最大4つの「名前」だけを気にしていることです。

  1. 表示名、それらは、それらがシステムにログインしていることを知ることができます。
  2. 電話で呼びかけるための非公式の名前
  3. 正式名称はこれであなたは、対応関係にそれらを参照することになります。
  4. ソート名がリスト内に命じられるような方法で第2位を表現します。

多くのシステムは、単に#1と#2に誰かの正式な名前を使用しますが、気にする名前は「ユーザーの名前を表す文字列」と「前者のソート方法を表す文字列」のみとします。

データモデリングの観点から、実際に必要な値のみを定義します。これらの値のストレージを最適化する最適な方法は実装の詳細です。過度に最適化した場合にのみ頭痛の種になります。(もちろん、名と姓のみを「保存」できましたが、名前が1つしかない場合はどうしますか?)


-1

これを別の方法で考えてみましょう。

お使いのシステムは他のシステムに接続する必要があります。そうでない場合、どれだけ柔軟性があるかは関係ありません。それでは、データを転送する必要があるシステムは何をしますか?

医師に電話して予約をとると、生年月日を尋ねられ、システムは一致する人のリストを表示し、次に名前を尋ね、最後に住所を尋ねて選択したことを確認します正しい人。

医者は私に話しかけるとき、名前を知っている必要があります。彼らは私に手紙を書く場合、手紙を書くために名前を知る必要もあります。

したがって、スペースを許可する単一のテキストフィールドだけではありません。同じ方法で処理しない限り、姓と名を区別する必要はありません。


3
保険金請求のフォームに記入しています。「姓」があります。その人は日本出身です。文字変換されたバージョンを使用している間は、適切な姓をフィールドに入力する必要があります。どの言葉ですか?

@MichaelT、誰もが姓を持っているとはどういうことですか?
イアン14年

2
日本(または他の多くの東部の命名国)から人の名前を取得する場合、最初に姓が与えられます。それがどのように扱われます。しかし、医療フォームに記入するときフィールド- ?どのようにあなたは家族の名前をソートし、「ホセ・カルロス・フェルナンド・アルモドバルソト」与えられたあなたがソートする必要がある場合は与えられた他の例では、適切なフィールドに1つのフィールドとの一致を取るかAlmodóvarではなくFernando

@MichaelTので、姓を個別に処理する必要があるため、独自のフィールドを指定し、詳細を入力する人が東部ネーミングを理解することを期待します。
イアン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.