Добавить еще один столбец, FriendNumber
и ограничение внешнего ключа в справочную таблицу с ровно 3 строками:
CREATE TABLE Three
( friendNumber TINYINT NOT NULL
, PRIMARY KEY (friendNumber)
) ;
INSERT INTO Three(friendNumber)
VALUES
(1), (2), (3) ;
CREATE TABLE BFFs
( userID INT NOT NULL
, friendID INT NOT NULL
, friendNumber TINYINT NOT NULL
, PRIMARY KEY (userID, friendID)
, UNIQUE (userID, friendNumber)
, FOREIGN KEY userID
REFERENCES Person(userID)
, FOREIGN KEY friendID
REFERENCES Person(userID)
, FOREIGN KEY friendNumber --- this ensures that a user can have
REFERENCES Three(friendNumber) --- max of 3 friends
) ;
Тогда вы можете добавить:
INSERT INTO BFFs
(userID, friendID, friendNumber)
VALUES
(3286, 1212, 1) ,
(3286, 4545, 2) ,
(3286, 7878, 3) ;
или, как предлагает @gbn, примерно так (столбец заполняется автоматически):
INSERT INTO BFFs
(userID, friendID, friendNumber)
SELECT
3286 AS userID
, 8989 AS friendID
, COALESCE(
( SELECT MIN(Three.friendNumber)
FROM Three
LEFT JOIN BFFs AS b
ON b.friendNumber = Three.friendNumber
AND b.userID = 3286
WHERE b.friendNumber IS NULL
), 4
) AS friendNumber
FROM dual