個人の音楽に対する嗜好情報を格納する為のデータベースのスキーマを定義するとします。
扱う項目は以下の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を超え、格納できなくなってしまいます。その度にスキーマの定義を変更したりするのはスマートなやり方ではないと思います。
このように「好きなアーティストをどこで知ったか」の選択項目が増えても対応できるようなスキーマの定義の方法を教えていただけないでしょうか。
宜しくお願いいたします。
No.3ベストアンサー
- 回答日時:
>■「個人情報」テーブル
>・個人コード
>・名前
>・住所
>・好きなアーティスト
>
>■「知ったか」テーブル
>・個人コード
>・ID
>・好きなアーティストをどこで知ったか
これでもよいかもしれませんが私だったら
■「どこで知ったか」テーブル
・個人コード
・シーケンス番号
・どこID
■「どこ」テーブル
・どこ
・どこID
として結果はSQL文として
SELECT 個人情報.名前, 個人情報.住所, 個人情報.好きなアーティスト, どこ.どこ
FROM どこ INNER JOIN (どこで知ったか INNER JOIN 個人情報 ON どこで知ったか.個人ID = 個人情報.個人ID) ON どこ.どこID = どこで知ったか.どこID;
みたいなことで如何でしょうか
お礼が遅くなってすみません。仰せのとおりで設計することにいたしました。現在この設計で開発中ですが特に大きな問題もなく、開発も順調です。
ありがとうございました。
No.2
- 回答日時:
私だったら「個人情報」と「好きなアーティスト」テーブルに分け、リレーションを取ります。
この回答への補足
リレーションをとる言うことは以下のようなことでしょか。
下記のようにテーブルを分けます、項目を定義したとします。。
■「個人情報」テーブル
・個人コード
・名前
・住所
・好きなアーティスト
■「好きなアーティストをどこで知ったか」テーブル
・個人コード
・シーケンス番号
・どこで知ったか
個人コードとシーケンス番号の2つの組み合わせで一意のキーとする。例えば個人コード「001」の山田さんが「さだまさし」を「インターネット」「ラジオ」で知った。また個人コード「002」の佐藤さんが「キロロ」を「新聞」「その他:レコード店」で知ったとしたら「好きなアーティストをどこで知ったか」テーブルは以下のようになる。
個人コード シーケンス番号 どこで知ったか
001 1 インターネット
001 2 ラジオ
002 1 新聞
002 2 レコード店
以上のようなテーブル構成で間違っておりませんでしょか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- その他(パソコン・周辺機器) 同じファイル名 上書きしないフリーソフトなどあったら教えて下さい。 仕事で大量の写真などを扱っており 3 2023/05/18 06:43
- フリーソフト 色々な形式の個人情報を後で参照しやすいようWindow10で管理したいのですが、どんな方法があるの? 1 2023/04/29 16:46
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) EXCELピボットテーブル(複数アイテム) 1 2023/04/27 12:15
- その他(メールソフト・メールサービス) Windows10付属のメール、なぜ設定が劇的に簡単になったのか? 1 2022/12/16 13:14
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PostgreSQLで外部DB内のテーブ...
-
SQLManagementStudioのフィルタ
-
SQLServerでテーブルの列数を求...
-
「マスタ」と「テーブル」の違...
-
数百万件レコードのdelete
-
ACCESS2007 フォーム 「バリア...
-
Access VBA [リモートサーバー...
-
[ BETWEEN ] vs [ >= AND <= ]
-
3つ以上のテーブルをUNIONする...
-
2つのテーブルから条件に一致...
-
SELECT時の行ロックの必要性に...
-
ACCESS 一つのフィールドに複...
-
クエリのキャンセルがいつにな...
-
ビューで引数を使いたい
-
accessテーブル作成クエリを実...
-
データの二重表示の原因
-
重複するキーから一番古い年月...
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
-
accessのロック
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PostgreSQLで外部DB内のテーブ...
-
SQLServerでテーブルの列数を求...
-
主キーの取得
-
【PostgreSQL】行の値の並びを...
-
照合順序の変更について
-
[PostgreSQL]別DBのテーブルのS...
-
SQLManagementStudioのフィルタ
-
SQLサーバーとMySQLの大きな違...
-
システムテーブルについての疑問
-
ポスグレ レコードの比較
-
PostgreSQL 7.2.8 異なるデータ...
-
「マスタ」と「テーブル」の違...
-
オラクルではできるのにSQLSERV...
-
SELECT時の行ロックの必要性に...
-
2つのテーブルから条件に一致...
-
ACCESSのSQLで、NULLかNULLでな...
-
Accessにインポートしたら並び...
-
3つ以上のテーブルをUNIONする...
-
データの二重表示の原因
-
ACCESS 一番最新の日付の金額...
おすすめ情報