みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
はじめまして、hatakebitoと申します。
こちらのFM-AID.COMでFileMakerの勉強をさせていただいております。
当方、FileMaker Pro 20 (バージョン: 20.3.1.31 (10-13-2023))、Windows 10環境です。
多対多対多の関連の結合表を(ポータルを使わず)フォームに表示したいのですが、
どのように操作すればよいでしょうか。FileMaker流の考え方を教えてください。
実テーブルのレコードに1対1で対応するレコードが存在しない場合でも、Accessで
あればクエリを使って多対多対多の結合表を作れますが、FileMakerの
リレーションシップを使うと、実テーブルに存在しないレコードをフォームに
表示できないように見えます。
多対多対多の結合表を使いたい場合、FileMakerでは3つの外部キーをフィールド
に持つレコードをテーブルに挿入する等の操作をしなければ、結合することが
できないでしょうか。
それとも、以上は私の勘違いでFileMakerらしい別の解決方法があるでしょうか。
動機は、多対多対多の結合表のレコードごとに別のテーブルに関連する
レコードを挿入をしたいためです。ポータルの入れ子ができないようなので、
結合表の一部をポータルにするのではなく、結合表のレコードごとにポータルを
使わないフォームを表示したいと考えています。
最小の再現環境を作るため、以下の多対多の例を拡張して、多対多対多の
例を作りました。
多対多のリレーションシップ | Claris Pro および FileMaker Pro ヘルプ
https://help.claris.com/ja/pro-help/con … ships.html
FileMakerのファイル及びMS-Accessのファイルを同梱しています。
3テーブル結合.pngの形式の表をフォームで1レコードずつ表示したい
ということと、対応する新たな関連レコードをさらに別のテーブルに
挿入したいということがやりたいことです。
http://pupld.net/28/231226/g1i6k135bv/index.cgi
添付ファイル一覧
3テーブル結合.png 多対多対多の結合表をAccessで実現した図
3テーブル結合SQL.txt 多対多対多を結合するSQL文
expand-records.accdb MS-Accessの例
expand-records.fmp12 FileMakerの例
お力添えいただけますと幸いです。
Offline
Access持ってないし30年ぐらい使ってないので、何をしたいのかは理解できてませんが
単なる総当たりじゃなくて結合する条件があるはずなので、それを入れるテーブル(3つの外部キーをフィールド
に持つレコードをテーブルに挿入する)がないとどうしようもない気がします。AccessでもSQLでもそこは同じだと思うけど...
実在するレコードしか操作できませんが、一応「仮想テーブル」というテクニックはあります。
「空のレコードを事前に必要なだけ作っておく」というのが気に入らないので、自分では実務で使ったことはありません。
しかしこれは通常出力のために使うものだと思います。
「対応する新たな関連レコードをさらに別のテーブルに挿入」というのは、結局「3つの外部キーをフィールドに持つレコード」を追加するということになりますよね。
提示されているファイルでは、生徒名、サークル名、クラス名 となっていますが、サークル名とクラス名は直接の関連付けが無いようですね。
生徒名をメインにみていくと、それに関連付けられた独立した2テーブルがある、と考えればいいでしょうから、普通のリレーション構造を取ればいいはずで、書かれている内容では、最初にサークル名から考えているのでは、と思いますが、それでも、サークルに人を所属させ、そこからクラスに派生させればいいのでは無いかともいますが。
ただ、参加登録IDというものが理解できませんが、これは、サークル、クラス 間で何らかの意味を持っている情報なのでしょうか。
Last edited by Shin (2023-12-27 08:54:23)
Offline
himadaneeさん>
FileMaker流の考え方は、以下の2つがあるということですね。
(1)3つの外部キーをフィールドに持つテーブルにレコードを挿入
(2)「仮想テーブル」(空のレコードを事前作成必要)
(1)、(2)ともにチャレンジしてみたいと思います。
Shinさん>
(1)参加登録IDについて
参加登録IDは、サークル、クラス間で特別な意味はありません。
参加登録テーブルの主キーであるという以上の意味はありません。
クラリスのヘルプページに以下のように書いてあったので従いました。
>2 「参加登録」テーブルに「参加登録 ID」という名前の主キーフィールドを作成します。 このステップは結合するテーブルを扱うために必須の作業ではありませんが、すべてのテーブルに主キーを持たせることは、リレーショナルデータベースとして良い習慣です。
申し訳ございません。リンクをはり間違えていましたので再度はります。
https://support.claris.com/s/article/Fi … anguage=ja
(2)普通のリレーション構造
「サークルに人を所属させ、そこからクラスに派生」について、イメージできませんでした。
サークルと生徒を多対多関連、生徒とクラスを多対多関連にするということでしょうか。
仮にそうだとすると、添付ファイルのリレーションシップと同じになるのではないでしょうか。
詳しく教えていただけると助かります。
himadaneeさん>
アドバイスに従って、(1)から進めてみます。
himadaneeさん、Shinさん、お力添えありがとうございます!
Offline
難しい書き方をしてしまいましたが、
示されているサンプルでは、サークルを起点にしてクラスまでつないでいるので、リレーション関係の表現が変なのですが、
サークル情報とクラス情報を相互に関連づけることとなる9レコードが必要なのですか。
もし必要ならば、クラス情報からサークル情報を結びつけるレコードも必要では無いですか。その場合、その登録レコードはもっと増えていきます。
そうでないなら、
生徒 -- サークル
というリレーションと、
生徒 -- クラス
というリレーションを持たせればいいのでは。
Last edited by Shin (2023-12-27 14:12:18)
Offline
Shinさん>
生徒を起点にしてサークル情報とクラス情報を相互に関連づけるテーブルを作成しました。
また、サークル情報とクラス情報を直接関連づけるために、生徒を起点としたリレーションとフォームのレイアウトを作りました。
添付しますので、リレーションシップと生徒のレイアウトがイメージにあっているか、ご確認お願いできますでしょうか。
(生徒IDが1の佐藤さんのデーターだけ入力しております。)
http://pupld.net/28/231227/vpime2lemb/index.cgi
丁寧に教えてくださり、ありがとうございます。
Offline
サークル情報とクラス情報の関連づけが必要なのですね。
関連レコードの作成は簡単なのですが、削除することが結構面倒です。
> 動機は、多対多対多の結合表のレコードごとに別のテーブルに関連する
> レコードを挿入をしたいためです。ポータルの入れ子ができないようなので、
作り込めば、ポータルの中にポータル風の構造は作ることができます。ご参考までに。(相当昔に作ったもので、倉庫の奥からやっと見つけました)
https://www.dropbox.com/s/oevc417jnvyq8 … 2.zip?dl=0
Offline
Shinさん>
「ポータルの中にポータル風」のご提供ありがとうございます。
しくみを勉強させていただきます。
取り急ぎお返事まで。
Offline
ご教示いただいたノウハウをまとめます。
「多対多対多の関連の結合表」
ファイルメーカーで多対多対多を以下のように扱う。
(1)多対多対多の真ん中のテーブルを起点にして、2つの多対多関連に分割する。
(2)レイアウトで表示する場合、2つの多対多関連を2つのポータルにそれぞれ割り当てる。
(3)多対多対多をユニークに識別するレコードを新テーブル(多対多対多の関連を示す3つの外部キーを持つ表)に挿入する。
(4)新テーブルを起点にすることで、フォーム1枚に多対多対多の関連の情報を表示できる。
仮想テーブルも是非チャレンジしたいと思います。
himadaneeさん、Shinさん、ご教示くださりありがとうございます!
Offline
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 546.66 KiB (Peak: 567.56 KiB) ]