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

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

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

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

5回答

2763閲覧

データベースのテーブル設計(論理設計)について

tarryscoffee

総合スコア13

MySQL

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/07/18 23:17

編集2018/07/19 12:00

いつもお世話になっております。
表題についてご指導を仰ぎたいと思っています。

現在、Laravel、Djangoどちらかを利用した【集計後に編集可、また、PDFに書き出しのできるアンケートフォーム】を作成しています。
Webアプリの勉強のため、実務で使用するわけではありませんが、データベース分野ののテーブル設計を行ったことがなく、また、周りにエンジニアの方がいないため確認するすべがなく、正しくできているかが心配です。
一応本を見ながらER図を作成してみましたが、これで良いのか、またもっとこうすべき、そもそもこれでは論理的に無謀な実装であるなど、ご指導を頂けると幸いです。

アンケートフォームの希望要件

  • アンケートは3分野に分かれており、1分野につきブラウザ1画面、また、PDF1ページに対応
  • 1分野には複数の質問項目が分かれている
  • 1分野の回答が終わったら、次のページに行き2分野目、さらに次ページで3分野目
  • 集計した各分野のアンケート内容はそれぞれのマイページで編集可能
  • PDFには各分野ごと書き出し、また全分野をまとめての書き出しに対応

ER図

イメージ説明

以上となります。
初心者であるので、どんなテーブル設計が正しいのかがわかりません。
本を見ながら正規化を進めましたが、第三者から見てご意見をいただければと思います。

それではどうぞ宜しくお願いいたします。

追記1

te2jiさん

確かに全テーブルとしては明らかに足りなかったです。大変失礼いたしました。
こちらが、ひとまずDjangoを利用した場合の全テーブルのER図になります。
イメージ説明

また、全体の動作の流れとしては下記の図のようになります。
イメージ説明

mts10806さん

ご回答いただき誠にありがとうございます。
簡易ですが、画面設計の方をしました。
ひとまず目的が勉強であるので、今回の目的のアンケートフォーム以外の機能については排除しております。

マイページ
イメージ説明

question1の回答画面(2,3も同様)
イメージ説明

question1の編集画面(2,3も同様)
イメージ説明

以上が追記1となりますが、
いまいち、効果的にご回答を頂くための要領がわからないため
もしご回答頂くための情報として的外れなことを申し上げていた場合はご容赦ください。

それではどうぞ宜しくお願いいたします。

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

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

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

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

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

m.ts10806

2018/07/18 23:21

質問編集画面タイトル横にある「初心者アイコン」をご活用ください。「初心者」と質問で書くよりも伝わりますし、質問一覧に表示されるのでわかりやすくなります。
tarryscoffee

2018/07/18 23:28

ありがとうございます!初心者マークがあることに気づきませんでした。便利ですね。
guest

回答5

0

####自己解決方法
いただいたご指導、ご提案などを考えて下記図のように作成することにしました。

イメージ説明

前回からの大きな修正点としては、

  • pdf-設問(中間テーブル)を削除
  • userテーブルのpdf_idを削除(NULL対策)

となります。
一旦これで作成をしたいと思います。

ご回答いただいた皆さま誠にありがとうございました。

投稿2018/07/19 11:57

tarryscoffee

総合スコア13

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

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

0

最初のERを見て自分ならという内容でコメントします。

設問(設問ID,ページ,問番号,問) ※プライマリ=(設問ID,ページ,問番号)
pdf-設問関連エンティテイ(PDF_ID,設問ID)

投稿2018/07/19 02:34

sazi

総合スコア25173

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

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

0

どんなテーブル設計が正しいのかがわかりません。

要件・仕様通りに動けばどのようなテーブル設計も正しいです。
もちろん空のデータが入るような仕組みでしたり、冗長な仕組みは調整する必要がありますが、「これが正解」というようなものはありません。
(要件次第であるため教科書どおりの明確な答えは存在しません)

要件が決まっているのでしたら、データ設計を先にするのではなく
画面設計をされてはどうでしょうか?
「画面=機能」と捉えることもできます。
画面を作ることで機能の洗い出しになるわけです。
機能が全て決まらないとデータも決まりません。

参考まで。

投稿2018/07/19 00:05

m.ts10806

総合スコア80850

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

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

0

ぱっと見、いろいろ足りてない。
適当なスクリプト書いて動かしてみては?
PDFの書き出しとか考えなければ、ただの投稿掲示板と変わらんし。

仕様を詰めると足りてないなぁって項目もあるので、仕様ももう少しきちんと設計したほうが良いかも。(履歴を残す残さないとか、個人特定にログインさせるとか)

投稿2018/07/18 23:42

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

冒頭の質問文の最後に追記しました。

ご指摘があったため自己解決欄に、解決方法を移動させました。

投稿2018/07/19 11:15

編集2018/07/19 11:59
tarryscoffee

総合スコア13

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

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

m.ts10806

2018/07/19 11:19

あとから同じような問題を抱えた人が見た時に必ず「ベストアンサー」を見ますよね。 となるとわざわざ質問をまたすべて見直す必要があります。 解決策が書かれていない回答を「ベストアンサー」にすべきではありません。 質問は質問です。解決した内容は回答に書いてください。
m.ts10806

2018/07/19 12:01

この回答編集して解決策入れてもらえれば良かったんですが…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問