みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
こんにちは。
二度目の投稿となります。
タイトルがややわかりづらく恐縮ですが、以下に説明いたします。
テーブル1 テーブル2 テーブル3 があります。
すでにテーブル2 と テーブル3 はリレーションがなされています。
ここで、テーブル1 と テーブル2 とで新たにリレーションをかけたいとします。テーブル2の複数フィールドA , B , Z に対してリレーションをかけたいのですが、Zは、実際にはリレーション先のテーブル3のフィールドとなります。
テーブル3のフィールドZを対象に、テーブル1とテーブル2とでリレーションはかけられないと思いますが、何かしら代替案はありますでしょうか。
ひとつ試したのは、テーブル3のZにデータ入力がされた時点で、同じ値をテーブル2のフィールドZZにコピーをし、そのZZとリレーションをかける、といった方策ですが、後日テーブル3のZが変更された場合は、それがテーブル2のZZに反映されないため、不正確となります(都度反映されるスクリプトをつくるのもひとつかと思いますが。。)。
もし、よりすっきりした方策がありましたら、アイデアをいただけますと幸いです。
どうぞよろしくお願いいたします。
Offline
一般的には、
Zがテーブル3のものであれば、テーブル2では索引が作れないので
そもそもリレーションができない。
もしなんとかリレーションをしたいのなら
Zの値をなんらかの形でテーブル2に取り込む必要があります
とこことまで書いたのですが、
実際何をしようとしているのかわkらないので
一般的な回答しか得られないかもしれません。
Offline
シャチさん、 ありがとうございます。
まさに、以下の回答を最終確認したかったのです。
>一般的には、Zがテーブル3のものであれば、テーブル2では索引が作れないのでそもそもリレーションができない。
やはり無理ですよね。ご指摘いただいたとおり、コピーするなりの方法で進めてみます。
>もしなんとかリレーションをしたいのならZの値をなんらかの形でテーブル2に取り込む必要があります
ありがとうございます。
Offline
どういう形で2と3のリレーションができているか
Zをどのような入力に仕方をしているか?
もし2と3が1対1のリレーションで
Zをキーボードから入力するのなら
3のテーブルのZのフィールドに
OnObjectModify あたりのトリガで
2に設けるZに送り込むことは可能かと思います。
もし、リレーションによっては
ルッックアップなんかも可能かもと思います。
Offline
リレーションの照合フィールドは、
関連テーブル側(照合される側)のものには索引が必須ですが、
参照する側のは索引非保存でもかまいません。
ですから、
テーブル2でテーブル1を参照するのならリレーションが成立しますね。
質問が抽象すぎて内容がまったく分かりません。
もっと正確な説明が有れば詳しい解答が有るかもしれませんよ。。
Offline
シャチ様、チポ様、ありがとうございます。
あまり詳しく書いてお手間をとらせてもと思いましたが、逆にご迷惑をかけたようで失礼いたしました。
以下、ご確認いただければ幸いです。
テーブル1は 「製品名」、「販売先」、「販売月」、「予測量」が入力されている、販売予測のテーブルとなります。
テーブル2は 「製品名」、「販売量」が入力されている、販売実績のテーブルとなります。
テーブル3は テーブル2にデータを入力するためのエントリーテーブルとなり、テーブル2は、テーブル3内のポータルとなっております。テーブル3に、「販売先」と「販売月」が入力されており、テーブル2のデータが関連付けられています。
先の質問でZと言っていたのは、この「販売先」と「販売月」のことです。
最終的に行いたいのは、テーブル1 と テーブル2(実際には、ポータル元のテーブル3のフィールドも含む)とで、「製品名」、「販売先」、「販売月」にてリレーションをさせて、販売予測の「予測量」と実績の「販売量」とを比較することになります。
入力のフローとしては、テーブル1には、「製品名」、「販売先」、「販売月」、「予測量」をそれぞれ事前に販売予測として入力しておきます。
その後、実際に製品が販売された後に、まずは、テーブル3にて、「販売先」と「販売月」を入力し、さらに関連ポータルとして表示されているテーブル2に、「製品名」と「販売量」を入力しております。テーブル3のひとつのエントリーに対して「製品名」と「販売量」は複数エントリーとなることが常です。
今回、テーブル1とテーブル2とで、「製品名」ではリレーションを掛けられましたが、さらに追加で「販売先」と「販売月」についてもリレーションをかけようとしたところ、実際にはテーブル3のフィールドであるため、リレーションを掛けられませんでした(当たり前ですが、、)。
おそらく、テーブル2にも、「販売先」と「販売月」の項目を設けて、入力時に、テーブル3のフィールドからコピーする、というのが一つの方策かと思いますが、上記で、注意すべき点や他の方策などございましたら、教えていただければ幸いです。
どうぞよろしくお願いいたします。
Offline
んん?
データベース管理
をよく見てください。
テーブル2に
> 「販売先」と「販売月」
各フィールドが定義されているのでは?
テーブルを説明するのに、
何を基準に1レコードとしているのかを明示すると理解しやすいです。
例えば
> テーブル1は 「製品名」、「販売先」、「販売月」、「予測量」が入力されている、販売予測のテーブルとなります。
これは、
1製品名 & 1販売先 & ひと月
ごとに1レコードですよね?
で、
テーブル2では?
この説明が足りていませんね。
また、
テーブル2とテーブル3のリレーションの説明が有りません。
ご自分でこれが理解出来ていれば今回の質問は解決することでしょう。。
Offline
テーブル2とテーブル3は「販売先」、「販売月」でリレーションされているはずですので,このフィールドはテーブル2にも実フィールドとして存在するはずですね。
Offline
Shinさんと私の仮定が正しければ、、
リレーションは
テーブル3とテーブル1とで定義して、
テーブル3で予測と実績の比較が出来るのでは。
Offline
チポさん、Shinさん、
ありがとうございます。
できました。。ありがとうございます。
まず、
>テーブル2とテーブル3のリレーションの説明が有りません。
についてですが、テーブル2に 「テーブル3用のID」というフィールドを作って、それとテーブル3のIDとでのみリレーションをかけていました。このリレーションのみで、テーブル3にある「販売先」、「販売月」をテーブル2に対しては引っ張てこれるので十分だと思い、「販売先」及び「販売月」のフィールドはテーブル2に設けておりませんでした。
ですが、普通にテーブル2にもこのフィールドを設けて、テーブル3とリレーションをかければいいのですね。。
なんとも、皆さまにはとっても当たり前のことでお恥ずかしいですが、目から鱗でした。。
今回ので他のDBの構造もだいぶ改善することができます。。
本当に、ありがとうございます。
Offline
Pages: 1
[ Generated in 0.010 seconds, 15 queries executed - Memory usage: 594.34 KiB (Peak: 610.88 KiB) ]