- ベストアンサー
データベース設計
データベースを使ったサイトを勉強しています。 始めにデータベースを作ろうと思って早速壁に当たりました。 必要なデータは 「ID,フラグ1,フラグ2,名前,住所,TEL,登録日,年代,趣味,メモ」。 IDは一意な番号、 フラグ1,フラグ2はYes/No、 年代は10個程度の決められた文字の中から1個、 趣味は10種類程度の決められた文字の中から複数。 このようなデータが入ったデータベースを作りたい場合、どのような構造にするのが良いのでしょうか。 アドバイス頂けたらと思います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
/** * table1テーブル */ create table table1 ( id int unsigned auto_increment, flag1 bool default 0, flag2 bool default 0, name varchar(64) default '', address varchar(256) default '', telephone varchar(24) default '', age tinyint unsigned, --←ageテーブルのidが入る hobby tinyint unsigned, --←hobbyテーブルのidが入る memo text default '', regist_date date, primary key (id) ); /** * 年代テーブル */ create table age ( id int unsigned auto_increment, age varchar(32), primary key (id) ); /** * 趣味テーブル */ create table hobby ( id int unsigned auto_increment, hobby varchar(128), primary key (id) ); のように、年代と趣味テーブルの別で用意して、table1テーブルでは、ageテーブルと趣味テーブルのID(primary key)を入れるようにするかなぁ、、、。 年代と趣味カラムを文字で入れなければならないなら、varchar(xx)を使わないといけないですけど、、、。 カラムの型とかDEFAULT値とかNOTNULL制約とかはお好みですね。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
IDはintのauto_incrementで フラグはsetで、名前、住所、電話はvarchar 登録日はdate、年代はENUMで 趣味はテーブルを分けて管理 メモはテキスト型かなぁ・・・ 量が多いなら、テーブルわけてもいいかも
お礼
ありがとうございます。 table1 [ID(int),フラグ1(set),フラグ21(set),名前(varchar),住所(varchar),TEL(varchar),登録日(date),年代(NUM),趣味ID,メモ(text)] 趣味tbl [ID(int),趣味名(varchar)] という感じで良いのでしょうか? 趣味tblの[ID]にはtable1の[ID]が入るんですよね。 その場合、趣味が複数選ばれた場合、趣味tblは ID 趣味名 1 サッカー 1 野球 という風に選ばれた数だけ同IDが増えていく感じで良いのでしょうか?
お礼
ありがとうございます。 詳しく書いていただいて、ありがたいです。 参考にさせていただき勉強していきたいと思います。