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

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

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

You are not logged in.

Announcement

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


#1 2023-12-26 16:11:45

hatakebito
Member

多対多対多の関連の結合表

はじめまして、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

#2 2023-12-26 21:03:25

himadanee
Guest

Re: 多対多対多の関連の結合表

Access持ってないし30年ぐらい使ってないので、何をしたいのかは理解できてませんが

単なる総当たりじゃなくて結合する条件があるはずなので、それを入れるテーブル(3つの外部キーをフィールド
に持つレコードをテーブルに挿入する)がないとどうしようもない気がします。AccessでもSQLでもそこは同じだと思うけど...

実在するレコードしか操作できませんが、一応「仮想テーブル」というテクニックはあります。
「空のレコードを事前に必要なだけ作っておく」というのが気に入らないので、自分では実務で使ったことはありません。
しかしこれは通常出力のために使うものだと思います。

「対応する新たな関連レコードをさらに別のテーブルに挿入」というのは、結局「3つの外部キーをフィールドに持つレコード」を追加するということになりますよね。

#3 2023-12-27 08:47:28

Shin
Member

Re: 多対多対多の関連の結合表

提示されているファイルでは、生徒名、サークル名、クラス名 となっていますが、サークル名とクラス名は直接の関連付けが無いようですね。
生徒名をメインにみていくと、それに関連付けられた独立した2テーブルがある、と考えればいいでしょうから、普通のリレーション構造を取ればいいはずで、書かれている内容では、最初にサークル名から考えているのでは、と思いますが、それでも、サークルに人を所属させ、そこからクラスに派生させればいいのでは無いかともいますが。
ただ、参加登録IDというものが理解できませんが、これは、サークル、クラス 間で何らかの意味を持っている情報なのでしょうか。

Last edited by Shin (2023-12-27 08:54:23)

Offline

#4 2023-12-27 11:29:55

hatakebito
Member

Re: 多対多対多の関連の結合表

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

#5 2023-12-27 12:28:22

Shin
Member

Re: 多対多対多の関連の結合表

難しい書き方をしてしまいましたが、
示されているサンプルでは、サークルを起点にしてクラスまでつないでいるので、リレーション関係の表現が変なのですが、
サークル情報とクラス情報を相互に関連づけることとなる9レコードが必要なのですか。
もし必要ならば、クラス情報からサークル情報を結びつけるレコードも必要では無いですか。その場合、その登録レコードはもっと増えていきます。

そうでないなら、
生徒 -- サークル
というリレーションと、
生徒 -- クラス
というリレーションを持たせればいいのでは。

Last edited by Shin (2023-12-27 14:12:18)

Offline

#6 2023-12-27 15:32:19

hatakebito
Member

Re: 多対多対多の関連の結合表

Shinさん>

生徒を起点にしてサークル情報とクラス情報を相互に関連づけるテーブルを作成しました。
また、サークル情報とクラス情報を直接関連づけるために、生徒を起点としたリレーションとフォームのレイアウトを作りました。
添付しますので、リレーションシップと生徒のレイアウトがイメージにあっているか、ご確認お願いできますでしょうか。
(生徒IDが1の佐藤さんのデーターだけ入力しております。)
http://pupld.net/28/231227/vpime2lemb/index.cgi

丁寧に教えてくださり、ありがとうございます。

Offline

#7 2023-12-27 17:04:31

Shin
Member

Re: 多対多対多の関連の結合表

サークル情報とクラス情報の関連づけが必要なのですね。
関連レコードの作成は簡単なのですが、削除することが結構面倒です。

> 動機は、多対多対多の結合表のレコードごとに別のテーブルに関連する
> レコードを挿入をしたいためです。ポータルの入れ子ができないようなので、
作り込めば、ポータルの中にポータル風の構造は作ることができます。ご参考までに。(相当昔に作ったもので、倉庫の奥からやっと見つけました)
https://www.dropbox.com/s/oevc417jnvyq8 … 2.zip?dl=0

Offline

#8 2023-12-28 10:20:29

hatakebito
Member

Re: 多対多対多の関連の結合表

Shinさん>

「ポータルの中にポータル風」のご提供ありがとうございます。
しくみを勉強させていただきます。
取り急ぎお返事まで。

Offline

#9 2023-12-28 12:06:09

hatakebito
Member

Re: 多対多対多の関連の結合表

ご教示いただいたノウハウをまとめます。

「多対多対多の関連の結合表」

ファイルメーカーで多対多対多を以下のように扱う。

(1)多対多対多の真ん中のテーブルを起点にして、2つの多対多関連に分割する。
(2)レイアウトで表示する場合、2つの多対多関連を2つのポータルにそれぞれ割り当てる。
(3)多対多対多をユニークに識別するレコードを新テーブル(多対多対多の関連を示す3つの外部キーを持つ表)に挿入する。
(4)新テーブルを起点にすることで、フォーム1枚に多対多対多の関連の情報を表示できる。

仮想テーブルも是非チャレンジしたいと思います。

himadaneeさん、Shinさん、ご教示くださりありがとうございます!

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 548.22 KiB (Peak: 569.13 KiB) ]