2012-01-09 7 views
1

username、user_id、password、およびemailフィールドを持つuserテーブルがあります。PHP MySQLデータベースデザイン

ユーザーは更新を投稿したり、ユーザーを登録したり、友だちの人にすることができます。

ユーザーの更新プログラム、サブクライバおよびフレンドの数を格納するためにデータベースを設計する最も良い方法は何ですか?

私は3つのフィールドをユーザーテーブルに追加して、これらの3つの列の数を増やしてください。

ありがとうございました。

+2

のようなもので、ユーザーは保管しないでください得ることができますあなたのデータベースのデザインを正規化し、user_friendsテーブルを追加することを学ぶ...それから多くの制約を打つことはありません –

+0

私はそれは単にタイプミスであり、OPはuserテーブルの3つのフィールドを意味しました。 – bpgergo

+0

OPが友人かフィールドかを問わず、答えは同じです:usersテーブルに追加しないでください... normalize –

答えて

0

ユーザーメタデータを使用して別のテーブルを作成するか、新しいユーザーとして追加します。どちらの方法でも問題ありません。

0

最後の文で「友人」の代わりに「列」を入力すると仮定します。

これはその方法の1つです。

設計時にエンティティ、リレーションシップ、およびカーディナリティについて考える必要があります。各アップデートのタイムスタンプを追跡しますか?はいの場合は、それをユーザーとの1対多の関係で別の表にします。加入者や友人と同じです。答えは、問題をモデル化する方法を選択する方法によって異なります。正解または間違った答えはありませんが、トレードオフがあります。

0

リレーションとコンテンツを分離している方が読み込みが速いですが、コンテンツだけでリレーションを生成すると、結果がより正確になることがあります。したがって、それは異なります。

1

友人(user1_id、user2_id)、更新(user_id、コンテンツ)、購読(user1_id、user2_id)の3つのテーブルを作成できます。データベースが巨大であり、あなたが友人を毎回カウントしたくない場合
は、あなたがusersテーブルにフィールドを追加し、それに友人が追加されるたびに更新することができます/たぶん図が役立つだろう描画
を削除:
http://en.wikipedia.org/wiki/Entity-relationship_model

1

まず私は、何かリットル

オンザフライでのユーザー

のアップデート、subcribersや友人の数を計算するために試してみましたあなたがこのアプローチには、パフォーマンス上の問題がある場合は、IKE

select count(*) from user_updates where user_id = :uid 
select count(*) from user_subcribers where user_id = :uid 
select count(*) from user_friends where user_id = :uid 

は、その後、あなたはuserテーブルにこれらのカウントフィールドを追加することを検討することができますが、それらを維持するために注意する必要があります。

1

私はあなたの質問を理解していませんが、私はこれを行うための最良の方法は、これらの各テーブルのテーブルをuser_idフィールドとリンクすることができますと思う。

テーブル 'ユーザー':

*user_id* 
username 
password 
email 

テーブル '友達':そう同様

id 
*user_id* 
friendids 

その後、

SELECT * FROM friends WHERE user_id = '$userid' 
関連する問題