• ベストアンサー

データベース設計

データベースを使ったサイトを勉強しています。 始めにデータベースを作ろうと思って早速壁に当たりました。 必要なデータは 「ID,フラグ1,フラグ2,名前,住所,TEL,登録日,年代,趣味,メモ」。 IDは一意な番号、 フラグ1,フラグ2はYes/No、 年代は10個程度の決められた文字の中から1個、 趣味は10種類程度の決められた文字の中から複数。 このようなデータが入ったデータベースを作りたい場合、どのような構造にするのが良いのでしょうか。 アドバイス頂けたらと思います。

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

  • ベストアンサー
  • _chihiro_
  • ベストアンサー率63% (26/41)
回答No.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制約とかはお好みですね。

LINLIN74
質問者

お礼

ありがとうございます。 詳しく書いていただいて、ありがたいです。 参考にさせていただき勉強していきたいと思います。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

IDはintのauto_incrementで フラグはsetで、名前、住所、電話はvarchar 登録日はdate、年代はENUMで 趣味はテーブルを分けて管理 メモはテキスト型かなぁ・・・ 量が多いなら、テーブルわけてもいいかも

LINLIN74
質問者

お礼

ありがとうございます。 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が増えていく感じで良いのでしょうか?