電子書籍の厳選無料作品が豊富!

お世話になります。

現在、会員がログインしてブログ管理できる(記事を作成・編集できるシステム)を考えています。
そこでデータベース設計について質問があります。

一般的には、

・ユーザー情報に関するテーブル
・ブログ記事に関するテーブル

この2つを以下のような感じで設計すると思うのですが↓

■usersテーブル
・id
・ユーザー名
・パスワード

■articleテーブル
・id
・user_id(記事投稿者のid)
・contents(ブログタイトル、ブログ本文)
・created
・modified

私は、この2つを1つのテーブルですべてまとめて管理することを考えているのですが、
何かデメリットはあるのでしょうか?↓

■usersテーブル(このテーブル1つですべてまとめて管理)
・id
・ユーザー名
・パスワード
・contents(ブログタイトル|ブログ本文|記事投稿日|記事編集日)
・created
・modified


ちなみにブログ記事は、区切り文字で分けながらcontentsにどんどん詰め込んでいき(updateする)、
取り出すときは区切り文字をexplodeしていく形を考えています。

実際にはもっと項目が多くなるのですが、1ユーザーの情報をすべて1つのテーブルで管理することで個人的に非常にわかりやすい、さらに単純なのでこちらのほうが速度も速いのではないかと思っているのですが、良くないのでしょうか?(あまり見かけないので)

どなたか教えていただけると幸いです。
よろしくお願い致します。

A 回答 (2件)

こんにちは。



デメリットしか思い浮かびません。
あまり見掛けないというか、基本的にこのような設計にはしません。


特定の記事を消すときはどうするか。
特定の月だけを表示するときどうするか。
区切り文字を利用することで本文中の文字に制限がかかる。

別のテーブルにすれば
特定の日付でレコードの削除が可能。
表示対象がSQLだけで出来る。(たとえば月指定とか)
記事のソートも可能。

ロジックでやろうと思えばいくらでも出来るかもしれませんが、ロジック側のメンテ、作成工数を考えると到底採用できません。

たとえば2014年5月のデータを削除とする場合1テーブルではどのように消す想定でしょうか。

テーブルの項目は単純になりますが、1レコードあたりの情報量が増えますし、データベースの利点をまったく生かせない設計となります。
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。

>特定の記事を消すときはどうするか。
>特定の月だけを表示するときどうするか。
>区切り文字を利用することで本文中の文字に制限がかかる。

これらはすべて、

記事no|投稿月|記事タイトル|記事本文|投稿日|更新日||(1件目)
記事no|投稿月|記事タイトル|記事本文|投稿日|更新日||(2件目)

のように区切り文字を含めて保存し、表示や削除処理はexplodeとifでやっていこうと考えていましたが、おっしゃるとおりです。逆に複雑になってしまい、データベースの利点が活かせていないですね;

テーブルは複数に分けて管理していきたいと思います。
この度はわかりやすくご助言いただきありがとうございました。

お礼日時:2014/06/13 12:25

1つのレコードに投稿した記事のデータが全て入ると言うことは、ある人が100件記事を投稿していた場合、そのうち1件の記事を取り出したいだけでも100件分のデータを取り出して、その中から1件分の記事を探さなければいけなくなり、余分なデータをDBから取り出すことになるので時間が掛かる事になると思います。



また、記事を検索する場合には、DBの検索でAさんの記事に探しているキーワードを含んでいる記事がある事が分かっても、何件目の記事にあるかまではDBの検索で見つけられなくなるので、DBからデータを取り出した後に、プログラムで再度検索をして記事を特定しなければいけなくなり、無駄な処理が発生することになります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

おっしゃるとおりですね。
逆に時間がかかり、無駄な処理が発生してしまうことがよくわかりました。

テーブルは複数にわけて考えていきたいと思います。
この度はわかりやすくご回答いただきありがとうございました。

お礼日時:2014/06/13 12:34

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