2017-09-22 9 views
0

作業オーダーチケットのサービスアクティビティを処理するSQLデータベースのテーブル関係を作成しようとしています。私はこれらのテーブルのための1対5の関係を持っており、質問があります。 私は、作業注文チケットを作成するためのWOT(Work Order Ticket)テーブルを持っています。 WOTは、それに関連付けられた異なる日付で複数のサービスアクティビティを持つことができます。 各サービスアクティビティでは、複数のパーツを使用して修復できます。 これは単なる基本的な考え方ですが、私は、次のテーブルとリレーションシップを作成しました:SQLテーブルの関係

WOT Table: 

WOT> wotnum - PK

Service Activity Table: 

service_activity>をServiceID - PK

service_activity> wotnum - FK(WOTテーブルのPKへのリンク)

Part Used Table: 

partused> partusedid - PK

partused>サービスID - FK(サービスアクティビティテーブルのPKへのリンク)

上記テーブルの各々は、(同様に他の列を有しています図示されていない)が、日付フィールド、部品番号などのテーブル固有のものである。

service_activity>serviceid (PK)フィールドはautoinフィールドも同様にpartused>partusedid (PK)フィールドです。

私の質問は、実際に手動でpartused>serviceid field (FK)を入力することなく、service_activity>serviceid field (PK)と同期されたpartused> serviceidフィールド(FK)をどのようにして保証するのですか?

私はテーブルとリレーションシップについてよく理解していますが、実際のデータ入力時にテーブルがどのように相互作用するかを考えているプロセスについては、少し新人です。私はこれに対する答えが簡単かもしれないと思うが、私はまだそれを把握していないだけだ。私の現在の解決策が適切でないようなら、私は提案を歓迎する。私は正しい方向に進むためにいくつかの助けが必要です。

+0

"実際に手動でpartused> serviceidフィールドに入力する必要はありません"とはどういう意味ですか?手動ではない場合は、他のどのような方法でフィールドを入力できると思いますか?私はこの文脈であなたが "手作業"で何を意味しているのかも分かりません。 –

+0

私は彼がFKの仕組みをよりよく理解する必要があると思います:p – achecopar

答えて

0

FKを正しく追加した場合、データ入力中にpartused.serviceid列データを手動で入力すると、自動的にservice_activity.serviceid列が参照されます。

例:service_activityが1つだけの場合はserviceid = 456です。あなたはpartused.serviceid = 500とpartusedテーブルに挿入データをしようとすると

  1. は、それはエラーがスローされますと挿入は許可されません。

  2. partused.serviceid = 456で使用されるテーブルパーツにデータを挿入しようとすると、他のテーブルの参照された行が実際に存在するため、正常に実行されます。

+1

ありがとう!私は私の質問に答えたと思う。私はこのテーブル構造に行き、何が起こるか見るつもりです。 – gitpicker

+0

@gitpickerよろしいですか?あなたの質問に答えたと思うなら、私の答えを受け入れてください:) – achecopar