5

友達システム (Facebook のようなもの) を作成したいと考えています。

リレーションシップ データを MySql に保存したいのですが、どの方法がよいかわかりません。

  1. 次のように、すべての関係を 1 つのエントリとして保存するには、次のようにします。

    id | people1 | people2
    1  | john    | maria
    2  | john    | fred
    3  | maria   | fred
    

    (そこで私はこれら 3 人のすべての間の関係を宣言します)

  2. 全員の名前を保存して友達をリストするには:

    id | people | friends
    1  | fred   | mary, john
    2  | mary   | john, fred
    3  | john   | fred, mary
    

それとももっと良い方法がありますか?

4

2 に答える 2

11

何親愛ない、

友達関係を作るために必要なテーブルは1つだけです。構造は次のとおりです

id (主キー) | my_id( 整数のログに記録されたユーザー ID ) | friend_id (ログインしたユーザーから友達リクエストを受け取る別のユーザーの整数ユーザー ID)

users テーブルに 2 人のユーザーがいるように、両方のユーザーが相互に関係を築くための 2 つのエントリがあります。

id | name | age
1  | vipan | 12
2  | karan | 12

次に、エントリは

id | my_id | friend_id
 1     1        2
 2     2        1

どのような場合でも反対票を投じないでください。しかし、私は自分のサイトでこのテーブル構造を使用しています。これは joomsocial で使用されているのと同じ構造です。これが最適なテーブル構造だと思います。テーブルでコンマ区切りの値を使用しないでください。場合によっては、結合と関係で問題が発生します

投稿のこの次のリンクで 4 番号のコメントを参照してください。

コンマ区切りの値を mysql テーブルから分離する

于 2012-10-22T12:46:05.447 に答える
4

最初のものは間違いなく最高です.2番目のものは最初の正規形を尊重しません.

編集が非常に面倒になるため、同じ列に複数の値を入れないようにする必要があります

データベースの正規化に関するリンクは次のとおりですほとんどの場合、正規化とパフォーマンスの間の適切な妥協点であるため、第 3 正規形を尊重します。

また、ランディが言ったように、ID を使用する必要があるため、ID を外部キーにリンクできます。

于 2012-10-22T12:46:40.447 に答える