5 返信 最新の回答 日時: Feb 21, 2011 7:34 PM ユーザー:J

    集計が必要な場合どのようなテーブル構造がよいか?

    J

      タイトル

      集計が必要な場合どのようなテーブル構造がよいか?

      フォーラムに投稿

      テーブルの構造について質問です。なるべくデータの重複を避けつつ、集計等にも便利な構造にするにはどうしたら良いでしょうか?

      例えば、学校のテストの成績を管理するデータベースを考えます。

      毎年、生徒の学年やクラスは変わるので、以下のようにテーブルを作るとします。

      生徒情報テーブル(学生番号、氏名、性別、住所...等 生徒の基礎情報)

      クラス情報テーブル(年度、学生番号、学年、クラス、番号..)

      テスト成績テーブル(年度、学籍番号、科目名、得点...)

      さて、テスト成績についてある年度の科目毎、クラス毎の平均点や受験人数を知りたいとします。

      思いつく方法は、集計用に別のテーブルを作り..

      成績集計テーブル(年度、科目名、学年、クラス、平均点、受験人数..)

      成績集計テーブルのTOとテスト成績テーブルのTOをリレーションでつなぎ、平均点や受験人数は計算フィールドにすれば..と思うのですが、テスト成績テーブルには学年やクラスの情報は含まれていません。

      テスト成績テーブルに学年やクラスの情報を入れて(フィールドを作る)しまえば簡単だと思いますが、クラスの情報は「クラス情報テーブル」に含まれているので、こちらにもいれると重複することになります。

      このような、場合にはどのような構造にするのが良い(一般的)でしょうか?

      多少の重複は仕方ないのか、もっとうまい方法があるのか..。

      よろしくお願いします。

      環境は Filemaker Pro Advanced 11です

        • 1. Re: 集計が必要な場合どのようなテーブル構造がよいか?
          Shin

          まず、リレーションを使った集計より、集計機能を使った集計を覚えましょう。その方が、応用が数倍大きくできます。

          ファイルの構造は、そのままで問題無いのです。学生番号でそれぞれをリレーションしておいてください。テストテーブルだけが学籍番号になっているのはお愛嬌?

          集計は、テスト成績テーブルの中だけで行ないます。

          まず、点数の平均を集計する集計フィールドと、人数をカウントするための学生番号のカウントの集計フィールドを作ります。

          次に、新規レイアウトに、年度、科目名、学年、クラス(リレーション先のフィールドでいいです)のそれぞれについて、それぞれのフィールドをキーとする集計パートを作ります。その中に、上で作った集計フィールド2個を配置します。(この作業は、新規レイアウトで集計機能用のウィザードを使うと、レイアウトの設定からスクリプトまで作ってくれるので簡単です)

          次に集計目的の範囲を検索し、年度、科目名、学年、クラスでソートすれば、目的の集計が表示されているはずです。

          • 2. Re: 集計が必要な場合どのようなテーブル構造がよいか?
            hiro_

            > リレーションを使った集計より、集計機能を使った集計を覚えましょう。その方が、応用が数倍大きくできます。
            皆さん誤解を招きそうなので、ココだけに反応。

            集計機能は、言わばインスタントWebならぬ「インスタント集計」とお考えください。簡便ですが出来ることは事前にプログラムされたことに限られ、ほとんど応用が利きません。現物の実体レコードしか対象にできないことから一元的集計だけで、種々の切り口による多次元的集計は出来ません。また、レイアウトデザインの自由度もありません。
            質問者さんのケースで例えれば、
            生徒の個人カルテに進路指導を入力する際、幾つかの集計結果を横にポータル表示して参考資料にしたいといった場合など、「インスタント集計」では全く手が出ません。
            応用が数倍大きいのは、リレーション集計の方で言わば「カスタム集計」です。

            • 3. Re: 集計が必要な場合どのようなテーブル構造がよいか?
              Shin

              > 応用が数倍大きいのは、リレーション集計の方で言わば「カスタム集計」です。

              応用が広い、と書いているのは,集計機能としての応用ももちろん含めていますが、スキルとしての応用という意味で書いていますので,誤解有りません様に。

              いわゆるクロス集計という、縦横の表で結果を表示する集計も、集計機能で十分作成可能ですし、一般的に必要とされる統計は、この機能のみで十分対応できます。

              Hiroさんは、リレーションを使った集計がお好きな様ですので,逆の考え方を持っておられる様です。動的な多元的集計はどちらにしても、同程度のスキルを要求されるので,同じ事では無いかと思いますが。

              まず、ファイルメーカーの持っている基本的機能として、集計機能を覚えておかれる方が、今後のスキルの広がりが大きくなると思います。

              • 4. Re: 集計が必要な場合どのようなテーブル構造がよいか?
                hiro_

                > いわゆるクロス集計という、縦横の表で結果を表示する集計も、集計機能で十分作成可能ですし、一般的に必要とされる統計は、この機能のみで十分対応できます。

                出来るのは集計フィールドでサポートされる「数値」集計で、「テキスト」集計への応用は利きません。

                 

                > 動的な多元的集計はどちらにしても、同程度のスキルを要求されるので,同じ事では無いかと思いますが。

                集計機能では不可能ですが、リレーション集計ではリレーションを増やすだけのことで、何の追加スキルが要求されることはありません。

                基本的リレーション機能の特性を集計に適用(応用)するだけです。

                 

                > ファイルメーカーの持っている基本的機能として、集計機能を覚えておかれる方が、今後のスキルの広がりが大きくなると思います。

                この点は全く同意、はじめから肯定です。反応したのは、応用性の点だけです。

                • 5. Re: 集計が必要な場合どのようなテーブル構造がよいか?
                  J

                  Shinさん、Hiroさん

                  レスありがとうございます。こちらからのレスが遅くなりすみません。

                  Shinさん

                  >まず、リレーションを使った集計より、集計機能を使った集計を覚えましょう。その方が、応用が数倍大きくできます。

                  確かに、集計機能を使うと簡単に集計が出来ますし、余計なリレーションやらTOを増やさなくてよいですよね。集計だけで出来ないか検討してみたいと思います。

                  意外とやっかいな点は...私だけかもしれませんが、他の人にデータを渡す時に「Excel」形式しか受け入れてもらえ無いことが多いのです。

                  例えば、集計表を作るとすると..Filemakerだけで完結するなら集計パートをつかってレイアウトを作れば済みますよね。ここで終われれば楽なんですけど...。

                  Excel形式で集計部分だけを出力することは可能なのでしょうか?可能でしたら教えていただけないでしょうか?

                  >テストテーブルだけが学籍番号

                  間違えでした。ややこしくてすみません。

                  少し誤解していたのは....

                  どこかで読んだのですが「データが入っているテーブルにはなるべくデータそのもの以外のフィールドを作らない方が良い。集計やその他の処理に必要なものは別のテーブルを作ってリレーションで解決するべし!」みたいな感じに考えていました。今後は集計等を積極的に使ってみたいと思います。

                  Hiroさん

                  Shinさんとのやり取りをみていて、結局は用途によって使い分ける必要があると感じました。とりあえず両方の方法でやってみて(勉強の為に)経験を積んでいければと思います。