• ベストアンサー

複数チェック項目に対応したスキーマの定義方法

個人の音楽に対する嗜好情報を格納する為のデータベースのスキーマを定義するとします。 扱う項目は以下の4項目とします。 1.名前 2.住所 3.好きなアーティスト 4.好きなアーティストをどこで知ったか(複数選択:新聞、雑誌、インターネット、ラジオ、その他) 4の項目に関しては、それぞれの選択項目をチェックボックスで複数チェックできるようになっていて、「その他」をチェックした場合は、そのアーティストをどこで知ったかテキストボックスに書き込むようにします。 このような情報を以下のような定義のテーブルを作成し、格納しようとしました。 CREATE TABLE ONGAKU_INFO (   個人コード CHARACTER(4) NOT NULL ,   名前 VARCHAR(32) NOT NULL ,   住所 VARCHAR(256) NOT NULL ,   好きなアーティスト VARCHAR(32) NOT NULL ,   好きなアーティストをどこで知ったか VARCHAR(128) ); 「好きなアーティストをどこで知ったか」についてはチェックボックスで選択された項目をそれぞれ「/」でつなげてひとつのフィールドに格納し、取り出すときは「/」で分割しようというわけです。例えば「新聞」「雑誌」「インターネット」をチャックしたら「新聞/雑誌/インターネット」としてひとつのフィールドに書き込むわけです。 しかしこの方法だと「好きなアーティストをどこで知ったか」の選択項目が増えると128byteを超え、格納できなくなってしまいます。その度にスキーマの定義を変更したりするのはスマートなやり方ではないと思います。 このように「好きなアーティストをどこで知ったか」の選択項目が増えても対応できるようなスキーマの定義の方法を教えていただけないでしょうか。 宜しくお願いいたします。

noname#61135
noname#61135

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

  • ベストアンサー
noname#182251
noname#182251
回答No.3

>■「個人情報」テーブル >・個人コード >・名前 >・住所 >・好きなアーティスト > >■「知ったか」テーブル >・個人コード >・ID >・好きなアーティストをどこで知ったか これでもよいかもしれませんが私だったら ■「どこで知ったか」テーブル ・個人コード ・シーケンス番号 ・どこID ■「どこ」テーブル ・どこ ・どこID として結果はSQL文として SELECT 個人情報.名前, 個人情報.住所, 個人情報.好きなアーティスト, どこ.どこ FROM どこ INNER JOIN (どこで知ったか INNER JOIN 個人情報 ON どこで知ったか.個人ID = 個人情報.個人ID) ON どこ.どこID = どこで知ったか.どこID; みたいなことで如何でしょうか

noname#61135
質問者

お礼

お礼が遅くなってすみません。仰せのとおりで設計することにいたしました。現在この設計で開発中ですが特に大きな問題もなく、開発も順調です。 ありがとうございました。

その他の回答 (2)

noname#182251
noname#182251
回答No.2

私だったら「個人情報」と「好きなアーティスト」テーブルに分け、リレーションを取ります。

noname#61135
質問者

補足

リレーションをとる言うことは以下のようなことでしょか。 下記のようにテーブルを分けます、項目を定義したとします。。 ■「個人情報」テーブル ・個人コード ・名前 ・住所 ・好きなアーティスト ■「好きなアーティストをどこで知ったか」テーブル ・個人コード ・シーケンス番号 ・どこで知ったか 個人コードとシーケンス番号の2つの組み合わせで一意のキーとする。例えば個人コード「001」の山田さんが「さだまさし」を「インターネット」「ラジオ」で知った。また個人コード「002」の佐藤さんが「キロロ」を「新聞」「その他:レコード店」で知ったとしたら「好きなアーティストをどこで知ったか」テーブルは以下のようになる。 個人コード  シーケンス番号  どこで知ったか 001      1        インターネット 001      2        ラジオ 002      1        新聞 002      2        レコード店 以上のようなテーブル構成で間違っておりませんでしょか。

回答No.1

