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

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

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

You are not logged in.

Announcement

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


#1 2014-03-22 22:25:22

moani
Guest

マスターテーブルの作成方法について

お世話になります。

エクセルから商品構成のデータを取り込んでマスターテーブルを作成したいのですが、各商品品番を製造するために必要となるパーツが50~100ぐらいあります。

エクセルのA1に商品品名、B1に商品品番、C1に商品子品番、D1にパーツ品名、E1にパーツ品番、F1にパーツ子品番、G1に必要とする枚数が入力されています。

商品品名デスクA  商品品番ABCDEF  商品子品番A1  パーツ品名天板  パーツ品番AAA  パーツ子品番aa  枚数1
                        パーツ品名側板  パーツ品番BBB  パーツ子品番bb  枚数2
                        パーツ品名底板  パーツ品番CCC  パーツ子品番cc  枚数1
                        パーツ品名幕板  パーツ品番DDD  パーツ子品番dd  枚数1
                        パーツ品名ねじ  パーツ品番EEE  パーツ子品番ee  個数12
商品品名デスクB  商品品番GHIJKL  商品子品番B1  パーツ品名天板  パーツ品番FFF  パーツ子品番ff  枚数1
                        パーツ品名側板  パーツ品番GGG  パーツ子品番gg  枚数2
                        パーツ品名底板  パーツ品番HHH  パーツ子品番hh  枚数1
                        パーツ品名幕板  パーツ品番III  パーツ子品番ii  枚数1
                        パーツ品名ねじ  パーツ品番JJJ  パーツ子品番jj  個数12

エクセルのセルA2からC5までは空欄になっています。

「商品品名デスクA  商品品番ABCDEF  商品子品番A1」 に対応するパーツ5点を紐付けたいのですが、
このまま1つのテーブルに登録をするか、
商品とパーツでテーブルを分けるべきか、どちらがよいでしょうか?

2つのテーブルに分けた場合、商品品番とパーツ品番の紐付け方法は、それぞれのテーブルに商品品番IDというフィールドを作って、それでリレーションを張るということを思い浮かべているのですが、同じ商品品番にまとめて同じIDを入力するにはどうしたらよいですか?

わからないことばかりで申し訳ありませんが、ご指導宜しくお願いします。

#2 2014-03-23 12:16:44

moani
Guest

Re: マスターテーブルの作成方法について

質問者です。

親となる商品品番に対して、子となるパーツ品番の関係ですが、1対多ではなく、多対多でした。
例えば、パーツ品番AAAを使う商品品番は一つだけではなく、他の商品品番にも使うものでした。

このような場合、商品とパーツでテーブルを分けると、パーツの方には複数の照合キーを持つことになると思うのですが、そうなるとテーブルを分ける必要はないように思えるのですが、どうしたらよいでしょうか?

テーブルを分けない場合は、同じパーツの品番が商品ごとにいくつも重複して登録されていることになります。
商品品番とパーツ品番をまとめて一つの塊として見れば、ユニークな値となりますが、どう扱ってよいものか悩んでいます。

アドバイスをよろしくお願い致します。

#3 2014-03-23 17:37:39

Shin
Member

Re: マスターテーブルの作成方法について

商品品番毎のテーブル、パーツ品番毎のテーブル、商品品番・パーツ品番テーブルの3テーブルで構成されるといいでしょう。これが理論的には良い構造と言われる王道。

FM独自の特殊な構造を使うと、邪道な作り方と言われそうですが、商品品番テーブルの中に、繰り返しフィールドでパーツ品番を持たせる、という方法も有ります。商品からパーツへの展開がスムーズになります。業界は異なりますが、
http://www.russ.jp/stepbbs/step.cgi?mode=view&no=49513
みたいな動き。

Offline

#4 2014-03-23 18:20:07

moani
Guest

Re: マスターテーブルの作成方法について

Shin様 ありがとうございます。

> 商品品番毎のテーブル、パーツ品番毎のテーブル、商品品番・パーツ品番テーブルの3テーブルで構成されるといいでしょう。これが理論的には良い構造と言われる王道。

こちらの王道に挑戦したいと思います。
データベースの勉強が足りず、お恥ずかしいのですが、教えて下さい。

・ 商品品番毎のテーブルは、1レコード1商品品番
・ パーツ品番毎のテーブルは、1レコード1パーツ品番、重複なし
・ 商品品番・パーツ品番テーブルは、1商品品番に対して複数のパーツ品番+各パーツの必要枚数などの情報も含む

