nevertheless’s diary

考えていることをChatGPTに聞いてみる

Cascading Dropdown:FileMaker

今回は長めの要望をそのまま投げかけてみた。

Q1)仕事で使うための取引先一覧等のように、住所の要素を持つデータベースを作る事がよくある。住所は、都道府県と市区町村、番地等から構成されているが、入力する際に誤字等が発生しないよう、予め設定されている値の一覧から都道府県を選び、市区町村を入力する際にはその都道府県にある市区町村のみが表示されるようにしたい。連動式ドロップダウン(Cascading Drop-down)と呼ばれる仕組みにしたい。市区町村のデータは、郵便住所.jpからダウンロードする。
https://postaladdress.jp/municipality/download
ダウンロードするデータは次のようなもの。
都道府県名
都道府県コード
・市区町村名
・市区町村コード
これらを使って、連動式ドロップダウンで住所を入力(選択)するデータベースを作るために必要な、
・テーブル
・フィールド
・テーブルのリレーション
を示して欲しい。

ところが、ここで最初に示された回答がスクリプトで変数を設定するものだったので、修正させるために次のコメントを追加した。

Q2)都道府県テーブル、市区町村テーブルのそれぞれに入力されているデータを値一覧としてドロップダウンさせる形にする場合、スクリプトは不要ではないか。

確かに、FileMakerではテーブルのデータを直接値一覧としてドロップダウンに利用できます。その場合、スクリプトは不要です。以下に、値一覧を使用した設定方法を示します。

【テーブル構成】

1. 都道府県テーブル
2. 市区町村テーブル
3. 取引先テーブル

【フィールド構成】

1. 都道府県テーブル
- 都道府県ID(プライマリキー)
- 都道府県名

2. 市区町村テーブル
- 市区町村ID(プライマリキー)
- 市区町村名
- 都道府県ID(外部キー)

3. 取引先テーブル
- 取引先ID(プライマリキー)
- 取引先名
- 都道府県ID(外部キー)
- 市区町村ID(外部キー)
- 番地等(その他住所情報)

【テーブルのリレーション】

都道府県テーブルと市区町村テーブル
  - リレーション: 都道府県ID(都道府県テーブル) = 都道府県ID(市区町村テーブル)
  - カーディナリティ: 1(都道府県テーブル)対多(市区町村テーブル)

◆ 取引先テーブルと都道府県テーブル
  - リレーション: 都道府県ID(取引先テーブル) = 都道府県ID(都道府県テーブル)
  - カーディナリティ: 多(取引先テーブル)対1(都道府県テーブル)

◆取引先テーブルと市区町村テーブル
  - リレーション: 市区町村ID(取引先テーブル) = 市区町村ID(市区町村テーブル)
  - カーディナリティ: 多(取引先テーブル)対1(市区町村テーブル)

【値一覧の設定方法】

1. 都道府県値一覧の作成
   - 都道府県テーブルから「都道府県ID」と「都道府県名」を表示する値一覧を作成します。

2. 市区町村値一覧の作成
   - 市区町村テーブルから「市区町村ID」と「市区町村名」を表示し、リレーションを基にフィルタリングする値一覧を作成します。

【フォーム設定】

1. 取引先情報入力フォームを作成し、以下の手順で設定します。

   - 都道府県ドロップダウン
     - フィールド: 取引先テーブルの「都道府県ID」
     - 値一覧: 都道府県テーブルの「都道府県値一覧」を使用

   - 市区町村ドロップダウン
     - フィールド: 取引先テーブルの「市区町村ID」
     - 値一覧: 市区町村テーブルの「市区町村値一覧」を使用し、「都道府県ID」に基づいてフィルタリング

   - 番地等入力フィールド
     - フィールド: 取引先テーブルの「番地等」

この設定により、都道府県を選択すると、その都道府県に対応する市区町村のみが市区町村ドロップダウンに表示されるようになります。

値一覧の設定方法について、もう少し詳しく聞いてみた。

Q3)値一覧の設定画面で、「次のテーブルから関連レコードの値のみ含める」を使った場合の具体的な設定について。

「次のテーブルから関連レコードの値のみ含める」を使った具体的な設定手順は以下の通りです。

【値一覧の設定手順】

都道府県値一覧の設定

1. ファイルメニュー > 値一覧の管理 を選択。
2. 新規作成 をクリック。
3. 名前を「都道府県値一覧」とし、以下の設定を行います。
   - "値一覧の内容を指定"セクションで「フィールドの値を使用」を選択。
   - "使用するフィールドの値を指定"で、「都道府県テーブル」を選択。
   - 最初のフィールドに「都道府県ID」を選択。
   - 2番目のフィールドに「都道府県名」を選択。
   -"値を2番目のフィールドから表示"をチェック。

◆ 市区町村値一覧の設定

