テーブルの分け方を教えてください

このQ&Aのポイント
  • 大学で行った実験をデータベース化する際のテーブル分け方について教えてください。
  • 実験のタイトル、解説、実験方法、特徴、材料、加工機などの情報が文書データとして存在します。
  • 実験条件や誤差条件の値は一つの条件に何個入るかまちまちであり、実験条件名や誤差名は一度しか出てこない特徴があります。どのようにテーブルを分けるべきでしょうか?
回答を見る
  • ベストアンサー

テーブルの分け方を教えてください。

現在、大学で行った実験をデータベース化しよう としているのですがその際のテーブル分け方を 教えてください。 一つの実験を行ったとき ::::::::::::::::::::::::::::::::::: タイトル  解説  実験方法 特徴 材料 加工機 ◇実験条件 実験条件1   実験条件2    実験条件3・・・ 条件名A    条件名B     条件名C・・・ 32.1 34.5   21 65 89    20 40                ◇誤差 誤差条件1 誤差条件2・・・・  誤差名E  誤差名F 35 64   45 65 38 21 :::::::::::::::::::::::::::::::::::: 以上のデータがとれるとします。 ・タイトル 解説 実験方法 特徴 材料 加工機は文書データです。 ・実験条件1.2.3とありますが、実験によって実験条件数はまちまちです。  誤差条件にしても同様です。 ・また、実験条件名・誤差名ともに1回しか出てこないような名前ばかりです。 (ほかの実験で同じ条件は使いません)  誤差名も同様です。 ・条件の値、上の例でいうと、32.1 34.5等は一つの条件に何個入るかまちまちです。  2個だったり3個だったり4個だったりします。  誤差での値も同様です。 このような条件で沢山のデータがある場合、どのようにテーブル分けすればよいのでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tosi0000
  • ベストアンサー率28% (8/28)
回答No.2

こんにちは。 データベースの設計の場合には、運用方法やシステム寿命、開発負荷、設計者の経験などで、同じテーマに対して全く異なったデータベースが出来あがると思います。 質問の内容で疑問な部分ありますが、あえて独自に判断して、このような場合には、私であればこんなデータベースを作るだろと言う思い込みで書かせて頂きます。 まず実験をするからには、何らかの結果を求めていると思いますので、その結果がデータベースの最小の単位(レコード)となります。 文章であらわしますと以下のような内容をデータベース化してみます。 (内容が外れていましたら済みません。) (1)あるタイトルの実験を、実験条件1(実験名A)の中からデータ32.1をもちい、誤差条件は誤差条件1(誤差名E)の集合の中からデータ35を使ってテストを行い、その結果を判断する。 (2)ただし、この文章からは別の読み方もできます。 あるタイトルの実験を、複数のデータから成る実験条件1(実験名A)をもちい、誤差条件は複数のデータから成る誤差条件1(誤差名E)を使ってテストを行い、その結果を判断する。 (1)(2)では、結果に対して必要な情報が全く違ってきますので、データベースの構造も違う可能が大きいです。ここでは(1)を使って作成してみます。 材料としては大きく5テーブル+1項目に分けることが出来ます。(1対多の関連で大体は決まってきます) a:実験タイトル(タイトル) テーブル b:条件名称 テーブル c:条件データ テーブル d:誤差名称 テーブル e:誤差データ テーブル f:結果の項目 次に関連付けを作成。(キー値は全てユニークキーとします。) (a作成) 実験タイトルに付属する項目は、タイトル:解説は1対1になります。その他の実験方法・特徴・・も同じく1対1で、1レコードに項目を配置します。加工機・材料などはマスター化して、別テーブルとする可能も高いですが・・・・。 キー項目はタイトルになります。 (b作成) 実験条件に対して条件名称は1対1ですので、同じレコードに項目を配置します。 aに対してbは1対多になり、関連付けでタイトルの項目を追加します。 キーは実験条件です。(=ただし実験条件はユニークであること。) (c作成) bに対してcは1対多になりますので、実験条件を項目として追加して関連付けをします。 キーは実験条件+条件データです。(=条件データはユニークではない。この場合はデータのため不可能と思うので。) (d作成) 条件データに対して、誤差条件が複数ありますので、1対多の関係になります。 誤差条件と誤差データは1対1の関係です。 cとの関連付けを行うため、誤差条件、誤差データの項目を追加する必要があります。 キーは誤差条件。(=ただし誤差条件はユニークであること。) (e作成) 誤差条件に対して、誤差データが複数有るため、1対多の関係。 dとの関連付けをを行うため、誤差条件を追加します。 キー項目は誤差条件+誤差データ。 (f作成) eテーブルが最小の明細レコードとなるため、このデーブルに対して結果の項目を入れます。 以上で下記テーブルが出来あがります。@マークはキー項目。 a⇒@タイトル、解説、実験方法、 特徴、材料、加工機 b⇒@実験条件、条件名、タイトル c⇒@実験条件、@条件データ d⇒@誤差条件、誤差名、実験条件、条件データ e⇒@誤差条件、@誤差データ、結果の項目 これをsql(クエリー)でテーブルを関連付けて表示させると項目の並びは以下となります。 タイトル、解説、実験方法、 特徴、材料、加工機、実験条件、条件名、条件データ、誤差条件、誤差名、誤差データ、結果の項目 と言うクエリが作られます。 具体的にデータを入れた一覧は以下の様になります。(途中の項目は省略) タイトルXXX、条件A,、32.1、誤差E、35、結果=良好 タイトルXXX、条件A,、32.1、誤差E、64、結果=不良 タイトルXXX、条件A,、32.1、誤差F、45、結果=不良 タイトルXXX、条件A,、32.1、誤差F、65、結果=良好 タイトルXXX、条件A,、32.1、誤差F、38、結果=不良 タイトルXXX、条件A,、32.1、誤差F、21、結果=不良 ・・・・・ 一例としてあげて見ましたが如何でしょか? キー項目に付いては、項目内容ではなくテーブル単位に識別キーを設定する方が、使いやすいかと思います。 また、プログラムの作成能力が低い場合には、<多>の項目をテーブルにしないでレコードの項目として扱う必要が出てきます。 色々な状況があるため、決まったデータ構造は断定できないと思います。経験が大切な分野なんですよね。 長文&速記のため誤字・ミス記入の部分あるかもしれませんが、修正してお読みください。

mamaki513
質問者

お礼

詳細を教えていただきありがとうございます。 やはり経験が大切なものなんですねーー。 これを参考にしてもっと勉強してみようと思います。 ありがとうございました。

その他の回答 (2)

  • tosi0000
  • ベストアンサー率28% (8/28)
回答No.3

すみません。 間違えました。 テーブルは以下でないと出ないと思います。 a⇒@タイトル、解説、実験方法、 特徴、材料、加工機 b⇒@実験条件、条件名、タイトル c⇒@実験条件、@条件データ d⇒@誤差条件、誤差名、@実験条件、@条件データ e⇒@誤差条件、@誤差データ、@実験条件、@条件データ、結果の項目 c、eが多対多の関係になりそうですので、aとeのテーブルだけでも良いかも知れません。

noname#4564
noname#4564
回答No.1
参考URL:
http://www.google.co.jp/

