次のような一般的なフィールドの長さとデータ型に関する最も一般的なベストプラクティスは何ですか。
等....
これらのフィールドのほとんどについて、悪魔は詳細にいるため、私は普遍的なベストプラクティスのセットを非常に疑う傾向があります。情報が比較的一般的であるという理由だけで、アプリケーションが他のアプリケーションが使用するのとまったく同じ方法でデータを使用することを意味しません。つまり、データモデルが少し異なる必要がある場合があります。
STATE
テーブルを作成し、STATE
テーブルとADDRESS
テーブルの間に外部キー関係を作成することはおそらく意味があります。しかし、有効な値を識別できるということは、有効なアドレスのセットを少なくとも特定の国のセットに制限していることを意味します。多くのサイトではそれで問題ありませんが、新しい国をサポートするために少し作業を行う必要があります。CITY
テーブルと有効な都市、およびCITY
テーブルとADDRESS
テーブル間の外部キー関係。一方、商品を配達しようとしているだけで、同じ都市のさまざまなバージョンがテーブルにあるかどうかをあまり気にしない場合は、ユーザーが自由にテキストを入力できるようにするだけで十分です。もちろん、外部キーを格納している場合は、すべての有効な値があることを確認するためにかなりの作業が必要になります。しかし、会社がその仕事をすでに完了しているということの要点である製品(つまり、消費税データベース)があります。同様に、サンプルデータと予想されるオーディエンスに基づいて推測することもできます。それはあなたの場所に依存します。
いくつかのメモ:
住所:
名前:
電話番号:国際コード、長さ、携帯電話と自宅、携帯電話のみを番号として許可
上記のすばらしい答えに加えて、ユニコード文字を受け入れることを忘れないでください。米国にいるからといって、列に外国文字を受け入れたくないという意味ではありません。
そうは言っても、私は通常50文字の名前を推奨しています。 320は、電子メールアドレスとしては十分すぎるはずです(ANSI標準で確認できます)。 255文字で注意側のアドレスエラー用。それほど大きなアドレスが必要になることはおそらくないでしょうが、C/O行などを含めると、そうなる可能性があります。都市はかなり大きいはずです。かなり長い都市名がいくつかあります。国の場合、国と同じように子テーブルを使用します。郵便番号については、米国の郵便番号よりも長い国際郵便番号を忘れないでください。インターナショナルをサポートしていないからといって、まだサポートされているかもしれません。軍人を含むさまざまな郡に住んでいる米国市民がたくさんいます。
多くの国には州がないため、州はオプションであることを忘れないでください。
フェンスの上に座っているとお尻が痛くなってきたので、答えを捨てて忘却に投票しないことを望みます。建設的な批判をしてください。
最小:6([email protected])。または、ローカルドメインのメールアドレスを追跡する場合は3
最大: 320 254(RFC)
メールを検証するためのコードの量は実際には非常識なので、「@」がある場合は有効であると仮定しましょう
メールアドレスを「通信方法」として抽象化すると、ユーザーと通信するためのすべての方法を簡単に一覧表示できます。
性別は時間の経過とともに変化する可能性があるため、それが重要な場合は追跡できます。フォロー http://en.wikipedia.org/wiki/ISO/IEC_5218
NOT_KNOWN(0),
MALE(1),
FEMALE(2),
NOT_APPLICABLE(9);
私は安い方法を取り、北米の住所に固執するつもりです。
主に課税のために、国、部門、都市、郡を抽象化するのに便利です。税金はさまざまなレベルで適用される可能性があるため、抽象的な地理的領域で税率を示すことができれば、黄金です。
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_date
およびnullable to_date
長期間追跡する場合。
パーティーは複数の電話番号を持つことができ、電話番号は複数の人が使用できます。電話番号は、ファックス、電話、モデムなどに使用でき、内線番号を持つことができます。これらも時間とともに変化する可能性があります。
PhoneNumber
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つの単語のみが含まれる正式な名前を持っています http://en.wikipedia.org/wiki/List_of_legally_mononymous_people
一部の人々は多くの単語で名前を持っています http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior
一部の人々は同時に複数の名前を持っています(たとえば、私の大学には多くのアジア人の学生がいますが、彼らは「好ましい」より西洋化された名前を使用したいです)
場合によっては、旧姓や既婚名など、人の名前を時系列で追跡する必要があります。
さまざまな理由で個人や組織を抽象化したい
テーブルparty(id bigserial primary key);を作成します。
create table party_name(id bigserial primary key、party_id bigint not null references party(id)、type smallint not null references party_name_type(id)--elided、ex "maiden"、 "legal");
create table name_component(id bigserial primary key、party_name_id bigint not null references party_name(id)、type smallint not null references name_component_type(id)、--elided ex "given" name text not null);
以前の回答とは少し異なる観点から、そして LDAP について話すことは問題ないように見えるため、 RFC 4519-"Lightweight Directory Access Protocol(LDAP ):ユーザーアプリケーションのスキーマ」 が興味深いかもしれません。
アプリケーションをそのようなディレクトリにマッピングする必要がある場合に役立ちます。それ以外の場合は、おそらく要件に適合していません。
これらの定義は単なるデータに関するものではなく、フィールドで使用できるいくつかの演算子に関するものでもあります。 postalAddress
たとえば、 caseIgnoreListSubstringsMatch
です。このスキーマに厳密に従うことをお勧めしませんが、原則を確認することは興味深い場合があります。特に、アプリケーションの名前とアドレスを比較する方法がデータベースの設計に関連している場合があります。
名前については、二重引用符を使用することを検討してください。これにより、アイルランド語またはイタリア語の名前(例:O'HaraまたはD'Amato)のアポストロフィをエスケープする必要がなくなります。
名前フィールドの一部を出力できるように、適切な正規表現のセットを取得することもお勧めします(たとえば、最初のイニシャル、ニックネーム、Jr/Srなど)。