上記の分け方で合っていますか?
全ての情報を持った商品品番・パーツ品番テーブルがあるのに、商品品番毎のテーブルとパーツ品番毎のテーブルを別に持つのはリレーションの際に必要になるのですか?

引き続きご指導よろしくお願いします。

#5 2014-03-23 22:17:08

Shin
Member

Re: マスターテーブルの作成方法について

全てのテーブルのレコードには、重複は作りません。
商品品番・パーツ品番テーブルは、1商品品番に対して1パーツ品番+1パーツの必要枚数などの情報も含ませます。このレコードは、商品品番毎テーブルの1レコードに対して、1:多の関連になります。

商品マスター 構成マスター  部品マスター
 商品品番 = 商品品番
        パーツ品番 = パーツ品番
 商品品名           パーツ品名
 商品子品番  枚数      パーツ子品番

という構成になります。
パーツの細分(側板等)は、ポータルフィルターを使って表現したら良いかと思います。

Offline

#6 2014-03-24 06:58:58

moani
Guest

Re: マスターテーブルの作成方法について

Shin様

詳しいご説明をありがとうございます。
3つのテーブルに分けてみました。

商品マスターと部品マスターをそれぞれ、構成マスターからインポートをすると、いずれも重複している行があったので固有のものだけ残しました。
商品品番からポータルで構成マスターの部品品番や枚数などを表示することができました。

そこで、また質問が出てきましたので教えて下さい。

1.製品品番と部品品番はそれぞれ、そのフィールド単体では固有のキーにはならず、照合用に計算式で「製品品名&製品品番&製品子品番」を作ってリレーションをしています。
  かなり長い文字列なったのですが、問題ありませんか?
  別途、シリアルNoなど振ってその値を照合キーとした方がよいでしょうか?

2.上の質問と似たようなものですが、「製品品名&製品品番&製品子品番」という長い文字列の1つのフィールドで照合をするのか、「製品品名」「製品品番」「製品子品番」の3種類をそれぞれリレーションを張るのでは何か違いはありますか?

3.データベース設定のリレーションの画面ですが、製品マスターと構成マスターは「1」対「多」の関係になるはずですが、リレーションの線はどちらも鳥の足のように3本になっています。
  製品マスターから伸びている線は1本の単線になると思うのですが、どこが間違っていますか?
  テーブルの3つとも、重複チェックをして重複行は存在していません。

ご指導宜しくお願い致しますm(__)m

#7 2014-03-24 09:13:43

Shin
Member

Re: マスターテーブルの作成方法について

製品マスターの中で、製品品番はユニークですか?それが単体で固有にならない、ということが理解できませんが、製品番号・製品子番号で1製品を表す、という事ですか。
そうでしたら、製品品名は不要でしょう。
それらは、具体的にどのような文字構成ですか。
リレーションは、どちらで行なってもほぼ同じです。

Last edited by Shin (2014-03-24 09:14:05)

Offline

#8 2014-03-24 11:08:00

moani
Guest

Re: マスターテーブルの作成方法について

Shin様

ご回答ありがとうございます。

> 製品マスターの中で、製品品番はユニークですか?

→  製品品番単体ではユニークではありません。
     部品品番も同様です。
   
製品品名 : デスクA
製品品番 : ABC1-1501LKSGAYLKGT(B)
製品子品番 : S

上記のような半角英数の羅列で、同じようなシリーズの商品がたくさんあり、サイズ違い、色違いなだけで品番が付与されているため、 製品品番単体では固有とならず、「 製品品名& 製品品番& 製品子品番 」でようやく固有となります。
「 製品品番& 製品子品番 」でも重複レコードはあります。
部品も同様です。


> リレーションは、どちらで行なってもほぼ同じです。

  → 「 製品品名& 製品品番& 製品子品番 」でユニークになっているので、製品マスター側のリレーションは単線になると思うのですが、鳥の足ということは重複行が存在するという意味でしょうか?

検索をするときは、製品品名のフィールドに「デスク」、製品品番のフィールドに「ABC1」と入力して、ある程度絞り込まれたものの中から該当品番を探す、ということがよくあります。

製品マスターに持つ情報が「 製品品名& 製品品番& 製品子品番 」だけの場合、検索をする際、1つのフィールド内で検索ワードを複数入れることはできなかったと思うのですが、クイック検索フィールドを使うのでしょうか?

説明が下手で申し訳ありません。
引き続き、ご指導を宜しくお願い致します。

#9 2014-03-24 15:01:59

Shin
Member

Re: マスターテーブルの作成方法について

