2012-03-15 26 views
1

私はソーシャルネットワークをベースにしています。私はPHPでサイトを構築しており、MySQLデータベースを使用してユーザーデータを格納したいと考えています。私はデータベース/テーブルを作成できます(私はphpMyAdminを使用します) 私は何枚のテーブルが必要で、どのようなものが私のWebアプリケーションにとってより実用的であるかはわかりません。テーブルがたくさんあるのは賢明でしょうか?たとえば、USERS表。列名USER_ID、EMAIL、PASSWORD、LAST_LOGINと、各ユーザーのアカウント設定を保持するUSER_SETTINGSという名前の表と、「ステータス更新」に関連付けられた名前と値を持つPOSTSという別の表があります。それとも、1つのテーブルにすべてを持つことは賢いですか?ベストプラクティスは何ですか?MySQLデータベーステーブルの構造化

+0

http://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/およびhttp://goo.gl/m6KSX –

+0

構造を保存してくださいきれいに分離された。つまり、おそらく多くのテーブルを持つことになります。 – Alp

答えて

3

「すべてを1つのテーブルに保存」しないでください。たぶん "多くのテーブル"に終わるでしょうが、それは悪いと思う - 基本的に、論理的な使用法に基づいてデータを分割するべきです。

たとえば、DIDによってユーザーテーブルに投稿が保持されているとしたら、どうすればよいのですか?彼らが新しい投稿をするとどうなりますか?別のフィールドを追加しますか? (悪い) - 別の項目をフィールドに追加し、文字(悪い)などで区切ります。それを行う唯一の本当の方法は、別のテーブルを用意することです。 は、ユーザーと同じテーブルに投稿を保管しないでください。

「プロファイルデータ」(またはそれを呼びたいもの)に関する限り、私はそれを別々にしておきたい - 一部の人々は、それを好みのところでユーザーテーブルに置いておきたい。私は現在だけでなく、ソーシャルネットワーキングサイトを構築しています

//users table 
id, 
email, 
password, 
last_login, 
//... 

//profiles table 
id, 
user_id, 
profile, 
age, 
gender, 
//... 

//posts table 
id, 
user_id, 
data, 
created (datetime), 
modified (datetime) 
3

:あなたのケースでは

は、私はこのようなものをお勧めしたいです。 をすべて1つのテーブルに保存しないでください。実際には私は言っている限り、あなたはできません大量の問題に直面することなくすべてを単一のテーブルに保ちます。

ユーザーは、パスワードを隠しユーザーIDジャンクションを持つ別のテーブルに保管したいと考えています。検証と出力のためにデータの整合性をどのように設定するかによって、プロファイルデータ自体は、ユーザーテーブルに接続されたテーブルを含む場合があります。

また、私はすべての投稿を別々のテーブルに保管します。これは純粋に将来のユーザーIDに基づいてクエリを実行し、投稿の数に制限したり、表示しているものに適した投稿に制限したりすることができます。簡単に言えば、usersテーブルにそれらを持つことは、あなたが書いたものであると言っているようなものです。

関連する問題