- ベストアンサー
MySQLの行儀のいいテーブルってどんなのですか?
独学なので、どういったものが行儀がいい、もしくは、きちんとしたテーブルの構成なのか分かりません。 とりあえず悩んでいるのが、テーブルを二つに分けるか、一つのままにするかです。 フリーのMySQLの掲示板を見ると、名前、パスワード、コメントが一つのテーブルもあります。 私は、ユーザー情報を他でも利用したいので、自作で ユーザーテーブル ID、名前、パスワード BBSテーブル ID、コメント と、したいのです。 とはいえ、書き込み時に二つのテーブルに書き込み。 表示の時は、結合してから、表示。 サーバの負荷は、テーブルが一つの時と比べて、どれくらい違うのでしょうか? 普通開発する時は、テーブルの数は意識するものなんでしょうか? 前に、「個人のHPのデーターベースでは、無茶してもOK」(かなりの意訳あり)とお許しを頂いたので、負荷の事は気にしない事にしたのですが。 テーブル一つで作成したので、作り替えるのが面倒で、okwebで現実逃避しているという事もなきにしもあらずです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
行儀という点から言えば、正規化されているテーブルということになります。 正規化は、何段階もありますが、基本的に第3正規形まで、もって行くことをお勧めします。 正規化の概念や講義をするのは、ここでは無理ですので、URLを参考にしてください。 難しそうなことが書いてありますが、要するにデータの二重管理(同じデータが複数の所に書かれている)を排除し、データ変更時の影響を最小限に抑えるということです。 挙げられている例でしたら、2つのテーブルに分けるべきです。 分けないと、同一のユーザーの名前や、パスワードが複数の行に書かれていることになります。
その他の回答 (2)
- foo_barYAS
- ベストアンサー率24% (71/295)
某ツリー式掲示板を真似てMySQLで作り直したときは、11カラム作りました。 単にMySQL上の管理が面倒だったため、1スクリプト=1テーブルとしただけですけど。 テーブルを別ける主な理由は「パフォーマンス」と「設計概念」によると思います。 1テーブルのほうがスッキリするのであれば、1テーブルにまとめた方がいいし、別けた方がいい概念であれば、別けた方が良い。 フリーのCMSツール等の構造を参考にしてみては。
お礼
CMSツールというのがピンと来ませんが、XOOPS2の本は図書館で借りたなー。 結局詳しくは読まなかったけど。 phpMyAdminとかもそうなのかな? これは使ってるサーバにも、ローカルにも入れてます。 かなり便利です。 とはいえ、できるだけ理解してから使ってますが。 「パフォーマンス」と「設計概念」ですか。 「設計の概念」としては、後々分けた方が絶対にいいのです。 ユーザー情報を掲示板でも、日記でも利用できれば、データの一元管理にはなるのですが、ユーザー情報なんて掲示板テーブル、日記テーブルに同じものがあっても容量的にはさほど問題はないわけですが。 むしろスクリプト的には、簡単。 こっちの利点が、素人の私には輝いて見えます。 とりあえずできた物をアップして、後でユーザー情報を分けても、、、なんて後々絶対面倒になる事を考えているうちに、お行儀のいいテーブル構成とは?にぶち当たった訳です。 okwebに書き込んだ事で、テーブルを掲示板とユーザー情報に分ける事にしました。 後々作るかどうかは分からないけど、いろいろとユーザー情報を共有させたいし。 果てしなく、感謝です。 もうしばらくあけて起きますので、テーブルはこうした方がいいよ。というのがあれば、書き込んで頂ければうれしいかな~♪ サンプルをいくつか入れてスクリプトを見ましたが、まだ、どれが効率がいい。 どれが秀逸な作り方なのかが、ぴんと来てなくって。 PerlやPHPよりは、実際動いているのを確認しにくいし。
- tak2003
- ベストアンサー率32% (174/540)
カラムの数が7つってことなのでしょうか? 今、仕事で組んでいるテーブル数は25以上で、カラム数は200を超えております。 テーブルの定義書がないと訳分かりません。 7つなら1テーブルでいいんじゃない?
お礼
どれくらい素人かというと、カラム?カラムってなんだ? 調べないと分からなかったくらい素人です。 つうか、テーブル数25の、カラム200は多すぎじゃないですか? 必要なら仕方がないけど。 逆をいえば、必要ならカラム数やテーブル数は、多くてもかまわないという事ですね。 専門家の貴重な意見として、承りました。 やはりユーザー情報を使い回したいので、別テーブルにします。 1テーブルでも、使い回せるけど分けた方が最終的な容量に関わってくるし、勉強にもなるし。 せっかく個人でMySQLをしているので、フリーのサンプルにはないものにしたいし。 結果は、半分は決めていたんですが、変えるの面倒だよー♪とモチベーションも激落でして。 書いたから、どうにか決断できました。
お礼
HPを見ました。 ふと、第三正規形まで掲示板を当てはめると、恐ろしく面倒な事になるような。 まぁ、SQLを掲示板に当てはめるのが、本流とは違う気もしますが。 とはいえ、とても参考になりました。感謝♪
補足
真っ先に考えたのが、データの重複は無駄、というものでした。 IDなら仮に半角20文字だとしても、名前とパスワードならカラムを2つに、名前も全角10文字以上確保しないといけません。 それに、それが毎回の書き込みに反映すると、雪だるま式に容量が大きくなります。 それに、後から別のテーブルを作ったとして、付け足しのように”名前”でリレーショナルを組む事もできるとは思いますが、名前は全角だし、長い名前が複数のテーブルにあるとなるとやはり無駄だと思いました。 全角の日本語でリレーショナルを組む事には、少し不安もあったし。 、、、が、負荷の問題が頭をよぎりました。 借りているのは、フリーのスペースであまり高負荷な処理はしたくありません。 今はPHPでスクリプトを作っているのですが、そこそこサーバに負担をかけているようです。(もちろんPHPの常識範囲内の処理で。) で、データも増えたので、大量のデータ処理の負荷を防ぐために、MySQLに乗り換えようと思っているのですが、負荷が増えるのでは当初のメリットが消えてしまいます。 でも、誰も負荷の事をいっていないので、とりあえずは無茶をしてもいいのかなー?と再認識しました。(w にや この辺は設計思想というとこなんでしょうね。 何はともあれ、IDの登録方法や、それを安全に掲示板等で利用する方法を考えるのが面倒だったり、しますが。 まぁ、これはこちらで解決します。 HP見てみますね。