みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
先日は、サービスAやサービスBのレコードから、該当顧客のレコードへ直達するスクリプトを教わり、便利になりました。
今回は、顧客のレコードからサービスAの該当レコードへ行けるよう、同じようなスクリプトを作成しましたが、うまく行きません。
顧客テーブルにサービスA外部キーを設定し、サービスA主キーとリレーションさせています。
顧客によっては、サービスAがない客(サービスBのみ)から、サービスAを数回している客までいます。
サービスAからの該当顧客は1人のみですが、顧客からサービスAは、0から数件となるので、中間テーブルが必要かもと考えています。
考え方やヒントなどよろしくお願いします。
Offline
サービスと顧客のリレーションで、どっちのフィールドも索引があるでしょう(サービスのテーブルに顧客の外部キー)から、追加の設定は不要のはずです。
「サービスAやサービスB」というのが1つのテーブルなら、移動してからサービスAのみ検索(絞り込み)です。
最初のリレーション方向が逆です。サービス側に顧客キーを保持させるように作ります。そうでないと、サービスを複数受けられると顧客テーブル側で複数のサービスキーを保持することになり、煩雑になります
Offline
ん?
>顧客テーブルにサービスA外部キーを設定し、サービスA主キーとリレーションさせています。
というのは、今回の質問のために追加した設定ということだと思ったけど、違うのかな。
いずれにしろ、Shinさんのおっしゃる通り、顧客(1)側にキーを持つのはサービスのレコード(多)を編集するたびにマスター側を変更しないといけないので面倒ですよね。
非保存計算フィールドでキーのリストを持つこともできるけど、普通はあえて持つ必要がないので...
「先日」というのが https://fm-aid.com/bbs2/viewtopic.php?id=14435 だとすると、サービステーブルは1つのようなので、関連レコードのうち特定のものだけという要望ですか。
関連レコードに移動してから絞り込みがいやなら、サービステーブル側に計算フィールドを追加してリレーションすることもできます。
Case(サービス="A";顧客外部キー)
みたいな感じで。
しかしどうせスクリプトでしかできないので、スクリプトに1ステップ追加する方が...
ひょっとして、そのサービステーブルは、マスターとしてのテーブルなのですか。
Offline
早速のご回答ありがとうございます。
顧客テーブル、サービスAテーブル、サービスBテーブル、あとメンバーテーブルを作っています。
顧客テーブルとメンバーテーブルはマスターで、サービスAテーブルとサービスBテーブルはイベントになると思います。
サービスAから顧客レコードへ直行と、顧客レコードからサービスAのレコードへ、と逆方向なので、逆方向のリレーション設定が必要になると思っていました。
サービスAは、終了時を記録するので、該当のレコード(開始時に作成)を早く探せるように改善を試みているところです。それぞれの顧客について、最新の物だけ必要となります。
元から作ってあるサービスAに顧客外部キーのリレーションで、考えてみます。
Offline
具体的な動きがわかれば単純な仕組視で動きそうなのですが、書いてある内容で動きが全く想定できません。
また、サービスというのが何のことかわかりませんが、なんらかのイベントがあって、それに参加する顧客と、運営側のメンバーを管理するものなのでしょうか。また、イベントテーブルが2個あるのも、何とも違和感が強いです。
Offline
https://fm-aid.com/bbs2/viewtopic.php?id=14435
このスレの回答を参考にしてみてください。
Offline
よく考えれば、顧客とサービスAから成るTOGを元にしたレイアウトで、顧客を検索すると、何とかできそうです。
イベントテーブル2個、サービスAとサービスBですが、顧客によっては両方の対象になるので、そのように作っています。
このソリューションがうまくできれば、過去に製作入力した、ファイルメーカーがリレーショナルになる前からのデータを取り込みたいと思います。
Offline
う~ん、結局どういう状態なのかわかりませんね。
リレーション定義自体に「方向」はないので、どっちかのキーにグローバルフィールドとか非保存計算フィールドを使ってなければ、どっちからどっちへも「関連レコードへ移動」できるのですが...
「関連レコードへ移動」は、結局のところある条件で検索しているのと同じこと(レイアウトの切り替えや検索条件の設定など複数の作業が1ステップに記述可能なだけ)なので、検索でやっても別に構わないですが...
> イベントテーブル2個、サービスAとサービスBですが、顧客によっては両方の対象になる
イベント、というテーブルを作るべきしょう。その中に、サービスA・サービスBを区分するフィールドを作ります。それをポータルで表示しておき、両方の場合にはポータルの内容が2行になるように作ればいいです。
Offline
アドバイスありがとうございます。
サービスAとサービスBに、それぞれ関連テーブルを付けたいので、別テーブルで構築しています。
ポータルは中間テーブル上に作成すると思っていますが、合っていますか。
顧客も100人を超え、アイウエオ順のスクロールでは面倒になりました。数文字入れて検索できるよう改良中です。
皆様からのアドバイス、ヒントでノロノロですが、進んでいます。ありがとうございます。
Offline
> サービスAとサービスBに、それぞれ関連テーブルを付けたいので、別テーブルで構築しています。
1テーブルでも、同じ動きは作れます。
全体が小さいうちに改善しておくことをお薦めします。
> ポータルは中間テーブル上に作成する
両方のテーブルがどちらもマスターテーブルでしたら、その中間テーブルになりますが、見かけはサービス側のテーブルはマスターではなさそうですので、それをポータルとして使えばいいでしょう。
Last edited by Shin (2023-08-12 16:02:07)
Offline
正規化の概念で別のテーブルと思いますが、1テーブルでも試してみます。
サービスのテーブルはイベントとなります。
顧客レコードからサービスレイアウトに行き、新規レコードを作成するスクリプトを作りましたが、顧客とは関係なく、ただ新規サービスレコードができるだけでした。
当面は、新規サービスレコードの顧客欄に入力します。
Offline
顧客からサービスへの移動がどうしてもできないので、
リレーションシップの設定で、「このリレーションを使用してこのテーブルでのレコードの作成を許可」として、
先にサービスのレコードを作り、関連レコードへ移動のスクリプトで顧客レコードへ移動するようにしました。
Last edited by 古参初級者 (2023-09-11 13:04:11)
Offline
サービス、というものが、どのような概念でテーブルが作られているのかが具体的にわからないので、コメントがつかないのですよ。
1イベントごとに1テーブルを追加するのでしょうか。そうでしたら、正規化理論からの誤りです。
イベント毎、顧客毎のそれぞれの参加状況を見たいのですよね。
こんな構造にするのがいいと思いますが。(簡単な入力用の仕組みを組み込んであります。その部分は中級者向けです)
https://www.dropbox.com/scl/fi/hmpnhku3 … 2svu7&dl=0
Last edited by Shin (2023-09-11 19:05:10)
Offline
Shin様
イベントは、2種類あり、サービスAとサービスBがイベントテーブルになります。
サービスAは、開始と終了があるので、終了時に顧客名からすぐに検索できるようにしたいですが、10件程度なので、スクロールでも何とかなっています。
顧客とメンバーがマスターになると思います。
サンプルファイルありがとうございます。じっくり勉強したいと思います。
Offline
やっとできました。
顧客をアンカーとし、サービスをブイとするTOGを作り、顧客主キーと、サービステーブルの顧客外部キーをリレーションさせ、
関連レコードへ移動のスクリプトで、取得元をブイのサービステーブルにし、使用するレイアウトをサービスをTOGのアンカーとするレイアウトにしたらできました。
勘違いしていたことは、TOGで、左を外部キー、右を主キーとすると思い込んでいたことと、サービスをアンカー、顧客をブイとするリレーションを使うと思っていたことです。
Offline
Pages: 1
[ Generated in 0.017 seconds, 9 queries executed - Memory usage: 558.93 KiB (Peak: 579.84 KiB) ]