こんにちは。 Oracleなら、ネストした表などを使えばすっきりしますが・・・。 多分ハズシてますね・・・。 (^^ゞ

noname#61135
質問者

お礼

ご回答ありがとうございます。使用するデータベースはPostgreSQLです。情報が足りなく申し訳ございませんでした。

関連するQ&A

  • MySQLで項目の反復定義(COBOLでいうところのOCCURS)はあ

    MySQLで項目の反復定義(COBOLでいうところのOCCURS)はありますか? 今は AAA1 varchar(10) not null BBB1 int(6) not null CCC1 int(2) not null AAA2 varchar(10) not null BBB2 int(6) not null CCC2 int(2) not null  :  : AAA30 varchar(10) not null BBB30 int(6) not null CCC30 int(2) not null みたいに書いています。 XXX OCCURS 30 AAA varchar(10) not null BBB int(6) not null CCC int(2) not null のような書き方があればと思ったのですが。。 ご存知の方いらっしゃいましたら、 また他に良い方法をご存知の方いらっしゃいましたら ご教示願います。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • チェックボックスにチェックする方法

    つまらない質問で申し訳ないのですが、 何かを選択する際に使われますチェックボックスに ついてですが、 いくつものチェックボックスを 一つ一つクリックしてチェック(レ)するのではなく 全項目まとめてチェックする方法はありますでしょうか? よろしくお願いいたします。

  • チェックボックスのチェックした項目の名前を取得したいです。

    チェックボックスのチェックした項目の名前を取得したいです。 HTML+Javascript+CGIでアンケートフォームを作っています。 送信ボタンを押したときに確認画面を表示させたいのですが、チェックボックスの項目をどう扱って良いのかわかりません。 性別を選択するラジオボタンの値の取得(男をチェックしたか、女をチェックしたか)は sex = document.mailform.sex[0].checked ? document.mailform.sex[0].value : document.mailform.sex[1].value このように出来るとのことですが、チェックボックスはどうしたら良いのでしょうか? 好きな食べ物を聞くチェックボックスで、選択項目に ・リンゴ・バナナ・ミカン・イチゴ を用意し、チェックされた項目を 好きな食べ物:リンゴ イチゴ の用に出力したいと思っています。 よろしくお願いします。

  • 複数のチェックボックス項目があり、そのチェック状態によって

    複数のチェックボックス項目があり、そのチェック状態によって 処理を分岐したいのですが、スマートなjavascriptの書き方が あれば教えてください! 【例】 <input type="checkbox" name="koumokuA" value="A1" /> <input type="checkbox" name="koumokuA" value="A2" /> <input type="checkbox" name="koumokuA" value="A3" /> <input type="checkbox" name="koumokuA" value="A4" /> <input type="checkbox" name="koumokuA" value="A5" /> <input type="checkbox" name="koumokuB" value="B1" /> <input type="checkbox" name="koumokuB" value="B2" /> <input type="checkbox" name="koumokuB" value="B3" /> <input type="checkbox" name="koumokuB" value="B4" /> <input type="checkbox" name="koumokuC" value="C1" /> <input type="checkbox" name="koumokuC" value="C2" /> <input type="checkbox" name="koumokuC" value="C3" /> <input type="checkbox" name="koumokuC" value="C4" /> もし【koumokuA】のA2とA3、【koumokuB】のB1とB4が選択された場合 同項目ではor条件、他項目ではand条件で処理したいので 考え方としては、 if(koumokuA=="A2" || koumokuA=="A3"){ if(koumokuB=="B1" || koumokuB=="B4"){ 実行内容 } } こんな感じなのですが、 実際にはチェックボックスの値は配列になるのでこのスクリプトでは動かない点と 効率よく複数のチェックボックスの選択結果を判定して、スクリプトを実行する 組み方があればご教授ください。 実行結果は、データが格納された配列の中から、選択項目に対応したデータを 表示するようにしたいのです。 よろしくお願いします。

  • かねやんMySQLAdmin1.43

    WinXpでmysqlを勉強中です。 かねやんMySQLAdmin1.43を使って、Sql発行を押し下のように書き込んで実行するとエラーがでます。 CREATE TABLE hotelmember ( hotel_name varchar(40) NOT NULL, com_name varchar(40) NOT NULL, charge_name varchar(40) NOT NULL, id varchar(40) NOT NULL, pass varchar(40) NOT NULL, mail varchar(40) NOT NULL, zip varchar(40) NOT NULL, add varchar(40) NOT NULL, tel varchar(40) NOT NULL, url varchar(40) NOT NULL, memo varchar(40) NOT NULL, PRIMARY KEY ( id ) ) エラー文 You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'add varchar(40) NOT NULL,tel varchar(40) NOT NULL, そこで add varchar(40) NOT NULL, tel varchar(40) NOT NULL, url varchar(40) NOT NULL, memo varchar(40) NOT NULL, を削除するとうまくテーブルが作成されます。 なにが悪いんでしょうか?

    • ベストアンサー
    • MySQL
  • PHP・MYSQLで複数のチェックボックスを使う場合

    いつもお世話になっております。 チェックボックスの値を <input type="checkbox" value="ok" name="check[]"> として配列で渡し、ここで選択された値をforeachで回してvalueがokの場合は対応するカラムにokを挿入しています。 このやり方では、例えばチェックボックスでチェックさせたい項目が100個あった場合はチェック結果を格納するテーブルに ck1 ck2 ck3 ck4 ck5 ck6......ck99 ck100 のように100個カラムを作る必要があります。 100個作るのが面倒・・・というわけでは無く、このやり方で良いのだろうかと疑問に感じてきました。 大量のチェックボックスを処理する場合、他に良いテーブル構造や方法などありましたら教えていただけるとうれしいです。

    • ベストアンサー
    • PHP
  • 複数のチェックボックス&配列にランダムな数字

    こんにちは。PHP学習中のものですが、今回はこちらで質問させていただきます。 現在、複数のチェックボックスをワンクリックですべて選択する方法を調べています。 チェックボックスのNAMEがすべて同じ場合は、ちょっと検索すれば、すぐにサンプルスクリプトがたくさんヒットします。 複数選択可能なチェックボックスの場合も、document.form1.elements["sample_check[]"] というような記述で、チェックボックスの数がカウントできるということまでは判りました。 しかし、現在わたしが扱っているチェックボックス(下記をご参照ください)には、sampla_check[3] のように規則性のない数字が入っているのです。 (この数字を送信先で受けて、それをもとにmySQLのデータを更新するので省略できません) このような場合、どのようにしたら「チェックボックスをすべて選択」する機能を実装できるでしょうか。 本来、javascriptの入門書でも購入して、自分で学習すべき範疇のことかと思いますが、今すぐ答えが必要なので、どなたかお助けいただけないでしょうか。 <INPUT TYPE="checkbox" NAME="sample_check[3]" VALUE="TRUE"> 項目(3) <INPUT TYPE="checkbox" NAME="sample_check[7]" VALUE="TRUE"> 項目(7) <INPUT TYPE="checkbox" NAME="sample_check[12]" VALUE="TRUE"> 項目(12)

  • ACCESSで2点

    データ入力用のフォームについて質問があります。 チェックボックスを使い、複数項目を選択します。チェックボックスは全部で30くらい。選択条件は1つ~7つまでです。これをテーブルレコードにどう格納するか考えています。 レコードにはこのデータを格納するため6つ項目を確保しています。チェックボックスに入ったデータを前詰め(?)で入れていきたいのです。 もうひとつ。 チェックボックスは数値データを格納しています(ファイルを小さくするため)。これを取り出すとき、そのまま数値データではなく、1なら月とか2なら火とかみたいに違う形でフォームに表示したいです。どういう方法がありますか? 2つも質問、図々しいですが宜しくお願いします。

  • テーブル定義書(Oracle) 【IX】項目

    いままではソフト系の開発を行っていたのですが、 今度、DBまわりの業務を行うことになりテーブル設計書を作成しております。 初めてなので、社内のテーブル定義書を参照しながら作成していると 番号、列名、列ID、データ型、桁数、NULL、PKの次から【IX1】...【IX10】という項目が並んでおり Googleで調べましたがインターネットエクスチェンジの略などの基本情報は載っていましたが、 実際にテーブル設計に関係のある項目かどうかは具体的に理解することは出来ませんでした。 識者の方がいれば、テーブル設計書においてこの項目の意図することはなにかを教えていただきたいです。 以上、よろしくお願いします。

  • Excelチェックボックス応用方法

    Excel初心者で困っております… 表現が分かりにくいと思いますがどなたか教えて頂ければと思います。 ◆各項目ごとにチェックボックスがついている表を作成中です◆ 仮に入口Aの選択肢a1~a10として、a3を選択したとします。 ◆以下が質問です↓ チェックボックスが1つ以上入れば、結果Bの値がAの選択肢(a1~a10)の範囲内でa5になる。 ※チェックボックスが1つも入らなかった場合に流すメッセージも表示出来たら素晴らしいです。 よろしくお願いします!!