一般的な人のフィールド(名前、メール、アドレス、性別など)のベストプラクティス[非公開]


44

次のような一般的なフィールドの長さとデータ型に関する最も一般的なベストプラクティスは何ですか?

  • ファーストネーム
  • 苗字
  • 住所
  • Eメール
  • 性別
  • 状態
  • シティ
  • 電話番号

等....


この質問は大まかなものです。削除して削除する必要があります。
エヴァンキャロル

回答:


50

これらの分野のほとんどについて、悪魔は細部に潜んでいるので、普遍的なベストプラクティスのセットを非常に疑う傾向があります。情報が比較的一般的だからといって、アプリケーションが他のアプリケーションが使用するのとまったく同じ方法でデータを使用することを意味するわけではありません。つまり、データモデルは若干異なる必要がある場合があります。

  • 姓と名:なぜ名前を付けているのですか?個人の正式な氏名を取得する必要がある場合(つまり、法的文書または出生証明書を準備している場合)、人の名前を尋ねる場合よりも多くのスペースを入力できるようにしたいでしょう。新しいWebアプリでそれらを呼び出すものがあります。
  • 住所:住所をどうしますか?どのような種類のアドレスを保存していますか?住宅ローンを作成している米国の不動産の住所を保存している場合、完全に標準化された住所を取得することに非常に注意する可能性があり、その場合、データモデルはおそらくあなたの住所に非常に近い標準化ツールが戻ります。人々が製品を配達するために住所を入力できるようにしたいだけなら、自由形式のテキストは数行で十分でしょう。そこにある行の長さは、住所ラベルの印刷などを行うダウンストリームプロセスの要件に依存する場合があります。
  • 状態:有効な状態値を識別できると仮定すると、おそらくSTATEテーブルを作成し、テーブルSTATEADDRESSテーブルの間に外部キー関係を作成するのが理にかなっています。ただし、有効な値を特定できるということは、有効な住所のセットを少なくとも特定の国のセットに限定していることを意味します。多くのサイトではこれで問題ありませんが、新しい国をサポートするために少し手間をかける必要があります。
  • 都市:潜在的に都市レベルの規制がある場所(つまり、都市に基づいて適用されるさまざまな種類の税率がある場所)でデータを処理している場合、それを州と同様に扱い、CITY有効な都市と、テーブルCITYADDRESSテーブル間の外部キー関係を含むテーブル。一方、製品を届けようとしているだけで、同じ都市のさまざまなバージョンがテーブルにあるかどうかをあまり気にしない場合は、ユーザーに自由形式のテキストを入力させるだけで十分です。もちろん、外部キーを保存している場合、すべての有効な値があることを確認するためにかなりの作業が必要になります。しかし、全体のポイントが会社がすでにその仕事をしたということである製品があります(すなわち、売上税データベース)。
  • 電話:電話番号で何をしているのですか?その理由は何ですか?一部のアプリケーションでは、ユーザーが入力することを決定した形式で電話番号を入力し、その後のすべてのクエリでその形式を保持する必要があります。これは、ユーザーが電話番号の保存方法と表示方法について独自の設定を持つ個人用アドレス帳を設計している場合によくあることです。他のアプリケーションは、入力されたフォーマットを無視し、数字のみを抽出し、すべての電話番号が同様のフォーマットになるように取得時にデータをフォーマットします。ビジネス向けの場合は、ユーザーが拡張子を入力するための別のフィールドが必要になる場合があります。発信通話プロセスをサポートしようとしている場合は、市外局番と国番号を別々の列に保存することをお勧めします。
  • 性別:非常に多くのアプリケーションで、性別コード(「M」または「F」)をテーブルに保存することは完全に合理的です。一方、追加オプション(その他、インターセックス、トランスジェンダー)が必要な場合や、出生時の性別や現在の性別などを保存する必要がある場合があります。

考えるべきことがたくさんある興味深い答え-しかし、人々がさらに前進するのに役立つ有用なアイデアが欠けている...例えば、電話のものは、ケースの80%以上をカバーする非常に簡単なものです:あなたが入力できる数字電話で誰かに連絡するためにどこかで、多分それはまた他の国をカバーするべきであると加えて。ええ、数字に国の接頭辞の有無を考えると数文字の違いがあります、間違いなく世界で最も長い電話番号のようなものがあり、これにさらにプラスを使用することはほとんどの人にとってかなり安全ですケース
ヘニング

24

サンプルデータと予想される視聴者に基づいて推測することもできます。それはあなたの場所に依存します。

いくつかのメモ:

住所:

名前:

電話番号:国際コード、長さ、携帯電話対自宅、携帯電話のみを許可


3
最後の2つのリンク(「姓が最初」と「最長」...)が壊れています。
マークL.

1
@MarcL。「姓が最初」のリンクを修正しました(編集が受け入れられた場合)。「最も長いものは...」SOの質問は「建設的でない」として閉じられ、削除されました(10kを超える担当者がいる場合は引き続き表示されます)。
x。

2
:ウェイバックマシンは、「姓」の記事があるweb.archive.org/web/20160823135055/http://www.solidether.net/...
のAv Pinzur

10

上記のすばらしい答えに加えて、ユニコード文字を受け入れることを忘れないでください。米国にいるからといって、列に外国の文字を入れたくないという意味ではありません。

そうは言っても、通常は名前に50文字を使用することをお勧めします。320は電子メールアドレスには十分すぎるはずです(ANSI標準を確認して確認できます)。注意事項の255文字のアドレスエラーの場合。おそらくそれほど大きなアドレスを必要とすることはないでしょうが、C / O行などを含めるとよいでしょう。都市はかなり大きくなければなりません。かなり長い都市名がそこにあります。状態については、国と同じ子テーブルを使用します。郵便番号については、米国の郵便番号より長い国際郵便番号を忘れないでください。インターナショナルをサポートしていないからといって、まだそうかもしれない。軍人を含むさまざまな郡に住んでいる多くの米国市民がいます。

