質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

2749閲覧

データベース設計、テーブルの関連付けについて

s.1009

総合スコア38

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/03/28 04:57

編集2015/03/28 05:00

こんにちわ。
PHP初心者で、練習のために教師が更新可能な生徒向けのアンケートを作っています。
そこで、データベース設計について質問があります。

概要なのですが、
ーコンテンツをアップデート可能なのは1人しかいない
ー1年制のプログラムで4学期あり、学期毎にアンケートを行う(1学期は3ヶ月です)
ープログラムは6つあり、将来増える可能性もある
ープログラムの中にグループ(クラス)があり、2学期毎に生徒が入学してくるのでグループが増える。
ープログラムごとに教師が複数人勤めている。
ー生徒が学期毎に答えるアンケートは3つあり、学校のプログラムに対するもの、自分がうけている授業に対するもの、自分が授業を受けている教師に対するものである。(生徒がログインしたときのトップ画面に、3つのアンケートへ飛べるリンクをはる予定です。)
ーアンケートは基本的に4択と100字程度のコメントで構成されていて、教師側でアップデート可能である。
ー生徒はそれぞれ学生番号が与えられており、それを使ってアンケートページにログインできる。
また、パスワードはないものとする。

私の質問というのはデータベースのテーブルの関連付けについてです。
生徒にはそれぞれ学績番号が与えられているため、ログインした時点でどのプログラムに属するかがわかります。
ユーザー(生徒)視点のイメージとしては、ログインするとトップ画面に3つのアンケートに飛ぶことができるリンクがあり、それぞれのアンケートに答えます。
例えば、自分が授業を受けている教師に対するアンケートに答えるときは、ドロップダウンリストを3つ用意してプログラム、授業名、教師名をそれぞれ選んでからアンケートに回答するかたちをイメージしています。

そのため、データベースのテーブル同士の関連付けが重要になってくると思うのですが、いくつか疑問があります。
まず、questionsテーブルはinstructors,courses,programs,answers,student_answer テーブルと関連付ける必要があると思うのですが、どのように関連付けるべきが迷っています。
というのも、questionsテーブル上は他テーブルのIdで占められており、関連付いてはいると思うのですが不自然に感じます。

それと添付した画像は、私なりに他の方からの助言などを参考にして、データベースの設計を考えてみました。
穴だらけだとは思うのですが、改善できる点など助言いただければ幸いです。

初めての練習としてはハードなものを仮定してしまったかと思っているのですが、やり始めたからには完成させたいと思っています。
駄文になってしまったのですが、回答いただければ幸いです。
よろしくお願いします。
![イメージ説明]WIDTH:600![イメージ説明]WIDTH:600

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

細かく読んでない&回答でもないのですが、
疑問点のみに絞って質問文を書かれた方が良いかと思います。

例えば、
・AとBで悩んでいるがどちらが高速に動作するか(汎用性が高いか)
・Xを実現するためにはY以外に何が必要か
といった具合です。

的確なテーブル設計の提案をするには、細かく要件を把握する必要がありますが、さすがに一問一答方式の掲示板では難易度が高いです。不明な仕様については想像するか、ご質問する必要がありますが、ここでやるには煩雑すぎるのです。
# ざっくりとした要件でも良いのですが、的確な回答が欲しい場合は、画面遷移図の作成と、画面の情報設計を行いデータ項目の列挙していただきたかったりします。

以下は想像からの提案ですが、
最初は普通に
・ユーザー管理用のテーブル
・質問の管理テーブル
・回答用のテーブル
上記3つに絞ってシンプルなものから初められれば良いのではないですか?実力がついてくれば、DB設計の勘所も分かると思います。また最初はRDB的な使い方ではなく、カード型のDBとして使われても良いと思いますよ。慣れてきたら正規化しましょう。

投稿2015/03/28 18:40

編集2015/03/29 04:37
munyaX

総合スコア783

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問