web-dev-qa-db-ja.com

他のテーブルの属性を直接使用して派生属性を計算することはできますか?

ドライバー予約システムのデータベースを作ってみました。ここに簡単な詳細があります:

  • ドライバーは複数の車両を所有しており、運転サービスを提供しています
  • ドライバーは異なる車で異なる時間当たり料金を請求します
  • ドライバーは予約ごとに基本料金がかかります。これは車両の種類とは関係ありませんが、個々のドライバーによって異なります
  • 予約は、会場、日付と時刻、費やされた時間と合計支払額を追跡する必要があります
  • データベースには、会場の詳細も含める必要があります

これらの詳細を使用して、ER図とグローバル関係図を作成しました。

ER diagramGRD

Bookingの総支払い属性がDriver.baseRate + (Vehicle.hourRate * Booking.hour)のような派生属性であることに気付きました。

SELECTを使用してその列を単純に表示することもできますが、後でtotalPayment値を使用しようとする場合(クライアントの合計使用量などを取得する場合など)はどうすればよいですか? DriverとBookingを接続してから、hourRateとbaseRateのコピーを外部キーとして配置し、それらから派生属性を計算する必要がありますか?私はこれについて調査しようとしましたが、多くの例では、同じエンティティ/テーブルの属性を使用して計算することにより、派生属性を説明しました。

2
Lyequation

そのようにその場でtotalPaymentを計算するアプローチで私が見る1つの問題は、Driver.baseRateまたはVehicle.hourRateは後で変更されるため、以前に計算された値を再現できませんでした。

別のテーブルでtotalPaymentを追跡するか、Bookingテーブルにマニフェスト属性として保存したいと思います。そのテーブルにデータを入力する場合でも、SELECTステートメントから計算された値を使用できますが、これらは計算された特定の時点でのみ有効です。

これらのすべての値(特にtotalPayment)は簿記に影響を与え、最終的にドライバーに支払われる(されていた)ことに注意する必要があります。
簿記、およびドライバーに支払われたものは、いつでも一貫性を保つ(そして維持する)必要があります。

5

あなたの質問のタイトルに返信するだけです:UML 2.5のP. 147は次のように述べています:

9.9.17プロパティ[クラス]

...

isDerived:ブール値[1..1] = false

プロパティが派生するかどうか、つまり、1つまたは複数の値を他の情報から計算できるかどうかを指定します。

{isDerived}プロパティ名の後。

1
qwerty_so