質問: ジャニーズの情報をまとめたWikiみたいなWebアプリを作っています。 ページのデータをデータベースに保存しようとしていて、現在以下のようなテーブルを考えています。 * TOP - TOPページの情報を入れています。 * profile - グループ個人のデータを入れています。 * TV - TVごとの情報を入れています * movie - 映画ごとの情報を入れています。 * radio - ラジオごとの情報を入れています。 * CM - CMごとの情報を入れています。 * magazine - 雑誌ごとの情報を入れています。 それぞれに以下のようなカラムがあります。 * artist -パラメーターで使う名前です。 * group - 画面にのせるグループ名です。 * name - 個人の名前やTVのタイトルなどを入れます。 * setumei - 内容を入れています。 このような設計でどうでしょうか? TOPページは編集させないことにし等と思うのでテーブル管理はしないことにします。 グループごとに以下のようなページがあります。 * TOPページ - グループの説明を入れます。 * profileページ - グループ個人のプロフィールを人数分入れます。 * mediaページ - グループのメンバーのTV,movie,radio,CM,magazineの情報を入れます。
回答: 面白そうなテーマでしたので、私なりに設計してみました。 ただし、これはあくまでご提示いただいた情報から推測した 「私ならこうするだろう」 というものであって、質問者様が想定されているWEBアプリに即したものかどうかは保障いたしかねます。 採用するとしても、適宜カスタマイズするか、 お近くに先輩エンジニアなどがいらっしゃれば、レビューしていただくのが良いと思います。 あと、個人的に"artists=グループ名"がどうしても納得できなかったので、 artistという言葉を(個人の)アーティスト、と言う意味で使用しています(^^; 見本 ``` table1 : テーブル1 column1 : カラム1 column2 : カラム2 ... * key1 : 複合キーなど ... table1.column1の外部キー ... table1テーブルのcolumn1カラムの外部キー ``` ジャニーズWikiアプリ テーブル設計 ``` groups : グループの情報を管理するテーブル group_id : プライマリキー group_name : グループ名 description : 説明文 artists: アーティストの情報を管理するテーブル artist_id : プライマリキー artist_name : アーティスト名 description : 説明文(生年月日・出身地などを細かく管理したければ、別途カラムを用意する) group_artist_relations : アーティストが、どのグループに所属しているかを管理するテーブル group_id : groups.group_id の外部キー artist_id : artists.artist_idの外部キー * pk_group_artist_relations : group_idとartist_idの複合プライマリキー media : テレビ・映画などの出演媒体を管理するテーブル media_id : プライマリキー title : タイトル genre : 媒体のジャンル。テレビ=1, 映画=2, ラジオ=3, ... description : 説明文 media_artist_relations : アーティストが、どの媒体に出演しているかを管理するテーブル media_id : media.media_idの外部キー artist_id : artists.artist_idの外部キー * pk_media_artist_relations : media_idとartist_idの複合プライマリキー ``` ### 補足 1. group_artist_relationsテーブルについて ジャニーズについてはよく知りませんが、一人のアーティストが複数のグループに所属することがありえると考えたため、n対mのリレーションを表現できるよう、group_artist_relationsテーブルを定義しました。 一人のアーティストは一つのグループにしか所属しないのであれば、artistsテーブルにgroup_idカラムを設けてもよいでしょう。 2. mediaテーブルについて ジャンルごとに異なる情報を管理したい場合、 (例えばTVはテレビ局と放送時間、映画は配給会社と公開日、・・・など) 私なら ``` tv_additional_info : TVの追加情報を格納するテーブル media_id : media.media_idの外部キー broadcaster : 放送局 ... movie_additional_info : 映画の追加情報を格納するテーブル media_id : media.media_idの外部キー ... ... ``` のような感じで各ジャンルの追加情報テーブルを定義しますが、、 アプリ側の実装の難易度が高くなると思われるので、 そこまでやる必要があるのか、慎重に検討することをお勧めします。 3. アプリからのデータ読み出しについて > /TOP.jsp?artist=グループ名 というURLを想定してるようですが、これはまずい設計です。 もし、グループが改名したらどうしますか? また、関ジャニ∞の"∞"をURLに含めて、アプリが正しく読み取れると確信できますか? このような場合、各レコードに不変で一意な値(IDのことです)を割り振り、それを使用して ``` /TOP.jsp?group=[group_id] ``` と、やるのがよいでしょう。 もちろん、IDは数字(最悪でも英数字)です。 4. 用語について 当回答には、質問者様がご存じない言葉が使われているかもしれません。 しかし、私は努めて一般的な用語を使用しているつもりですので、がんばって調べてみてください。