みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
フォルダの入子のような関係を実現させたいと思っています。
レコードA, B, CとあるとしてAの中にB、Bの中にCがある、というような関係を持たせて、AのポータルでA, B, Cの値が表示されるようなリレーションを組みたいのですが全く考え方がわかりません。
どうかお知恵をいただければ、と思います。
住所をモデルにすればいいのでは
例えば、
大阪府 大阪市 北区 曽根崎
の四レコードで内包関係になります。
そのそれぞれに、
大阪府 大阪市 北区 曽根崎
大阪府. 大阪市. 北区
大阪府. 大阪市
大阪府
というインデックスを持たせれば、大阪府から、4レコードを関連付けられます。このインデックスは、上からのインデックスデータに自己データを追加で作成できます。
Last edited by Shin (2023-01-28 08:24:25)
Offline
なるべくシンプルに説明しようと思って説明が足りなくなっていたかと思います、すいません。
住所のモデルだと今回にそぐわないのは、常に上下関係が決まっているわけではないのと、階層の数も決まっていない、またというところです。フォルダで考えていただければと思います。(上下関係も入れ替わりうるし、数の制限もなしです)
こちらも整理できてきましたが、上下関係は色々な形がありうるので定義するテーブルを別に作らなければならないのかと思います。
その中で各レコードの順序を定義し、それをキーに不等式のリレーションを組むという方法でいけるのではないかと思います。
Aの中にB、Bの中にC、Cの中にD さらに、上下関係はない、ということは、CからAを関連付ける必要があるのですよね。A⇋B,B⇋C,C⇋D というリレーションを組んで行けばいいのです。
ただ、Aから関連するレコードを探るには、そのリレーションをたどって、それぞれの階層情報にAの情報を付加すればいいのですが、階層が深くなり、最大レコード数だけの階層数がでる可能性があります。loop で処理していけばいいのですが、関連付けが変更されるたびにその処理が必要になるのでしょうね。
関連付けの追加は比較的処理は単純で、とりあえずは検証できています。
削除処理はかなり面倒で、例えば、上のB⇋Cが削除された場合には、A,BからD,AからC,D へのリンクも削除する必要がでてきます。
変更処理は、さらに面倒になります。A⇋B,B⇋E,E⇋F に変更されると、A,BからC,D のリンク(組み合わせで4リンク)を削除した上で、A,BからE,F を追加することになりますので、非常に面倒な処理になります。
Last edited by Shin (2023-01-26 14:48:31)
Offline
とりあえず、フォルダの場合上下関係の入れ替えというのは不可能では?(フォルダを別のフォルダに移動はできるが)
ファイル数の制限もFMのレコード数同様無限ではないです。
レコードの情報としては、親レコードへのリンクだけあれば可能でしょう。
それを元にリレーションを作ると、親であるレコードには「すべての子」のリストが作れます。
あとは再帰的に孫以降のリストも取得して1つのリストにする計算式を作れば、そこに自分を加えて最初の質問のポータルが作れます。
お友達の輪、というモデルなんでしょうか。A~Z のレコードがあって、A-B,B-C,X-Y,Y-Z でお友達関係が存在してる時、A からは A,B,C が、Zからは X,Y,Z がポータルに表示できればいいのですか。
追加していく、という手順だけでしたら、
https://www.dropbox.com/s/5fky3ai3xqdnc … 2.zip?dl=0
粗削りですがこんな動きになりそうですが、これが想定されている動きですか。
階層の深さの想定が難しく、最大レコード数を超えないのは確実なのでその回数だけloopを回していますが、レコード数が増えると大変です。
削除や変更はかなり難しいので、ポータルのキーのなかの関連する2個のキーを消去して、再構築した方が確実かもしれません。とくに、回帰している場合(ループになっている)には、ちょっと難しいですね。
マスターのレコード削除があると、1から設定した方がはやいかもしれません。
Last edited by Shin (2023-01-29 15:34:57)
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 558.81 KiB (Peak: 582.03 KiB) ]