Страницы

Поиск по вопросам

вторник, 23 октября 2018 г.

Древовидная структура БД SQL

Подскажите, покажите пример, как создавать таблицы древовидных структур, и как выполнять запрос к ним на добавление данных.
Допустим у нас есть таблица пользователей Table_Name_user:
|Table_Name_user| |-------| |user_id| |-------| | 0| |-------| | 1| |-------| | 2| |-------| |..и.т.д|
если мы находим какого-то пользователя по user_id, допустим "2", то мы должны узнать сколько друзей он себе добавил. Как это сделать с помощью древовидной структуры БД?
Должно получиться что у каждого user_id, есть как бы своя таблица, в которой он может добавлять или удалять друзей. ПРИМЕЧАНИЕ: своя таблица, это не значит отдельная таблица в базе, а значит какая-то подтаблица которая будет храниться в ячейке отдельного юзера.
table_friend - уникальная таблица, которая есть у каждого user_id. table_friend - не находятся отдельно в базе, они прикреплены к каждой ячейки user_id.
|Table_Name_user| |-------| |user_id| |-------| | 0|----------|table_friend|(это не отдельная таблица в базе) |-------| | 1|----------|table_friend|(это не отдельная таблица в базе) |-------| | 2|----------|table_friend|(это не отдельная таблица в базе) |-------| |..и.т.д|


Ответ

Когда друзья не пользователи. (Когда пользователи рисовать больше в лом) Таблицы пользователей и друзей связываются по некоторому ключевому полю. Естественно взять в качестве ключа связи поле Id из таблицы Users.
Users Frends +-------------+ +-------------+ | Id |<--+ | Id | | Name | +-<<| User_Id | | ... | | Name | | | | ... |
Извлечь всех друзей пользователя номер N: SELECT * FROM FRENDS WHERE User_Id = N
Извлечь пользователей вместе с их друзьями: SELECT * FFOM USERS U LEFT JOIN FRENDS F ON F.User_Id = U.Id
Добавить друга пользователю номер N: INSERT INTO FRENDS (User_Id, ...) VALUES (N, ...)
Удалить друзей: DELETE FROM FRENDS WHERE User_Id = N
И где вы тут дерево нашли. Так ветка одна.
В таблице FRENDS переписаны друзья всех всех пользователей. Но у каждой записи есть поле (User_Id), которое ссылается на пользователя, чей это друг. В запросы вставляются условия на это поле, чтобы отделить нужных друзей от чужих. Таким нехитрым способом получается как бы своя таблица друзей на пользователя. Освойте этот простой приём. Все более сложные схемы опираются на него.
Users Id Name +----+------------------+ | 1 | Серёжа | | 2 | Маша | ...
Frends Id User_Id Name - по User_Id ясно +----+---------+---------+ | 1 | 1 | Андрюша | - друг Серёжи | 2 | 1 | Марина | - подружка Серёжи | 3 | 2 | Оксана | - подружка Маши ...

Комментариев нет:

Отправить комментарий