初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2014-08-06 01:15:31

脱初心者を目指すもの
Guest

自己リレーションと複数のリレーションキーを選択する際の考え方

皆様の質問・ご意見、いつも勉強させて頂いております。
さて、初心者なりに本掲示板の質問内容をサンプル作成し考えたりしておりますが、
どうしても理解できないことがあり・・・アドバイス頂けますと助かります。

まだまだ出来ないことが沢山あるのですが、今回は自己リレーションについてです。
例:https://fm-aid.com/bbs2/viewtopic.php?id=904

上記解決済みのスレですが、上記サンプルを作成しShin様の言うとおりの動きになりました。

しかしなぜ、解決方法として自己リレーションという考え方が出てきて、
リレーションキーに日付とシリアルがでてくるのか?が、しっかり理解できません。。

--質問1--
上記URLスレでは、以下のようなリレーションになっています。

日付 = 日付
serial ≧ serial

上記複数のリレーションキーが発生してる場合、文章的にはどのような体系になるのでしょうか?
なんだか文章が下手で申し訳ないですが、リレーションを文章的に捉えたいと考えています。

ん~意味が伝わるか心配。。


--質問2--
おそらく何度も経験しないと生まれてこないのかもしれませんが、
どのような考え方で自己リレーションを選択されてるのでしょうか?

他のスレでも結構皆様、自己リレを使って解決されることが多いのですが、
どういうときに自己リレをつかって・・・というのが何度考えても理解できなくて。。


説明下手で申し訳ないですが、アドバイス頂けますと助かります。

#2 2014-08-06 08:52:27

旅人
Member

Re: 自己リレーションと複数のリレーションキーを選択する際の考え方

同じ日付のレコードをグループ化して自分のSerial以下のレコード数
を計算(count)するわけですから

日付   Serial   count
8/1    001     1
8/1    002     2   
8/1    003     3
8/2    004     1
8/2    005     2
となります。日付をcountしても同じです。

Offline

#3 2014-08-06 09:16:14

DQX
Guest

Re: 自己リレーションと複数のリレーションキーを選択する際の考え方

質問1
言葉で表すなら、
「同じ日付で、シリアル番号が自分の数字よりも小さいレコード」になると思います。
言葉で理解するよりもポータル作って関連レコード表示した方が理解できると思いますよ。

質問2
判定するテーブルが同じテーブル(自分自身)のためです。
今回の様に現在の件数を知ると言った場合には、自分自身の件数を知る必要がある時に自己リレーションを使ったりします。

#4 2014-08-06 10:00:13

Shin
Member

Re: 自己リレーションと複数のリレーションキーを選択する際の考え方

新しいレコードが作られた時点で、同じ日のレコード数が、日毎のシリアル番号になりますね。数字固定ならばそれを自動入力にして竿計算させないようにしておけば良いのですが、レコードの削除があったりすると再計算させる条件でしたら、自レコード以前(自分を含んで)に作られたレコード数を数えることになります。その判別が、自動入力されたシリアル値です。(その意味では作成タイムスタンプでも良いのですが)それが自分以下の物を探すと、目的のレコードが抽出できます。

自己リレーションは、抽出を動的に行うことが出来ます。通常の検索に依る抽出ですと、何らかのスクリプトを走らせる必要がありますね。
ちょうど、名刺の束から同じ会社の物を引き出すときに、その場でぱらぱらめくって同じ会社名を抜き出す、という作業を自動的に行っている、という感覚でしょうか。

Offline

#5 2014-08-06 22:18:26

脱初心者を目指すもの
Guest

Re: 自己リレーションと複数のリレーションキーを選択する際の考え方

旅人様、ありがとうございます。
・同じ日付のレコードをグループ化・・・これはなんとなく解りました。
・自分のSerial以下のレコード数・・・・なんとなく言われると解るのですが、この問題に直面したときにすぐに答えに辿り着かない自信があります。。

ご意見、参考に再度サンプルをいじってみます。
--

DQX様、ありがとうございます。
>>言葉で理解するよりもポータル作って関連レコード表示した方が理解できると思いますよ。

仰るとおりなので、サンプル上で、リレーションの = 等をいじって試してますが、
日付が必要なのは理解できてきましたが、なぜSerial >= 自己リレSerial がなぜ、必要なのか理解できなんです。。

>>今回の様に現在の件数を知ると言った場合には、自分自身の件数を知る必要がある時に自己リレーションを使ったりします。
なんとか、理解できてきました。

--

Shin様、ありがとうございます。
>>自己リレーションは、抽出を動的に行うことが出来ます。通常の検索に依る抽出ですと、何らかのスクリプトを走らせる必要がありますね。
ちょうど、名刺の束から同じ会社の物を引き出すときに、その場でぱらぱらめくって同じ会社名を抜き出す、という作業を自動的に行っている、という感覚でしょうか

かなりイメージできました!

>>自レコード以前(自分を含んで)に作られたレコード数を数える

・自レコードより以前のレコード数を抽出。 (serial ≧ serial)
かつ(and)
・同じ日付で抽出。  (日付 = 日付)

という捉えかたでしょうか・・。なんとなく理解できて来ました!
もうちょっと他の問題を解いたら、しっかり理解できそう・・・が、思いつきません。。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 515.2 KiB (Peak: 519.73 KiB) ]