sql >> データベース >  >> RDS >> Mysql

MySQLフレンズテーブル

    すべての友達がユーザーテーブルにも含まれていると仮定すると、単純な1対多の関係を定義する友達テーブルが必要になります。つまり、ユーザーテーブルをそれ自体にリンクします。だから

    User Table
    UserID int identity not null
    [other attribute fields]
    
    Friends Table
    UserIDLink1 int
    UserIDLink2 int 
    [other attribute field]
    

    UserIDLink1とUserIDLink2の両方がUsersテーブルの外部キーである場合。

    たとえば、3人のユーザーがいる場合

    1 Joe
    2 Bill
    3 Jane
    

    ジョーとジェーンは友達です。友達テーブルには1行が含まれます

    1 3
    

    上記は、AがBの友達である場合、BはAの友達であると暗黙的に想定しています。そうでない場合は、UserIDLink1とUserIDLink2の名前をUserIDとFriendIDなどに変更することをお勧めします。レコードも最大2倍になります。

    また、双方向構成(BがAのフレンドである場合、AはBのフレンド)の場合、(UserIDLink1、UserIDLink2)および(UserIDLink2、UserIDLink1)のFriendsテーブルにインデックスを設定して、アクセスが常に効率的であることを確認する必要があります。 joeの友達またはjaneの友達を検索していました(2番目のインデックスを設定しなかった場合、最初のクエリは効率的なインデックスルックアップになりますが、2番目のクエリでは全表スキャンが必要になります)。

    リンクが双方向でない場合は、Aの友達を見つける必要はありませんが、Bが友達であるかどうかも調べる必要があるため、おそらく最も必要になります。



    1. MySQLまたはMariaDBのGaleraClusterのパフォーマンスを向上させる

    2. com.mysql.jdbc.Driverを使用したAndroid+MySQL

    3. SQL Serverで「datetimeoffset」を「datetime2」に変換します(T-SQLの例)

    4. MySQL-Mac-エラー2002-ソケットを介してローカルに接続できません...