Is there an elegant way to store a dual relationship (i.e. user 1 and user 2 are friends)

前端 未结 5 1106
野趣味
野趣味 2020-12-16 06:01

I\'ve run into the same problem in two different pieces of work this month:

Version 1: User 1 & User 2 are friends
Version 2: Axis 1 & Axis 2 when gr         


        
5条回答
  •  孤城傲影
    2020-12-16 06:46

    There is also a way to use the 2nd approach by adding an extra constraint. Check that u1 < u2:

    CREATE TABLE User
    ( Name VARCHAR(10) NOT NULL
    , PRIMARY KEY (Name)
    ) ;
    
    CREATE TABLE MutualFriendship
    ( u1 VARCHAR(10) NOT NULL
    , u2 VARCHAR(10) NOT NULL
    , PRIMARY KEY (u1, u2)
    , FOREIGN KEY (u1) 
        REFERENCES User(Name)
    , FOREIGN KEY (u2) 
        REFERENCES User(Name)
    , CHECK (u1 < u2) 
    ) ;
    

    The rules to read, create, insert or update will have to use the (LEAST(u1,u2), GREATEST(u1,u2)).

提交回复
热议问题