2015-03-12 3 views
0

У меня есть требование в моем приложении, где один пользователь может отправить запрос друга другому пользователю. В качестве базы данных мы используем базу данных SQL Server. Структура таблицы такова.Как поддерживать данные запросов друзей в sqlserver

CREATE TABLE FriendStatus 
(FriendStatusId BIGINT PRIMARY KEY IDENTITY(1,1), 
FromUserId BIGINT, 
ToUserId BIGINT, 
StatusId TINYINT, 
SentTime DATETIME2, 
ResponseTime DATETIME2); 

У меня есть несколько вопросов, связанных с этим: Если пользователь А посылает запрос друга пользователю B, то запрос друг от пользователя B, чтобы пользователь А должен еще в силе? Я чувствую, что так должно быть, дайте мне знать, есть ли лучший способ справиться с этим?

Рекомендуется хранить данные пользователей в отдельной таблице, называемой таблицей друзей, когда пользователь b одобряет пользователя. Запрос друга? И как только пользователь B одобряет запрос пользователя A, в таблицу друзей должны быть вставлены две записи с col1, содержащие пользователя A и col2, содержащие пользователя B. В то же время мы также должны вставить запись с пользователем B в col1 и USer A в col2 ? Или две записи не нужны?

+4

Вы спрашиваете нас, что такое ваши бизнес-правила? –

ответ

1

Я возьму несколько примеров из Facebook, чтобы ответить.

Если пользователь A отправляет запрос другу пользователю B, то запрос друга от пользователя B к пользователю A должен быть действительным?

Нет, появляется диалоговое окно You have already recieved a Friend Request from {name}. Также с точки зрения B, ссылку на Send Friend Request на A следует изменить на Respond to friend request с соответствующим кодом.

Полезно ли хранить данные пользователей в отдельной таблице под названием friends ...?

Нет, одной записи достаточно. Кроме того, у вас может быть новый столбец для поддержания статуса status={blocked|friends|pending}

Ну, это моя идея. Вы свободны, так как приложение принадлежит вам. Думайте как пользователь тоже.

2

Полезно ли хранить данные пользователей в отдельной таблице, называемой таблицей друзей, когда пользователь b одобряет запрос пользователя?

Нет, это почти никогда не рекомендуется дублировать данные в вашей базе данных. Вы можете получить аномалии, когда одни и те же данные в двух местах имеют два разных значения. Какое значение является правильным значением?

Вот один из способов, чтобы сохранить отношения

User 
---- 
User ID 
User Name 
... 

Friend 
------ 
User ID 1 
User ID 2 
... 

В таблице другу, первичный ключ (идентификатор пользователя 1, 2 Идентификатор пользователя). У вас также будет уникальный индекс (User ID 2, User ID 1). Это зависит от вас, если вы хотите иметь одну строку или две строки для каждой связи.

Один ряд означает, что вы должны сделать два ВЫБОР с СОЮЗОМ. Один SELECT использует первичный ключ и один SELECT, используя уникальный индекс.

Два ряда означают, что вы используете SELECT с использованием первичного ключа.

У вас есть выбор одной строки/двух строк с таблицей FriendRequest.

FriendRequest 
------------- 
User ID 1 
User ID 2 
Status 
Sent Time Stamp 
Accepted Time Stamp 
... 

У вас может быть одна строка или две строки для каждого запроса. В этом случае я бы предпочел одну строку, потому что мог определить, какой пользователь инициировал запрос друга.

Смежные вопросы