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

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

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

You are not logged in.

Announcement

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


#1 2021-02-16 22:27:36

ぴく
Guest

リレーションキーに使用している顧客コードの変更

こんにちは。
顧客コードをリレーションキーとしています。
売掛の管理、前回お買い上げから何日経っているかなどの計算に使用しています。
関連レコードで顧客コードを旧コードから新コードに全置換で書き換えはできますが、
当然ながら、数値フィールドで計算されている値は「?」になります。
計算に使用しているフィールドを順番に更新していけばいいのでしょうか?
それとも、新たな顧客フィールドを作り、今まで使っていた顧客コードを紐付け対処するしかないのでしょうか?
よくある顧客管理で、顧客コードの変更で使われる手法はどのように行われるのか?が知りたいです。
よろしくお願いします。

#2 2021-02-17 07:00:53

himadanee
Guest

Re: リレーションキーに使用している顧客コードの変更

変更する可能性のあるものはリレーションキーに使わないのがセオリーです。
なので最近のFMではテーブルにUUIDのフィールドがデフォルトで作成されるようになっています。

#3 2021-02-17 07:10:43

Moz
Member

Re: リレーションキーに使用している顧客コードの変更

データベースのリレーションキー(照合フィールド)の値は変更しないのが原則です。
顧客コードの変更は「よくあること」ではありません。

どうしても変更せざるを得ないとき
顧客コード「001」を「002」にするなら、
顧客コード「001」をもつレコードすべてのキーフィールド(主キー、外部キー)を「002」に書き換えます。

計算フィールドは最初破綻しますが、
関連レコードのキーが書き換われば再度リレーションが成立して再計算により正しい結果を返します。

計算フィールドではなく入力値の自動化のフィールドは
既存値置き換えがオフならば値は残りますが、既存値を置き換えていると見直しが必要です。
(作業前に影響範囲をリストアップしておき、作業後にすべてチェックします)

コードの採番ルールが変わったなどで全レコードで変更になるなら
元の値を別のフィールドに保持しておき、対応表に基づいて全置換などでしょう。

キーフィールドにはナチュラルキーとサロゲートキーの2種類があります。
顧客コードのような意味のある値をキーにしたものをナチュラルキー、
UUIDのような意味がなく内部でのみ使う値をキーにしたものをサロゲートキーといいます。
(サロゲートキーは多くの場合レイアウト上に配置しません)

どちらが正しいというのはありませんが、顧客コードの変更などでキーフィールドの値変更が頻発するなら
別途サロゲートキーを採用して顧客コードはキーとして利用しない(見かけ上のキー)ようにしますね。

Offline

#4 2021-02-17 07:34:20

himadanee
Guest

Re: リレーションキーに使用している顧客コードの変更

今思いついたんですが、新旧で重複しない変更なら、FM独自機能のマルチキーをつかうと変更時のリレーション切れが回避できますね。

マスター側で顧客コードを List(旧コード;新コード) に置換
関連側で顧客コードを 新コード に置換
マスター側で顧客コードを 新コード に置換

それと、xDBCを使ってSQLで更新すると、複数フィールドの一括置換が可能です。内部的には順次にやっていて(1つのレコードで複数を一度に変更でなく、1つのフィールドを全レコードでやってから次のフィールド)SQLでやる意味がないかどうかは、検証してません。

#5 2021-02-17 09:42:37

Shin
Member

Re: リレーションキーに使用している顧客コードの変更

顧客コードの変更は、よくある事なのですか?
重複作成による名寄せなどで、顧客コードが変更後も重複しないのでしたら、顧客コードを複数持たせておけばいいのでは。繰り返しフィールドを使ってみるといいかも。リレーション先は触る必要はありません。
ただし、リレーション先で、顧客コードを使った集計を行なっているのでしたら、書き換えしておかないと集計に支障がでる可能性があります。

Last edited by Shin (2021-02-17 11:21:08)

Offline

#6 2021-02-18 09:12:08

ぴく
Guest

Re: リレーションキーに使用している顧客コードの変更

himadanee wrote:

変更する可能性のあるものはリレーションキーに使わないのがセオリーです。
なので最近のFMではテーブルにUUIDのフィールドがデフォルトで作成されるようになっています。

himadaneeさん、ありがとうございます。

#7 2021-02-18 09:15:47

ぴく
Guest

Re: リレーションキーに使用している顧客コードの変更

Moz wrote:

データベースのリレーションキー(照合フィールド)の値は変更しないのが原則です。
顧客コードの変更は「よくあること」ではありません。

Mozさん、ありがとうございます。
私の書き方が少々足りませんでした。
様々な、顧客管理アプリで顧客コードの変更とういう機能はどのように実装されているのか?ということをお聞きしたかったのです。

#8 2021-02-18 09:18:50

ぴく
Guest

Re: リレーションキーに使用している顧客コードの変更

himadanee wrote:

今思いついたんですが、新旧で重複しない変更なら、FM独自機能のマルチキーをつかうと変更時のリレーション切れが回避できますね。

マスター側で顧客コードを List(旧コード;新コード) に置換
関連側で顧客コードを 新コード に置換
マスター側で顧客コードを 新コード に置換

それと、xDBCを使ってSQLで更新すると、複数フィールドの一括置換が可能です。内部的には順次にやっていて(1つのレコードで複数を一度に変更でなく、1つのフィールドを全レコードでやってから次のフィールド)SQLでやる意味がないかどうかは、検証してません。

himadaneeさん、ありがとうございます。教えていただいた方法ができそうです。

#9 2021-02-18 09:22:52

ぴく
Guest

Re: リレーションキーに使用している顧客コードの変更

Shin wrote:

顧客コードの変更は、よくある事なのですか?
重複作成による名寄せなどで、顧客コードが変更後も重複しないのでしたら、顧客コードを複数持たせておけばいいのでは。繰り返しフィールドを使ってみるといいかも。リレーション先は触る必要はありません。
ただし、リレーション先で、顧客コードを使った集計を行なっているのでしたら、書き換えしておかないと集計に支障がでる可能性があります。

Shinさん、ありがとうございます。顧客コードの変更は稀です。
2つの業務システムがありまして、仲介システムとして、filemakerで作成しています。
顧客コードを複数作るというのはいい方法ですね。

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: 521.58 KiB (Peak: 526.12 KiB) ]