多くの国には州がないため、州はオプションであることを忘れないでください。


私の最後のプロジェクトで、最大行長として39を示した国際郵便基準に関する文書を見つけました。フランスには、都市を追跡する大量の受信者用の個別のコードがあります。このサイズと国の3つまたは4つの自由形式フィールドを許可します。
-BillThor

9

フェンスの上に座っていることでお尻が痛くなっているので、いくつかの答えを捨てて、忘却に落とされないようにしたいと思っています。建設的な批判を提供してください。

電子メールアドレス:

最小:6(a@g.cn)。または、ローカルドメインの電子メールアドレスを追跡する場合は3
最大:320 254(RFC)

電子メールを検証するためのコードの量は実際には正気ではないので、「@」がある場合に有効であると仮定しましょう。

電子メールアドレスを「通信方法」として抽象化し、ユーザーと通信するためのすべての方法を簡単にリストすることができます。

性別

性別は時間とともに変化する可能性があるため、重要な場合はそれを追跡できます。http://en.wikipedia.org/wiki/ISO/IEC_5218に従ってください

NOT_KNOWN(0),
MALE(1),
FEMALE(2),
NOT_APPLICABLE(9);

住所:NORAM

私は安い方法を取り、北米の住所に固執するつもりです。

主に課税のため、国、部門、都市、および郡を抽象化すると便利です。税金はさまざまなレベルで適用されるため、抽象的な地理的領域で税率を指定できる場合は、最高です。

GeographicArea

id: int  
type: {country, division, county, city, indian reservation}  
name: varchar(45)  [1]
abbreviation: nullable varchar(4)  
parent_id: nullable int  

住所

id: int  
postal_area_id: int, references GeographicArea  
county_or_city_id: int, references GeographicArea  
street_address: varchar(255)  
suite: nullable varchar(255)  

必要に応じて、line2とline3を追加します。

http://en.wikipedia.org/wiki/Address_(geography)を参照してください

現在、住所は住所です。1つの住所に複数の人が住むことができ、1人の人が同時に複数の住所を持つことができるため、そのためには多くのテーブルが必要です。

PartyAddress

party_id: int references Party  
address_id: int references Address  
purpose: {home, work, ...}  

時間を追って追跡する場合はfrom_datenull を追加しto_dateます。

電話番号

パーティは複数の電話番号を持つことができ、電話番号は複数の人が使用できます。電話番号は、ファックス、電話、モデムなどに使用でき、内線番号を付けることができます。これらもすべて時間の経過とともに変化する可能性があります。

電話番号

id: int  
value: varchar(15) - the max allowed by the ITU  

最小値は3(「911」の場合)または7(「310-4NET」。市外局番をダイヤルできない特別な種類のローカル番号)です。

必要に応じて、これを国コードなどに分割できます。

http://en.wikipedia.org/wiki/E.164標準を使用する必要があります

PartyPhoneNumber

party_id: int references Party  
phone_number_id references PhoneNumber  
extension: nullable varchar(11) - ITU max  
purpose: {home, work, fax, modem, ...}  

お名前

名前は難しいです。その理由は次のとおりです。

  1. 一部の人は、1つの単語のみを含む正式な名前を持っていますhttp://en.wikipedia.org/wiki/List_of_legally_mononymous_people

  2. 一部の人々は多くの言葉で名前を持っていますhttp://en.wikipedia.org/wiki/Wolfe%2B585,_Senior

  3. 一部の人々は同時に複数の名前を持っています(例えば、私の大学では多くのアジアの学生がいますが、彼らは「好みの」西洋化された名前を使いたいです)

  4. 時々、旧姓や既婚者の名前など、人々の名前を経時的に追跡する必要があります。

  5. さまざまな理由で個人や組織を抽象化したい

    create table party(id bigserial primary key);

    作成テーブルparty_name(id bigserial主キー、party_id bigint not nullリファレンスparty(id)、type smallint not nullリファレンスparty_name_type(id)--elided、ex "maiden"、 "legal");

    create name name_component(id bigserial primary key、party_name_id bigint not null references party_name(id)、type smallint not null null not name name_component_type(id)、--elided ex "given" name text not null);


3

以前の回答とは少し異なる観点から、およびLDAPについて話すことは問題ないように思われるので、RFC 4519-"Lightweight Directory Access Protocol(LDAP):Schema for User Applications"が興味深いかもしれません。

アプリケーションをそのようなディレクトリにマップする必要がある場合に便利です。それ以外の場合は、おそらく要件に適合していません。

これらの定義はデータに関するだけでなく、フィールドで使用できるいくつかの演算子に関するものでもあります。postalAddress、たとえば、caseIgnoreListSubstringsMatchです。このスキーマに厳密に従うことをお勧めするわけではありませんが、原則を見ることは興味深いかもしれません。特に、アプリケーションで名前と住所を比較する方法は、データベースの設計に関連する可能性があります。


3

名前については、二重引用符の使用を検討して、アイルランド語またはイタリア語の名前でアポストロフィをエスケープする必要がないようにします(例:O'HaraまたはD'Amato)。

また、使用する正規表現の適切なセットを取得することをお勧めします。これにより、名前フィールドの一部(最初のイニシャル、ニックネーム、Jr / Srなど)を出力できます。


1
または私の姓のようなオランダの名前。
コリン 'tハート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.