非常によく似た質問があります。知っておくべき情報が大幅に異なる製品をモデル化し、それらをラインアイテムにリンクしますか? しかし、私を助ける答えが見つかりません。
上記の Q&A の誰かが、さまざまなメタデータ情報を保持するようにデータベースを設計することを指摘しており、これには素晴らしい回答がありますが、私のプログラムでは検索機能が明示的に必要であるため、パフォーマンスが低下することは望ましくありません。
私は、PHP + Oracle を使用して、当社の販売の進捗状況を追跡し、レポートを生成する「技術者」です。ワークフローは一般的に次のようになります。
- マーケティング担当者は、準備されたデータ セットをシステムに提供します。
- 最前線のスタッフ (営業) が私のシステムで進捗状況をマークします。
- 誰でもシステム内の結果を検索できます。
- 私はマーケティング担当者にレポートを作成します。
問題:
次のように、データセットの多くの列は同じです (または同じと見なすことができます)。
account|customer_name|gender|location|program_segment|...
しかし、マーケティング部門。新しいアイデアを思いつく(そして既存のものを放棄する)ように、各「販売プログラム(キャンペーン)」には独自のデータがあります。
プログラム 1 の場合、次のものが含まれる場合があります。
...|prev_coupon_code|last_usage_amount|...
ただし、プログラム 2 の場合、次のものが含まれる場合があります。
...|is_in_plan_1|is_in_plan_2|...
あなたはアイデアを得ました。
試行の失敗:
すべてのデータを保持するために、可能なすべてのプロパティ (列) を持つ「十分な長さ」のテーブルを使用し、空白/不要なプロパティを残してい
NULL
ました。しかし今では、「プロパティ」が多すぎて「販売の焦点」がさらに増えるため、「十分な長さ」になることは決してないと感じています。システムの新しいバージョン用に 41 列のテーブルの下書きを作成したところ、突然、彼らは収まらない情報を含む新しいプログラム。
テーブルに「ダミー列」を作成し、フロントエンドでそれらの異なる意味を「覚えておく」ことを誰かが提案しました。
NUMBER(1)
これは、Y/Nなどのいくつかのデータ型で機能しますDATE
が、 について話すときVARCHAR2
は、その数で十分かどうかわかりません...さらに、これにより、テーブルが「汚い」ように見えます。
質問:
イライラして、私は今、さまざまなプログラムにさまざまなテーブルを使用することを真剣に検討しており、UNION
「今月/シーズン/年の売り上げはどうですか?」と尋ねられた場合に備えて、句を使用して大きなレポートを生成します。
技術的に、これは良い習慣ですか?実装する必要がありますか?
編集#1:
明確にするために、1 つの「販売プログラム」は通常、放棄されるまでの数か月間実行され、実行中のプログラムごとに 1 か月あたり少なくとも 1 つのデータセットが存在します。
また、同時に複数のプログラムを実行することもできます。
編集#2:
これらの「プログラム指定」の列にはさまざまな数があります。あるプログラムでは 10 個必要な場合もあれば、1 個しか必要ない場合もあります。