Не был уверен, как сформулировать вопрос так плохо, если это звучит странно.
У меня есть таблица в моей базе данных под названием friendRequests
со следующими столбцами: id
, sender_id
, recipient_id
и status
. Как я могу убедиться, что никакая другая строка не дублирует значения recipient_id
и sender_id
?
Например, если у меня была строка в таблице со следующими значениями: (1, 4, 6, 0)
, как я могу убедиться, что никакая другая строка не имеет sender_id
из 4 и recipient_id
из 6 И что никакой другой строка имеет sender_id
из 6 и recipient_id
из 4?
Для тех same relations
- используйте уникальное ограничение для <sender, receiver>
.
Обратное отношение <receiver, sender>
однако, будет возможно, вызывая его разные идентификаторы для единственного ограничения ключа.
Чтобы справиться с этим (используя ограничение ключа uniqe), вам нужно добавить еще один столбец, позвольте ему называть его friendship
Там вы добавите уникальное ограничение ключа и вставьте идентификаторы пользователей, объединенные, НО ЗАКАЖИ:
Т.е. если пользователь 3
отправляет запрос друга на 10
, вы введете 3-10
в этот столбец. Если приглашение будет от 10
до 3
, вы также добавите 3-10
.
Таким образом, вы можете отслеживать, что ВОЗ инициировала дружбу (sender_column=3
, receiver-column=10
), но также гарантирует, что нет обратного приглашения (friendship=3-10
уже существует)
Так что что-то вроде
INSERT INTO friendships(sender, receiver, friendship) VALUES(3,10,"3-10");
or vice versa:
INSERT INTO friendships(sender, receiver, friendship) VALUES(10,3,"3-10");
Одна из двух ограничений позволит избежать вставки, если дружба уже запрошена. (Фактически второе ограничение было бы достаточно для любого случая, первые 2 столбца могли бы только определить активную и пассивную часть дружбы.)
Я слышу, что если пользователь A приглашает пользователя B, вы не хотите создавать новую запись для пользователя B, предлагающего использовать A.
Я не думаю, что можно обеспечить такое ограничение, за исключением, возможно, использования триггеров, которые я бы, вероятно, не рекомендовал. Я бы предложил попробовать и применить это в своем приложении.
Вы должны создать уникальный индекс в таблице.
create unique index sender_recipient
on friendRequest (sender_id, récipient_id)