- ベストアンサー
【質問】MySQLのデータベース設計について
- 会員がログインしてブログ管理できるシステムのためのMySQLのデータベース設計について質問です。
- 現在、一般的にはユーザー情報テーブルとブログ記事テーブルを別々に作成しますが、私はこれを1つのテーブルで管理することを考えています。
- 一つのテーブルですべてをまとめて管理することで、わかりやすさと処理速度の向上を図りたいのですが、デメリットはあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 デメリットしか思い浮かびません。 あまり見掛けないというか、基本的にこのような設計にはしません。 特定の記事を消すときはどうするか。 特定の月だけを表示するときどうするか。 区切り文字を利用することで本文中の文字に制限がかかる。 別のテーブルにすれば 特定の日付でレコードの削除が可能。 表示対象がSQLだけで出来る。(たとえば月指定とか) 記事のソートも可能。 ロジックでやろうと思えばいくらでも出来るかもしれませんが、ロジック側のメンテ、作成工数を考えると到底採用できません。 たとえば2014年5月のデータを削除とする場合1テーブルではどのように消す想定でしょうか。 テーブルの項目は単純になりますが、1レコードあたりの情報量が増えますし、データベースの利点をまったく生かせない設計となります。
その他の回答 (1)
- t_ohta
- ベストアンサー率38% (5238/13705)
1つのレコードに投稿した記事のデータが全て入ると言うことは、ある人が100件記事を投稿していた場合、そのうち1件の記事を取り出したいだけでも100件分のデータを取り出して、その中から1件分の記事を探さなければいけなくなり、余分なデータをDBから取り出すことになるので時間が掛かる事になると思います。 また、記事を検索する場合には、DBの検索でAさんの記事に探しているキーワードを含んでいる記事がある事が分かっても、何件目の記事にあるかまではDBの検索で見つけられなくなるので、DBからデータを取り出した後に、プログラムで再度検索をして記事を特定しなければいけなくなり、無駄な処理が発生することになります。
お礼
ご回答ありがとうございます。 おっしゃるとおりですね。 逆に時間がかかり、無駄な処理が発生してしまうことがよくわかりました。 テーブルは複数にわけて考えていきたいと思います。 この度はわかりやすくご回答いただきありがとうございました。
お礼
ご回答いただきありがとうございます。 >特定の記事を消すときはどうするか。 >特定の月だけを表示するときどうするか。 >区切り文字を利用することで本文中の文字に制限がかかる。 これらはすべて、 記事no|投稿月|記事タイトル|記事本文|投稿日|更新日||(1件目) 記事no|投稿月|記事タイトル|記事本文|投稿日|更新日||(2件目) のように区切り文字を含めて保存し、表示や削除処理はexplodeとifでやっていこうと考えていましたが、おっしゃるとおりです。逆に複雑になってしまい、データベースの利点が活かせていないですね; テーブルは複数に分けて管理していきたいと思います。 この度はわかりやすくご助言いただきありがとうございました。