私はテーブル設計シナリオを持っていますが、非DBAタイプとして、よりスケーラブルな意見を求めています。
メトロエリアの家に関する情報を記録するように求められたとします。小さな近所(200の家)から始まり、最終的には5000000以上の家に成長します。
基本情報を保存する必要があります:ID#(一意のインデックスとして使用できる一意のロット番号)、Addr、City、State、Zip。素晴らしくシンプルなテーブルがそれを処理します。
しかし、毎年、すべての家に関する追加情報を記録するように求められます-そして、何の情報は毎年変わります。したがって、たとえば、最初の年には、所有者の姓と面積を記録するように求められます。2年目は、姓を残すよう求められますが、面積を捨てて、代わりに所有者の名の収集を開始します。
最後に-毎年、追加の列の数が変更されます。余分な2つの列から始めて、来年は6に、その後2に戻すことができます。
そのため、テーブルのアプローチの1つは、ハウステーブルの列としてカスタム情報を追加して、テーブルが1つだけになるようにすることです。
しかし、私は誰かがこれのためにテーブルを次のようにレイアウトする状況を持っています:
「House Table」列:ID、Addr、City、State、Zip-家ごとに1行
ID Addr City State Zip
-------------------------------------------
1 10 Maple Street Boston MA 11203
2 144 South Street Chelmsford MA 11304
3 1 Main Avenue Lowell MA 11280
「カスタム情報テーブル」列:ID、名前、値-テーブルは次のようになります。
ID Name Value
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 Square Footage 1200
2 Square Footage 1930
3 Square Footage
したがって、個々の家のレコードには複数の行があります。オプションの情報が必要になるたびに、このテーブルは文字通り再構築されるため、来年は次のようになります。
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 First Name John
2 First Name Harry
3 First Name Jim
最終的には100,000の家の列を蓄積し、1年間で10個の追加情報があります。2番目のテーブルは1,000,000行の情報になり、その多くには冗長な(説明)情報が含まれています。全体的なデータベース要件は、人々が家の行情報+関連するカスタムフィールド値を1日に数千回取得する必要があることです。
だから私の質問:代わりに悪い(または恐ろしい)練習でしょうか:
A)カスタム列の最大数(おそらく「1」から「10」と呼ばれる)を推測してハウステーブルをレイアウトし、それらのカスタム値をハウス行に挿入します。
または
B)カスタム情報をハウステーブルに保存しますが、毎年要件が変更されると、要件が非常に多くなり、最大数がわからないという考えで、カスタム情報に必要な列数だけでハウステーブルを再構築しますオプションのフィールドが求められる場合がありますか?
ありがとう、これが理にかなっていることを願っています!