私は現在、多くのエンティティ(人、組織)と多くの連絡先情報を持つWebビジネスアプリケーションに取り組んでいます。複数の住所、メールアドレス、電話番号など
現時点では、データベース スキーマは、個人テーブルに郵便番号列、組織テーブルと同様に電話番号列があるようなものです。これは、これを処理する良い方法ではありません。
私はこれについて c2 Wiki を読みましたが、連絡先と住所のモデル ( http://c2.com/cgi-bin/wiki?ContactAndAddressModels ) と物理アドレスが古風であるかどうか ( http://c2 .com/cgi-bin/wiki?ArePhysicalPostalAddressesArchaic )。これらの 2 つの議論は、この問題の範囲について本当に私の目を開かせてくれました。
連絡先情報フィールドを分離してテーブルを分離することを考えています。しかし、これを行う最善の方法は何ですか。現時点では、このアプリケーションは主にフィンランドの住所を処理しますが、国際的な住所も処理する必要があると考えられています。
「住所」テーブル、「電話番号」テーブル、「電子メール アドレス」テーブルなどを定義でき、これらは人や組織にリンクされます。しかし、これは前のソリューションに似すぎているように感じます。定義済みのデータベース スキーマが十分でないことは避けられません。
私が提案しているのは、動的な連絡先情報スキーマ/プログラム ロジックを作成することです。
- 事前定義された連絡先情報フィールド/フィールド セットはありません
- ユーザーはいつでも新しい連絡先情報の種類と必須フィールドを定義できます。
- フィンランドの住所
- スウェーデンの住所
- ... 住所
- 電話番号
- 電子メールアドレス
- ICQ番号
これは実現可能ですか?誰かがこのようなことをしましたか?
連絡先情報の種類を定義するテーブルが存在する可能性があります。
連絡先情報の種類
- Id: 識別子
- 名前: 「フィンランドの住所」
- 説明: 「フィンランドの住所にはこの連絡先情報タイプを使用してください」
次に、連絡先情報の種類ごとに使用されるフィールドを定義するテーブルが存在する可能性があります。
連絡先情報タイプ フィールド
- Id: 識別子
- Contact_information_type_id: 前の表を参照
- フィールドのタイトル: 「住所 1」
- フィールドの説明: 「この行を郵便住所の最初の行に使用する」
- フィールド タイプ: 文字列/整数/など。
- フィールド形式: フィールド データを検証するための正規表現
- フィールドの順序: この連絡先情報の種類を表示/使用するときに、このフィールドが表示される順序
次に、連絡先情報フィールドを一緒にマップするために使用される「連絡先情報テーブル」を作成します。
連絡先
- Id: 識別子
- Contact_information_type_id: 連絡先情報種別テーブルを参照
次に、さまざまな連絡先情報を人にマッピングする「連絡先情報」テーブルを作成します。
本人連絡先
- Id: 識別子
- Contact_information_id: 連絡先情報テーブルを参照します
- 個人ID:個人を参照します
次に、次のような連絡先情報フィールド タイプごとのテーブルが必要になります。
連絡先情報整数フィールド
などの文字列など...
最後に、特定の人物のさまざまな連絡先情報を表示する場合、これはその人の連絡先情報テーブルを通じて発生します。この連絡先情報を形成するために使用されるフィールドは、連絡先情報タイプ フィールドテーブルから連絡先情報テーブルを通じて検索されます。使用するフィールドを決定したら、必要なすべてのテーブルを結合します。
SQLでの実現可能性について疑問があります。何かご意見は?
Java では、おそらく何らかのロジックをプログラムして、連絡先情報エンティティを形成するために必要なテーブルを決定し、何らかの動的 Bean を使用して Java でこのデータを表すことができます。しかし、それは私にとっても少し曇っています。これについても考えていますか?