複合させたフィールドは、後で使いにくくなるので、避けましょう。
3個のフィールドのままでリレーションしても良いですが、各レコードにシリアル番号をつけて、それで管理したほうが簡単でしょうね。(これはお好みで)

FMのリレーション図は、IE法に準拠しているもので、鳥足は複数を表します。これは、現在複数存在する、という意味ではなく、複数存在できる、という意味です。

Offline

#10 2014-03-24 20:33:44

moani
Guest

Re: マスターテーブルの作成方法について

Shin様

いつもありがとうございます。
なかなか「解決」とできなくて申し訳ありません。

構成マスターをよく見てみたら、「 製品品名& 製品品番& 製品子品番&部品品名& 部品品番& 部品子品番 」と連結した値でも重複しているものがありました。

理由は、両面テープやネジなどは1つの製品を構成するいくつかの部品の中で複数ヶ所に渡って使用される消耗品です。
今まではそこまで管理していなかったのですが、今回からネジ1個まできちんと把握するようになりまして・・・。

構成マスターの中で完全な固有の値はなくなってしまうため、アドバイスに従ってシリアルNoを振ってみました。

そこで、またわからないことが出てきてしまったのですが、構成マスターと製品マスターは同じシリアルNoの製品idでリレーションを張るんですよね?
製品品番にシリアルNoを振る方法がわかりません。

構成マスターにインポートするエクセルでは、最初の1行目だけに「 製品品名 」「 製品品番 」「 製品子品番 」が入力されていてます。
    A1         B1          C1           D1         E1          F1・・・・
「 製品品名 」   「 製品品番 」  「 製品子品番 」   「 製品品名 」   「 製品品番 」  「 製品子品番 」・・・
                                    「 製品品名 」   「 製品品番 」  「 製品子品番 」
                                    「 製品品名 」   「 製品品番 」  「 製品子品番 」
                                    「 製品品名 」   「 製品品番 」  「 製品子品番 」

2行目以降は 「 製品品名 」「 製品品番 」「 製品子品番 」は省略されています。
別の品番が現れるまではA1~C1は空欄になっています。

構成マスターの方で「製品品名& 製品品番& 製品子品番」にシリアルNoを振る方法は、以下のようなスクリプトでよいですか?

1.構成マスターを開いて、最終行の「製品id」の値+1を変数に入れる
2.エクセルからデータをインポート
3.繰り返しの中で対象レコードの先頭行へ行って、次の「製品品番」が現れるまで「製品id」に同じ値を入力
4.次の「製品品番」が現れたら、変数に+1を加算
6.終端行で繰り返し終了

部品品番の方もシリアルNoは要りますか?
部品品番の方は構成マスターの中で重複しているものがいくつもあるのですが、どのように振ったらよいでしょうか?

どうか引き続きご指導いただけますようお願い致します。

#11 2014-03-24 23:12:01

Shin
Member

Re: マスターテーブルの作成方法について

そのスクリプトでも良いのですが、もっと簡単に済みます。

現在のエクセルの表で、どこかに空行を作り、シリアル値を打っておきます。(仮にZ行とします)
ZABC行を製品マスターにインポートします。(面倒なので空行もそのままで)
製品名を = で検索(空行を抽出)して、対象レコードを削除します。(実レコードだけが残る)
次に、ZDEFを部品テーブルへインポートします。(重複は後で処理)
Zを構成テーブルへもインポートします。
製品:Z ≦ 構成:Z というリレーションを張り、製品側を降べきにソートしておきます。構成テーブルの製品コードを、このリレーションを通した 製品:Z で全置換します。

これで、リレーション関係を含めたレコードの移行出来ました。

部品側の重複処理ですが、この作業は、1重複毎に作業する必要が有り、かなり手間がかかる可能性があります。
まず、部品テーブルで、重複するレコードを抽出します。そのままの状態で、構成テーブルへ、関連レコードへ移動(対象レコードから)、で移ります。この状態で部品コードを使うコードで全置換、部品テーブルへ戻り、同じコードで全置換します。
これを繰り返していきます。

これで、DBへのデータの移行は完成です。
商品コード、部品コードのそれぞれの次のシリアル値を。それぞれの最大の数字+1に設定しておきます。
シリアル番号は、途中の抜けがたくさん出来るはずですが、抜けが有っても、全く支障がありません。詰めようとすると物凄く手間がかかりますので、そのままで運用しておきましょう。

Offline

#12 2014-03-25 02:39:06

moani
Guest

