2014-12-05 3 views
0

Мне нужно создать схему базы данных для контактов с менеджером пользователя. Я объясняю ...Как управлять контактным отношением в базе данных

У меня есть простой Пользователь таблица с первичным ключом (с именем Id).

У меня есть Контакт стол, имеющий два внешних ключа (SenderID для пользователя, ReceiverID для пользователя), составляющий первичный ключ.

Моя проблема заключается в том, что если пользователь А отправить контакт приглашение пользователю B, мы имеем следующую запись:

Контакт (A, B)

В этом случае мы можем иметь въездную контакт (B, A), аналогичный другой записи.

Как я могу управлять этим случаем?

Благодарим за помощь.

ответ

0

Я бы создал две отдельные таблицы, одну для ожидающих запросов ContactRequests(SenderID, ReceiverID), а другую для списков контактов - Contact(user_id,contact_id).

Я бы хранить все запросы контактов в ContactRequests, как вы делали и после проверки запроса, я хотел бы создать две записи в Contact, как это: Contact(A,B)Contact(B,A) И удалить ожидающий запрос. Таким образом, вы можете легко получить список контактов пользователя независимо от того, кто отправил запрос.

Googling for "many to many relationship" также может помочь вам создать базу данных.

+0

Благодарим вас за ответ. Я буду проверять отношения многих и многих. Тем не менее, я бы хотел избежать «дублированных» записей (Contact (A, B) и Contact (B, A)), но я не знаю, возможно ли это с ограничениями базы данных или если мне нужно иметь дело с ним непосредственно в мой исходный код приложения. – Devatoria

+0

Если вы не хотите дублировать записи, вы можете иметь только одну запись для каждого контакта (A, B) или (B, A), а затем, когда вы хотите получить список контактов A или B, используйте 'WHERE user_id = xxx OR contact_id = xxx', но, возможно, такой запрос будет медленнее – Guillaume

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