ほとんど重複する列名の二組とテーブルをどのように設計すべき?
-
25-09-2019 - |
質問
私は約40の列を持つテーブルを持っています。列名の唯一の違いは、最後の20は、すべてのカラム名の前に「B」で始まるということです。この表には、比較のために使用されています。換言すれば、最後の20列のデータの最初の20列のデータを比較します。
私は、これは非常に悪いデザインです知っているので、どのようにこのテーブルは20列があるように、再設計されなければならない、まだ我々はまだ
?データを比較することができます編集:それは場合に役立ちます、我々はまた、マッチしたコホート
を見つけるために、このデータを使用また、パフォーマンスがここでの主な関心事であることに注意してください。列データの取得を複製することによって、非常に高速です。
ありがとうございます。
解決
二つの可能なアーキテクチャや問い合わせ先ます。
1)「種類」欄で、あなたのテーブルを作成し、使用フラグを「プライマリ」対「代替」という。あなたのケースでは、 "A" 対 "B" が適している場合があります。
2)垂直パーティションを構築し、一次及び代替データのための2つの同一のテーブル()、その共通の主キー。 (ID = 42を一つのテーブルにある場合、それは他になければならない - 「代替」データがオプションである場合を除き、その場合、第二のテーブルを移入していない。)また必要に応じて、一次そのトラックのすべての可能な第3のテーブルを持っています常に両方のテーブルに共通であることが知られている任意のデータと一緒にキー、ます。
ヒント:SELECTで読むまで... EXCEPTとINTERSECT SELECT ...。彼らはすぐに不安な実行、および差異(除く)と一致(交差)のために2つのデータセット間のすべての列と行を比較するためのアイデアです。あなたは二つの構造のいずれかでかなり簡単にこれを使用することができ、そして(クエリを記述するためにfussierかもしれませんが)、それはだけでなく、あなたの既存のコードで動作します。