Re: マスターテーブルの作成方法について

Shin様

お世話になっております。
ちまちまとスクリプトを書いて、とりあえず製品ID、部品ID、構成IDに重複なしのユニークな値を入れることができました。

レコード数が多いとスクリプトを動かしている時間が長くなりそうですし、勉強のためにぜひともShin様の方法を習得したいのですが、またしても壁にぶち当たってしまいました。

エクセルの方でシリアルNoを振って、製品マスターにインポートして、空レコードを削除する
部品マスターにもZDEFをインポート
構成マスターにもZを含むデータをインポート ここまではできましたが、

↓ ここからつまづいています。 ↓
> 製品:Z ≦ 構成:Z というリレーションを張り、製品側を降べきにソートしておきます。構成テーブルの製品コードを、このリレーションを通した 製品:Z で全置換します。

製品マスターの Z を降順でソートして、構成マスターの商品IDを製品:Zで全置換をしたら、全行が「1」になってしまいました。。
製品マスターと構成マスターのリレーションはこの Z だけなんですよね?

【 製品:Z ≦ 構成:Z というリレーション 】 この部分が理解できないのですが、どういう意味になるのですか?
リレーションにかなりの苦手意識があり、なかなか飲み込めずにすみませんm(__)m

理解が悪くて本当に心苦しいのですが、お時間のある時にでもご教示いただけますようお願い致します。

#13 2014-03-25 02:52:07

moani
Guest

Re: マスターテーブルの作成方法について

すみません。

さきほど送信しました、「製品マスターの Z を降順でソートして、構成マスターの商品IDを製品:Zで全置換をしたら、全行が「1」になってしまいました。。」 という部分ですが、リレーションが間違っていました。

製品マスターと構成マスターを「 製品品名 」   「 製品品番 」  「 製品子品番 」 の3種類のリレーションを外していました。
リレーションを戻したら、ちゃんとシリアルNoが表示されました。

それでも 【製品:Z ≦ 構成:Z】 こちらの部分は未だにわかりませんので、引き続きご解説いただけると嬉しいです。

部品マスターの重複処理はスクリプトで行うのですよね?
明日はお休みなので、もうちょっと頑張ってみます。

どうぞ宜しくお願い致します。

#14 2014-03-25 12:50:50

Shin
Member

Re: マスターテーブルの作成方法について

文章で書くと、なかなか難しいでしょ。
手順をスクリプト化したもので見てください。スクリプトには、ブロックごとに一時停止を入れて有りますので、動きが見えるでしょう。FMP adv ならば、スクリプトデバッガでご覧ください。
https://dl.dropboxusercontent.com/u/926 … 07.fp7.zip

部品マスターの重複処理も一応スクリプト化して有りますが、「部品品名& 部品品番& 部品子品番」でユニークにならないのでしたら、スクリプトで自動設定は無理です。さらに、「規格」などのフィールドを作って区別できるようにする必要があるでしょうね。

Offline

#15 2014-03-26 00:07:07

moani
Guest

Re: マスターテーブルの作成方法について

Shin様

お礼が遅くなってすみません!結局、今日は休日返上となりまして、今、Shin様の作って下さったサンプルで勉強させていただいています。
もうもう、まさに!理想をかたちにしていただいて・・・本当にありがとうございます!
わかりにくい説明をくみ取っていただいた上にサンプルまで作っていただけて本当に感謝しています。

リレーションとスクリプトを印刷しましたので、ちゃんと理解できるまで勉強させていただきます。
取り急ぎお礼まで。
ありがとうございました!m(__)m

#16 2014-03-27 05:57:21

moani
Guest

Re: マスターテーブルの作成方法について

Shin様

お世話になっております。
遅くなりましたが、お蔭様でサンプルを通してテーブルの構成やリレーション、スクリプトを理解することができました。

部品も「部品品名& 部品品番& 部品子品番」でユニークな値になりましたので、サンプルでばっちり重複の処理もできました。
本当にありがとうございます。
エクセルで振ったシリアルNoを製品マスターと部品マスターの両方のシリアルとして使用するところや、スクリプトで重複行を処理する部分などなど、とても勉強になりました。

もうただただ、すごいなー!・・・と感動です。
自分でこれだけのことができるようになるには、10年かけてもどうだろう・・・無理だろうな・・・。
でも、ファイルメーカーは好きなのでくじけずに頑張ります。

別件でも先に進まずに悩んでいることがあるのでまた相談させて下さい。
ありがとうございました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 579.12 KiB (Peak: 616.02 KiB) ]