1. ファイルメニュー > 値一覧の管理 を選択。
2. 新規作成 をクリック。
3. 名前を「市区町村値一覧」とし、以下の設定を行います。
   - "値一覧の内容を指定"セクションで「フィールドの値を使用」を選択。
   - "使用するフィールドの値を指定"で、「市区町村テーブル」を選択。
   - 最初のフィールドに「市区町村ID」を選択。
   - 2番目のフィールドに「市区町村名」を選択。
   - "値を2番目のフィールドから表示"をチェック。
   - "次のテーブルから関連レコードの値のみ含める"をチェックし、次の設定を行います。
     - 関連テーブルを「市区町村テーブル」から「取引先テーブル」へのリレーションを選択。
     - リレーションの条件: 都道府県ID(取引先テーブル) = 都道府県ID(市区町村テーブル)

【フォーム設定】

都道府県フィールド設定

1. レイアウトモードで、取引先情報入力フォームを開きます。
2. 都道府県ドロップダウンフィールドを選択し、設定を行います。
   - インスペクタで、データタブを選択。
   - コントロールスタイルを「ドロップダウンリスト」に設定。
   - 値一覧に「都道府県値一覧」を選択。

◆ 市区町村フィールド設定

1. 市区町村ドロップダウンフィールドを選択し、設定を行います。
   - インスペクタで、データタブを選択。
   - コントロールスタイルを「ドロップダウンリスト」に設定。
   - 値一覧に「市区町村値一覧」を選択。
   - 値一覧の表示オプションで、「次のテーブルから関連レコードの値のみ含める」が正しく設定されていることを確認。

【設定まとめ】

- 都道府県フィールド: 「都道府県値一覧」を使用し、都道府県IDと都道府県名を表示。
- 市区町村フィールド: 「市区町村値一覧」を使用し、都道府県IDに基づいて市区町村IDと市区町村名をフィルタリングして表示。

この設定により、取引先テーブルで都道府県を選択すると、選択された都道府県に関連する市区町村のみが市区町村ドロップダウンリストに表示されるようになります。

比較的単純な構成だが、提示されたものにこちらの知識から疑問を投げると考えてくれる。ただ、せっかくスクリプトで変数を用いるやり方を示してくれたので、どちらが適しているかを聞いてみる。

Q4)このように値一覧を使う方法と、スクリプトで変数を設定する方法について、それぞれのメリットやデメリットを教えてください。

連動式ドロップダウンを実装する際、値一覧を使う方法とスクリプトで変数を設定する方法のメリットとデメリットを以下に示します。

【値一覧を使う方法】

◆ メリット
1. シンプルな設定:
   - 設定がGUI上で完結するため、直感的に操作が可能です。

2. メンテナンスが容易:
   - テーブルやフィールドの変更に対して設定が自動的に適応されるため、メンテナンスが簡単です。

3. パフォーマンスが良い:
   - 値一覧を使う場合、FileMakerは効率的にデータをフィルタリングできるため、パフォーマンスが安定しています。

4. エラーハンドリングが不要:
   - 値一覧を使用するだけで適切なデータが表示されるため、エラー処理のコードを書く必要がありません。

◆ デメリット
1. 柔軟性に制限:
   - より複雑な条件や動的なフィルタリングには対応しづらい場合があります。

2. 大量データに対する制約:
   - データが非常に多い場合、値一覧のパフォーマンスが低下することがあります。

3. カスタマイズの制限:
   - インターフェースやユーザー体験の細かい調整が難しいことがあります。

スクリプトで変数を設定する方法】

◆ メリット
1. 柔軟性が高い:
   - 複雑な条件や多段階のフィルタリングにも対応できます。

2. カスタマイズ性が高い:
   - ユーザーインターフェースの挙動や表示内容を細かく制御できます。

3. 動的なデータ操作が可能:
   - ユーザーの入力に応じてリアルタイムにデータを変更・更新できます。

◆ デメリット
1. 設定が複雑:
   - スクリプトや変数を使った設定は高度な知識が必要で、設定が複雑になります。

2. メンテナンスが煩雑:
   - テーブルやフィールドの変更時にスクリプトの更新が必要で、メンテナンスが煩雑になる可能性があります。

3. パフォーマンスの考慮が必要:
   - スクリプトによる処理はデータ量や処理内容によってパフォーマンスに影響を与える可能性があります。

4. エラーハンドリングが必要:
   - スクリプトにエラーハンドリングを組み込む必要があり、コードの複雑さが増します。

【まとめ】

- 値一覧を使う方法は、設定が簡単でパフォーマンスが良いため、標準的なデータベース構築に適しています。
- スクリプトで変数を設定する方法は、柔軟性とカスタマイズ性が求められる場合に有効ですが、設定やメンテナンスが複雑になります。

用途やシステムの要件に応じて、これらの方法を使い分けることが望ましいです。

Q5)今回のように都道府県から市区町村を選ばせるくらいの規模の場合は、どちらが適しているか。

今回のような「都道府県から市区町村を選ばせる」規模のシステムでは、値一覧を使う方法が一般的に適しています。