![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
現在、会員がログインしてブログ管理できる(記事を作成・編集できるシステム)を考えています。
そこでデータベース設計について質問があります。
一般的には、
・ユーザー情報に関するテーブル
・ブログ記事に関するテーブル
この2つを以下のような感じで設計すると思うのですが↓
■usersテーブル
・id
・ユーザー名
・パスワード
■articleテーブル
・id
・user_id(記事投稿者のid)
・contents(ブログタイトル、ブログ本文)
・created
・modified
私は、この2つを1つのテーブルですべてまとめて管理することを考えているのですが、
何かデメリットはあるのでしょうか?↓
■usersテーブル(このテーブル1つですべてまとめて管理)
・id
・ユーザー名
・パスワード
・contents(ブログタイトル|ブログ本文|記事投稿日|記事編集日)
・created
・modified
ちなみにブログ記事は、区切り文字で分けながらcontentsにどんどん詰め込んでいき(updateする)、
取り出すときは区切り文字をexplodeしていく形を考えています。
実際にはもっと項目が多くなるのですが、1ユーザーの情報をすべて1つのテーブルで管理することで個人的に非常にわかりやすい、さらに単純なのでこちらのほうが速度も速いのではないかと思っているのですが、良くないのでしょうか?(あまり見かけないので)
どなたか教えていただけると幸いです。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
こんにちは。
デメリットしか思い浮かびません。
あまり見掛けないというか、基本的にこのような設計にはしません。
特定の記事を消すときはどうするか。
特定の月だけを表示するときどうするか。
区切り文字を利用することで本文中の文字に制限がかかる。
別のテーブルにすれば
特定の日付でレコードの削除が可能。
表示対象がSQLだけで出来る。(たとえば月指定とか)
記事のソートも可能。
ロジックでやろうと思えばいくらでも出来るかもしれませんが、ロジック側のメンテ、作成工数を考えると到底採用できません。
たとえば2014年5月のデータを削除とする場合1テーブルではどのように消す想定でしょうか。
テーブルの項目は単純になりますが、1レコードあたりの情報量が増えますし、データベースの利点をまったく生かせない設計となります。
ご回答いただきありがとうございます。
>特定の記事を消すときはどうするか。
>特定の月だけを表示するときどうするか。
>区切り文字を利用することで本文中の文字に制限がかかる。
これらはすべて、
記事no|投稿月|記事タイトル|記事本文|投稿日|更新日||(1件目)
記事no|投稿月|記事タイトル|記事本文|投稿日|更新日||(2件目)
のように区切り文字を含めて保存し、表示や削除処理はexplodeとifでやっていこうと考えていましたが、おっしゃるとおりです。逆に複雑になってしまい、データベースの利点が活かせていないですね;
テーブルは複数に分けて管理していきたいと思います。
この度はわかりやすくご助言いただきありがとうございました。
No.2
- 回答日時:
1つのレコードに投稿した記事のデータが全て入ると言うことは、ある人が100件記事を投稿していた場合、そのうち1件の記事を取り出したいだけでも100件分のデータを取り出して、その中から1件分の記事を探さなければいけなくなり、余分なデータをDBから取り出すことになるので時間が掛かる事になると思います。
また、記事を検索する場合には、DBの検索でAさんの記事に探しているキーワードを含んでいる記事がある事が分かっても、何件目の記事にあるかまではDBの検索で見つけられなくなるので、DBからデータを取り出した後に、プログラムで再度検索をして記事を特定しなければいけなくなり、無駄な処理が発生することになります。
ご回答ありがとうございます。
おっしゃるとおりですね。
逆に時間がかかり、無駄な処理が発生してしまうことがよくわかりました。
テーブルは複数にわけて考えていきたいと思います。
この度はわかりやすくご回答いただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- MySQL MySQLのテーブル作成で 自信がありません。 2 2022/08/28 05:35
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- その他(データベース) accessについて 2 2022/05/31 16:58
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Oracle SQL update方法 2 2022/06/22 14:07
- WordPress(ワードプレス) Wordpressの記事URLを自由に決めたい 3 2022/06/02 12:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
csvをDBへ読み込んだら、NULLが...
-
Accessへ日付をINSERT
-
MySQLでデータベースにデータin...
-
ランダム文字列をDBにINSERT
-
変数にNULLを代入したい
-
phpでmysqlを使ってデータベー...
-
実行時エラー3131 FROM 句の構...
-
Pro*Cの構文エラー
-
PHPで[]の使い方について
-
アポストロフィを含む文字列の追加
-
テキストボックスに入れた内容...
-
子プロセス終了で閉じてしまうm...
-
検索結果($_POST)が2ページ目...
-
insert1つの処理でもトランザ...
-
PHP+mysqlでSQL文に文字数制限...
-
mysql_queryで日本語文字列が文...
-
VBAをつかってクエリの情報を抽...
-
【初歩】配列の格納データ数だ...
-
phpのエラーについてです
-
SQL文が実行できません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
変数にNULLを代入したい
-
csvをDBへ読み込んだら、NULLが...
-
ヒアドキュメントでSQLを書く事...
-
カラムにデータがあるかないか...
-
出勤表の作り方
-
phpでテーブルを作る際変数によ...
-
OracleからAccessへのインポート
-
どちらが高速ですか?
-
エクセルをMysqlに格納
-
PHPでmySQLのテーブルを作成したい
-
MDB2エラーが対応出来ません。
-
SQLで返り値が空とでる
-
PHPでいいね機能を作りたいので...
-
データをDBからひっぱってき...
-
SQL Serverからのvarchar型のデ...
-
where文について
-
PEAR Pagerを利用してデータの...
-
PHPでフォームからデータDBに書...
-
日またぎの計算
おすすめ情報