関連するQ&A

  • テーブルからテーブルの移行について

    あるテーブルから違うテーブルにデータを挿入しようとしています。 データ取得はPHPで作成していますが、 DBはPostgresです。 INSERT INTO VALUEで値を入れたいのですが、 テーブルの形式が違うため、フィールド数も違います。 VALUE(,,値,,) とするとエラーになってしまいます。 フィールド名で入れるしか方法はないのでしょうか? 何かよい案がありましたら、ご教授ください。 よろしくお願いいたします。

  • Access テーブルにデータを取り込む際 下記の条件でやるには どうしたらよいでしょうか?

    テーブル名「テーブル1」で 中身が フィールド名1,値1 フィールド名2,値2 フィールド名3,値3 というデータがあったとします。 このデータを 名前,フィールド名1,フィールド名2,フィールド名3 というフィールドをもったテーブルに1レコードとして書き込んで行きたいのです。 簡単な方法あるでしょうか? 結果として 名前,フィールド名1,フィールド名2,フィールド名3 テーブル1,値1,値2,値3 というレコードになります。 次に2レコード目は また別の「テーブル2」を書き込みます。 よろしくお願いします。

  • Excel2003 PIVOTテーブル

    お世話になります。下記のようなテーブルがあります。 ITEM DATE UNIT -------------------- ABC 200610 5 DEF 200610 10 このようなデータでPIVOTテーブルを作成(行フィールドをITEM)し、その後、ITEM名に変更があったため[ABC]を[CBA]と元テーブルの値を書き換えます。そして、PIVOTテーブルにおいて「データ更新」を実施すると、画面上ではちゃんと行フィールドがCBAと変わるのですが... なぜか、フィールド名の下向き矢印をクリックすると、すでに元データにはない[ABC]も表示されてしまいます。当然、データはないので、値はゼロになるのですが... このように、元データを変更した場合に、以前の値が行フィールドや列フィールドに反映しないようにする方法はないでしょうか? 絞り込みを行う時に、不要な情報まで表示されるので、すごく扱いにくいです。 Excel97やExcel2000では、そのようなことはなかったと記憶しています。

  • Accessで、複数のテーブルからデータを繋げたい

    ■テーブル1 2011年データ 行:名前 列:年月日 201101~201112 行:商品名 値:件数 ■テーブル2 2010年データ 行:名前 列:年月日 201001~201012 行:商品名 値:件数 となっております。 列を伸ばして、201001~201112までのデータにしたいのですが クエリの組み方が不明です。 ネットでサーチはしたのですが、該当のものが出てこず、良ければ教えて下さい!

  • エクセルのピボットテーブルを使っていて・・・こんなことできますか?

    エクセルのピボットテーブルの機能では、テーブルのデータエリアは書き込みの保護がされているようですが、データエリア内のセルにフィールド項目名を加工・追加記入したり、集計データ間の比率計算式等を入力したい場合、可能でしょうか? もし可能であれば、その方法を教えて欲しいのですが・・・。

  • Excelのピボットテーブルをデータとして使いたい

    Excel(2007)で元データをピボットテーブルで加工し、その加工した表を再度データ(表)として使いたいことがよくあります。 添付画像の表1が元データで、これをピボットテーブルの表2にします。そこからコピー&ペーストして集計行を削除して、表3のようなデータを作りたいのです。この場合普通に作ると表3の黄色のセルが空白なので、上の値をコピー&ペーストしています。データが多いとこの作業がかなり面倒なので、なんとか楽をできないでしょうか? よろしくお願いします。

  • 複数のテーブルから値を取得したい

    とあるデータベース(mysql)に以下の2つのテーブルがあります。(【テーブル名】カラム名となっています) 【ブログ管理テーブル】 ブログID ブログカテゴリ ブログサイト名 ブログサイトURL  【記事管理テーブル】 記事タイトル 記事URL 記事フィード この2つのテーブルから次のような値を取り出したいと思っています。 ブログカテゴリ 記事タイトル 記事URL 記事フィード 複数のテーブルから値を取り出すには、テーブル同士を結合しないといけないということが分かり結合させてみたのですが、なぜか取り出すことができません・・・しかも、記事が重複して表示されてしまう・・・ 一体どのようなプログラムが必要でしょうか? 以上よろしくお願いします。

  • PostgreSQL、テーブル比較で片方のテーブルにないレコードのみ表

    PostgreSQL、テーブル比較で片方のテーブルにないレコードのみ表示する方法 こんばんは、お世話になっております。 タイトル通りの質問です。 以下のテーブルがあったとします。 Aテーブル No.|data1|data2 ---+-----+---- 1 |a |10 2 |b |11 3 |c |12 4 |d |13 5 |e |14 Bテーブル No.|data1|data2 ---+-----+---- 1 |a |10 2 |b |11 3 |c |12 4 |d |13 5 |e |14 1 |f |10 2つのテーブルがあり、結合後条件の条件で 『=fのような直接的な指定はしないで』 Bテーブルのdataが『f』となっているもののみ表示させたいです。 WHEREの条件に 『Aテーブル.data1 <> Bテーブル.data1』 等を記述をしましたが理想の結果は得られませんでした。 postgresのバージョンは8.2、 pgAdminのバージョンは1.6.3 です。 何か方法をご存知の方がいらっしゃいましたら回答いただきたく思います。 不足な点があれば指摘してください。補足させていただきます。 以上です、よろしくお願いします

  • Accessにてテーブルが異なるデータの引き算

    Access に異なるテーブルに収められているデータの「引き算」ほ方法をお教えください。 只今作成しているシステムは、簡単な在庫管理システムです。 今後、拡張していくこともあり得るという前提で各テーブルを作成しました。 作成したテーブルは以下のとおりです。 仕入先テーブル「仕入先ID・仕入先名・フリガナ・〒・住所1・住所2・TEL・FAX」 材料テーブル「材料ID・材料名」(単価はその時々で変わってくるのであえてここでは設定していません) 仕入テーブル「仕入ID・日付・仕入先ID・材料ID・仕入数量・単価」 払出テーブル「払出ID・日付・材料ID・払出数量」 在庫確認クエリにて以下の設定を行いました。 材料テーブルより「材料ID・材料名」 仕入テーブルより「仕入数量」 払出テーブルより「払出数量」 を設定し演算にて「在庫: Sum(Nz([仕入数量],0)-Nz([払出数量],0))」を入力しました。 データシートビューにて確認したところ、お互い発生した回数分だけ足されてしまい正確な在庫数量が表示されません。 例 ==================== 9/1 仕入数量 100 9/2 払出数量 50 9/3 仕入数量 100 9/4 払出数量 50 9/5 仕入数量 100 ==================== とした場合に、仕入数量600 払出数量300 となってしまいます。 以下は「SQLレビュー」の内容です。 SELECT 材料.材料ID, 材料.材料名, Sum(仕入.仕入数量) AS 仕入数量の合計, Sum(払出.払出数量) AS 払出数量の合計, Sum(Nz([仕入数量],0)-Nz([払出数量],0)) AS 在庫 FROM (材料 INNER JOIN 仕入 ON 材料.材料ID = 仕入.材料ID) INNER JOIN 払出 ON 材料.材料ID = 払出.材料ID GROUP BY 材料.材料ID, 材料.材料名; 解決方法をご享受くださいますようよろしくお願いいたします。

  • テーブル間の更新クエリにおいて

    Access2010で入力フォームを作成しています。 一時データとしてテーブルAを連結サブフォームとして編集します。保存ボタンをクリックするとメインのテーブルB(Aとフィールド構成は同じ)へA、Bのフィールド間で値が異なる場合、上書き保存をするという更新クエリを用意しています。 質問はテーブルAでフォーム上、オプショングループのラジオボタン(項目はテキスト型 値リストは0と1)に設定した項目が初期値のnullから入力したデータがメインのテーブルBに更新できないので困ってます。 連結フォームなので、テーブルAに値が入っており且つBと値が異なるのはデータビューで確認しています。ただ更新クエリでの選択(データビュー)に載ってこない。 この項目がテーブルBに反映されるのは予めインポートで0もしくは1が入力されていた状態から変更した場合と他の項目も合わせて値に変更があった場合のみでした。 クエリの抽出条件はテーブルA.項目<>テーブルB.項目としています。他の項目もor条件で同じ設定にしています。切り分けのため、このオプショングループの項目だけを変更した場合のクエリにしても反映はされませんでした。 考慮すべき点あればご教示ください。 よろしくお願いいたします。 どうかお助けくださいませm(__)m

専門家に質問してみよう