1

データベースモデルを設計しようとしていますが、質問があります。

私はこれを表す必要があります:

注文には0または1つのQAPが含まれる可能性があります。
注文には1つ以上のEレポートが含まれる場合があります。
Eレポートには1つのQAPが必要です。

これを表すために、私はこのモデルを持っています:

ここに画像の説明を入力してください

オーデンにQAPがない場合、ユーザーはQAPを選択してEレポートに追加する必要があります。注文にQAPがある場合、すべてのEレポートに注文のQAPがあるため、ユーザーはそれをEレポートに追加するためにQAPを選択する必要はありません。

ユーザーはOrden、adnを受け取り、Eレポートに記入します。私は注文には興味がなく、ユーザーが記入するE-Reportに興味があり、QAPにはそれを記入するために必要な情報があります。

私の問題は、注文にQAPがない場合、EレポートのQAPが異なる可能性があることです。
たとえば、Order1にはQAPはありませんが、2つのEレポートがあります。

  • E-Report1にはQAP1があり、
  • E-Report2にはQAP2があります。

このデータベース設計は正しいですか?

OrderテーブルとE-ReportテーブルのqapId列の繰り返しが正しいかどうかわかりません。

4

3 に答える 3

1

注文には0または1つのQAPが含まれる可能性があります。

Order.qapidをnull許容の外部キーにすると、この要件に適合します。

注文には1つ以上のEレポートが含まれる場合があります。

EReport.orderidをnull許容でない外部キーにすると、その要件に対応できますが、完全には適合しません。すべての注文に少なくとも1つのEReportが必要であるという宣言的な方法はありません。ただし、更新可能なビュー、トリガーなどを使用してこれを行うことができます。ただし、「すべての注文には少なくとも1つのEReportが必要」という意味は明確ではありません。これは、EReportの行がOrderの行と同時に作成されることを意味します。

Eレポートには1つのQAPが必要です。

EReport.qaoidをnull許容でない外部キーにすると、この要件に適合します。

注文にQAPがある場合、すべてのEレポートに注文のQAPがあるため、ユーザーはそれをEレポートに追加するためにQAPを選択する必要はありません。

注文のQAPをEReportにコピーする場合、この問題全体に間違った方法でアプローチしている可能性があります。あなたも言った

私の問題は、注文にQAPがない場合、EレポートのQAPが異なる可能性があることです。

これは、注文ごとにQAPが1つしかないことを意味します。OrderテーブルにQAPを1つだけ保存する必要があり、EReportテーブルにqapidをまったく保存しない必要がある場合があります。

于 2012-05-20T11:43:28.983 に答える
1

Orderそれで、あなたは持っていない状況を表現したいのですQAPが、それEReportはそうです、そしてそれは同じものでなければなりませんか?

まあ、EReport常に持っている必要があるのでOrder、あなたは省略しEReport.qapIdて頼ることができますOrder.qapId、このようなもの:

ここに画像の説明を入力してください

Order.forOrderfalseの場合、クライアントアプリケーションはOrder.qapId、子にのみ適用されるかのように解釈できます。それ以外の場合は、とのEReport両方に適用されます。OrderEReport

于 2012-05-20T11:58:40.553 に答える
1

必須の注文がQAPを取得する前に、EReportsは異なるQAPを持つことができるため、制約を表すために宣言型参照整合性を(単独で)使用する方法はありません。現在使用しているモデルは、EReportsが同じQAPを共有する必要があるというルールを課すためのいくつかの手続き型ロジックと組み合わせて、使用する必要があるものです。

于 2012-05-23T19:35:22.640 に答える