Структура базы данных друзей

248
31 марта 2017, 23:21

Я никак не пойму как правильно структурировать базу. Подскажите. Вот у меня есть таблица

users:

+----+------+-----------+-------+---------------+
| id | name | last_name | phone | friends_phone |
+----+------+-----------+-------+---------------+
|  1 | Петр |  Петров   | 66666 |     33333     |
+----+------+-----------+-------+---------------+
|  2 | Макс |  Васильев | 33333 |     66666     |
+----+------+-----------+-------+---------------+

и friendship

+----+-------------+-------------+-------+
| id | user_one_id | user_two_id | status|
+----+-------------+-------------+-------+
|  1 |     1       |     2       |   1   |
+----+-------------+-------------+-------+

В поле status: Если 0 - ожидание, 1 - принято, 2 - отклонено

Так вот, Петр Петров отправил запрос дружбы Максу Васильеву по его номеру телефона и ID Петра вставляется в таблицу friendship и status равен 0. В свою очередь Макс принимает запрос (Проверка пойдет, сравнение с номером Петра и тем номером, что вел Макс. Если совпадают, то и его ID вставится в таблицу и статус поменяется на 1)

Вопросы:

1) В данном случае, я могу предложить дружбу только одному человеку, где веду номер друга в таблице users friends_phone, как сделать чтобы можно было расширять friends_phone?

2) Мне кажется, добавлять поле friends_phone в таблице users не правильно, но как тогда иначе? Как проверять совпадение номеров при принятии дружбы и тд?

Answer 1

Поле friends_phone в таблице users не требуется. Предлагаю такой алгоритм действий, при добавлении дружбы: Пользователь ID1 хочет подружиться с пользователем у которого телефон 5555.

  1. Если пользователь с таким телефоном в БД уже есть (пусть его ID=2) переходим к п. 3
  2. Если пользователя с таким телефоном еще нет - мы его создаем (Пусть у него окажется ID=2), т.е. в таблицу users добавляем запись с таким телефоном. При этом остальные поля оставляем пустыми. Когда пользователь с телефоном 5555 захочет зарегистрироваться мы вместо создания новой записи начнем использовать вот эту.
  3. Добавляем в таблицу friendship запись вида user_one=1, user_two=2, status=0.
  4. Пользователю с ID=2, когда он уже зарегистрирован, показываем в приглашениях к дружбе все записи с user_two=2 и status=0
READ ALSO
Как получить deadlock определённого типа?

Как получить deadlock определённого типа?

Мне нужно получить (сымитировать) deadlock определённого типа:

178
Что именно пытается сделать данный код?

Что именно пытается сделать данный код?

В логах ошибок появилось очень много строк с sql запросом - просто не сомневаюсь что пытаются навредить

266
Помогите составить SQL запрос

Помогите составить SQL запрос

Есть таблица с полями int А и int BМне нужно определить что в таблице есть записи где в одной записи A>0 и B<9

218
PropertyNotFoundException в чем может быть причина?

PropertyNotFoundException в чем может быть причина?

С помощью ManagedBean произвожу CRUD операции, при этом JSF кидает такую ошибку

270