【最大10000ポイント】当たる!!質問投稿キャンペーン!

作成するアプリケーションは簡単なスケジュール管理のできるWEBアプリケーションです。
以下、作成予定のテーブルです。

<tbl_date>
id VARCHAR(50) ・・・PRIMARYKEY / not null / AUTO INCREMENT
date VARCHAR(8) ・・・not null

<tbl_schedule>
id VARCHAR(50) ・・・PRIMARYKEY 、not null 、AUTO INCREMENT
morning VARCHAR(50)
afternoon VARCHAR(50)
evening VARCHAR(50)


以下、ページ詳細です。ユーザー側と管理側に分けています。

<ユーザー側>
1ページ目
⇒はじめのページで日付を選択する。プルダウンメニューで日付を選択してsubmitボタンを押すと選択された日付がDBに登録され、次の画面に遷移する。

2ページ目
⇒登録されているスケジュールをDBから呼び出して表示する。


<管理側>
1ページ目
⇒はじめのページで日付を選択する ※ユーザー側とは別のページ

2ページ目
⇒スケジュールの編集画面。テキストフォームと登録されているスケジュールをDBから呼び出して表示する。



DB設計は初挑戦なので見当違いなところ多くあると思います...
ご指摘、アドバイス等いただけたらと思います。よろしくお願いいたします。

A 回答 (2件)

期限が明日とのことですが、具体的には何が問題なのでしょう?


テーブル設計は特に問題ないと思います。
後はクエリの飛ばし方か、CGIがわからないかでしょうか。

CGIの処理はこんな感じです。
<表示側>
1) 日付を選択してSUBMIT
2) SELECT文で日付の一致するデータがあれば持ってくる

<管理側>
1) 日付を選択してSUBMIT
2) 管理画面を表示して、各メッセージを入力させる。SELECT文で日付の一致するデータがあれば初期入力しておく。入力後、再度SUBMIT
3) 日付が存在しなければINSERT文で挿入、日付が存在すればUPDATE文で更新
4) 完了メッセージを表示
    • good
    • 0

>id VARCHAR(50) ・・・PRIMARYKEY / not null / AUTO INCREMENT


PRIMARY KEY制約は、UNIQUE制約とNOT NULL制約を持つので、NOT NULLは不要です。AUTO INCREMENTを使用する場合、データ型は数値型を指定すると思います。詳しくはDBのリファレンスでご確認ください。

>date VARCHAR(8) ・・・not null
「date」は日付型のキーワードですので使えないと思います。「due_date」に直した方がいいと思います。また、VARCHAR(8)は使用せず日付型を使用するべきです。

>以下、ページ詳細です。ユーザ側と管理側に分けています。
シングルユーザならばテーブルは単純に1つにしたほうが簡単になりますよ。
<tbl_schedule>
due_date DATE primary key
morning VARCHAR(50)
afternoon VARCHAR(50)
evening VARCHAR(50)
また、<ユーザ側>→<表示処理>、<管理側>→<編集処理>と文言を直した方がいいでしょう。


学校の課題制作かなんかだと思いますが、勉強不足を感じます。テキストを読み返す、テキストの分からないところを教師や先輩などに相談するなどして、基礎知識をしっかり身に付けた方がいいですよ。

この回答への補足

OrangeCup150さん
詳しい回答ありがとうございます。確かに勉強不足を感じました。この課題の期限が明日までなため、これが終ったあとでじっくり勉強していくつもりです。


>シングルユーザならばテーブルは単純に1つにしたほうが簡単になりますよ。
2つのテーブルを連結させることが今回の課題目的なため2つのテーブルで作成しています。
実際はtbl_dateの中身はdue_dateだけではなくてyear、month、dayの3つになる予定です。
はじめは単純に考えようと思ってシンプルな形にしました。ご回答いただいたのに説明不足でして申し訳ありません。


>また、<ユーザ側>→<表示処理>、<管理側>→<編集処理>と文言を直した方がいいでしょう。
ありがとうございます。たしかにそちらのほうがぐっとシンプルでわかりやすくなりますね!
以下にもう少しわかりやすく、詳しく書き直してみました。もしよろしければアドバイスお願いいたします。


============================================
<ユーザ側>→<表示処理>
1.ユーザー側indexページで日付を選択してサブミットボタンを押すと表示処理ページに遷移。
2.表示処理ページでは前ページで選択された日付を判断し、morning、evening、afternoonのデータが呼び出される。ユーザーは指定した日のスケジュールを確認できる。


<管理側>→<編集処理>
1.管理側indexページで日付を選択してサブミットボタンを押すと編集処理ページに遷移。

2.編集処理ページでは前ページで選択された日付を判断し、morning、evening、afternoonのデータの入ったテキストフォームが呼び出される。ユーザーは自分のスケジュールを編集できる。

3.テキストフォームを編集して登録ボタンを押すとtbl_scheduleのデータが更新される。『登録が完了されました』というテキストが表示される登録完了ページ遷移される。
==============================================


=内の形にしたいのですが自分の作成したDB設計では実現ができませんでした…。
もうあまり時間がないため回答をいただきたいのですが、2つのテーブルを連結させて実現する場合、どのようにDBを設計すればよろしいでしょうか。

また、お時間があるようでしたら日付を判別させる部分についてのアドバイスをお願いいたします。
今のところ下記の方法で考えています。
・日付を選択した時点でtbl_dateテーブルを作成して自動生成idと選択された日付の値がdue_dateに代入される

・画面遷移先でtbl_scheduleのidを参照してmorning、evening、afternoonのデータを表示させる。


※これはユーザー側indexページと管理側indexページのどちらのページに設定するべきなのか…
また、どちらかに設定した場合、設定されなかったページにはどのような設定をすればよいのか…。




どうか解決策を持っている方、是非、ご回答の程よろしくお願いいたします。

補足日時:2010/11/28 23:34
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング