0

次の関係を持つデータベースがあります。

Transaction->Purchase->Item->Schedule

Transaction - self explanitory
Purchase - any purchase info that relates to the item being purchased (quantity, if the user purchases more than one item).  A given Transaction can have more than one Purchase_ID tied to it.
Item - Stores Item info and relates it to individual clients.
Schedule - determines the price of an item at a given time of day.

Transaction.TimeStamp指定された日付範囲内にあるかどうかに基づいて、Schedule から一連の値を選択する必要があるクエリを実行する必要があります。クエリは、主キーに基づいて Schedule から値を選択する必要があります。主キーはトランザクションから追跡できません。

この問題を解決するために、トランザクションをスケジュールのプライマリに直接リンクするテーブルを作成することにしました。

最近、 Table Viewsを発見しました。これは、テーブルを「ビュー」にするのに適切な状況でしょうか? それとも、「実際の」テーブルを作成する必要がありますTransactionScheduleか?

transactionSchedule
Transaction_ID    Schedule_ID

私の問題は、テーブルビューがいつ役立つか/その利点が何であるかの詳細を理解していないことです.

トランザクションを追跡するための個々のテーブルを持っています->スケジュールはやり過ぎですか?

この問題に関する一般的なガイダンスは本当にありがたいです。

EDIT :このクエリは、既に入力されたデータを取得するためだけのものです

- ありがとう

4

2 に答える 2

2

価格を挿入したらすぐに、スケジュールから購入に直接価格をコピーすることを強くお勧めします. そうすれば、問題を解決でき、同時に、後で誤って (または意図的に) スケジュールを変更した場合に、別の価格が顧客に請求されるのを防ぐことができます。

スケジュールの主キーに関連し、これがトランザクションから追跡できないことについては、設計が悪いことを示しています。つまり、考えてみてください-トランザクションにタイムスタンプがあり、定義により、スケジュールはfromとtoのタイムスタンプを使用して時間内に配置されます-なぜそれらを関連付けることができないのですか? AFAICS、スケジュールの主キーはitem_id, from_timestamp, to_timestamp

スケジュール テーブルに from と to のタイムスタンプがあると仮定すると、クエリは次のようになります。

SELECT     ..your columns..
FROM       Transaction t
INNER JOIN Purchase    p
ON         t.id        = p.transaction_id
INNER JOIN Item        i
ON         p.id        = i.purchase_id
INNER JOIN Schedule    s
ON         i.id        = s.item_id
AND        t.timestamp BETWEEN s.from_timestamp
                           AND s.to_timestamp

ビューを使用するかどうかについては、実際にはあなた次第です。ビューはクエリより良くも悪くも機能しません。唯一の違いは、定義がデータベースに保存されることです。その主な利点は、

  • 人々はクエリをコピーする (そしてそれを台無しにする) ことなく定義を再利用できます。
  • スキーマをある程度変更し、それに応じてビューを更新すれば、それをアプリケーションから隠すことができます (この後者の利点は過大評価されることがよくあります)。
于 2010-01-25T18:48:25.943 に答える
0

トランザクション レコードは、スケジュールの主キーにリンクされた外部キーを持つことはできませんか? それとも多対多の関係ですか。いずれにせよ、ここでは適切なビューが表示されません。

于 2010-01-25T18:53:16.823 に答える