powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск аналогичного дерева
23 сообщений из 23, страница 1 из 1
Поиск аналогичного дерева
    #33037365
Murat2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая вот проблема.
Есть таблица в ней хранятся списки в виде деревьев. Добавляется еще одно дерево и вот надо определить существует ли уже в этой таблице такое же дерево?
Можно ли это сделать одним запросом? Или обязательно надо строить временные таблицы?
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33037395
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дерево однозначно идентифицируется по корню.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33037415
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Murat2005надо определить существует ли уже в этой таблице такое же дерево?
А можно услышать трактовку понятия "такое же дерево"?
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33037428
Murat2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Murat2005
надо определить существует ли уже в этой таблице такое же дерево?

А можно услышать трактовку понятия "такое же дерево"?

Наверное я не правильно сформулировал.
Допустим есть такая структра
Узел1 (корень)
|
Узел 2.1
Узел 3.1
узел 4.1
Это одинь путь.
Второй
Узел1 (корень)
Узел 2.2
Узел 3.2
Узел 4.2
И для наглядности третий
Узел 1 (корень)
Узел Узел 2.2
Узел 3.2
Узел 4.3
И т.д. множество вариантов
Допутим вставляем следующую структуру
Узел 1
Узел 2.2
Узел 3.3
Узел 4.3
Вот и надо узнать есть ли уже подобная структура в таблице
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33037431
Murat2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Murat2005
надо определить существует ли уже в этой таблице такое же дерево?

А можно услышать трактовку понятия "такое же дерево"?

Наверное я не правильно сформулировал.
Допустим есть такая структра
Узел1 (корень)
|
Узел 2.1
|
Узел 3.1
|
узел 4.1

Это одна структура.
Второй
Узел1 (корень)
|
Узел 2.2
|
Узел 3.2
|
Узел 4.2

И для наглядности третья
Узел 1 (корень)
|
Узел Узел 2.2
|
Узел 3.2
|
Узел 4.3

И т.д. множество вариантов
Допутим вставляем следующую структуру
Узел 1
|
Узел 2.2
|
Узел 3.3
|
Узел 4.3
Вот и надо узнать есть ли уже подобная структура в таблице.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33037474
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не то Вы говорите. Покажите несколько записей.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33037504
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Murat2005Допустим есть такая структра
Т.е, как я понял, надо проверять сочетание подузлов по структуре и количеству вхождения на уникальность? Можно конечно, почему нет. Но не одним запросом, а ручками и с гемороем неслабым.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33037829
Murat2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нарисовал структуру (в файле).
Допустим вставляем 1---> 2.2 ---> 3.4 то такая структура есть (помечена красным).
Если вставляем 1--->2.2 ---> 3.1 то такой нет. Значит ее надо создать. Создать это ерунда. А как определить есть ли она с наименьшими затратами?
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33037856
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь как Вы это храните (структуру)?
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33037858
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Murat2005Допустим вставляем 1---> 2.2 ---> 3.4 то такая структура есть (помечена красным).
И сразу вопрос. С точки зрения теории точно такой структуры нет в приведенном рисунке. У имеющегося древа там еще один "листик" есть. Значит надо искать даже по части дерева?
Нехилая задачка вырисовывается.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038133
Murat2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Значит надо искать даже по части дерева?
В том и дело.
авторТеперь как Вы это храните (структуру)?
Храним пока не как.
Разрабатываем как это хранить и как доставать.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038155
Murat2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И деревьев (т.е. корней) много
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038179
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Murat2005В том и дело.
А это правильно? Занеся в БД Запорожец с прицепом нельзя внести просто Запорожец? Странно как-то. А наоборот можно? Сначала Запор, потом Запор с прицепом.

Как вариант можно попробовать делать так. Выводить коды из веток дерева в строку и искать по подстроке.

PS:Какая предметная область задачи?
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038209
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структура.

Номер дерева
Уровень
Подуровень
Атрибуты

Поиск (Номер дерева + Уровень + Подуровень)
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038239
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовСтруктура.

Номер дерева
Уровень
Подуровень
Атрибуты

Поиск (Номер дерева + Уровень + Подуровень)
А если подуровней 3 и более?
ИМХО универсальнее классическое решение

ID
Parent_ID -ссылка на родителя
Всяко_разно
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038338
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду, что дерево идентифицируется номером.
Уровень может быть любой.(родитель)
Он же не весь путь вставляет, а последний новый лист.

1 1 2
1 2 3
1 3 4
....
2 1 1
2 2 1
2 2 2
2 2 3
2 3 1
...
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038403
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовЯ имел ввиду, что дерево идентифицируется номером.

Можно и так. Есть отход от нормализации, но при повышении производительности. Я тоже так делал.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038482
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормализация для начинающих концептуалистов или только для выборки.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038493
Murat2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серега Murat2005В том и дело.
А это правильно? Занеся в БД Запорожец с прицепом нельзя внести просто Запорожец? Странно как-то. А наоборот можно? Сначала Запор, потом Запор с прицепом.

Как вариант можно попробовать делать так. Выводить коды из веток дерева в строку и искать по подстроке.

Можно и запор отдельно без прицепа только это уже другая структура.

Я вот как думаю это сделать.
Создать отдельные таблицы для каждего уровня что то похожее на это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE TABLE [dbo].[level1] (
	[id] [uniqueidentifier] NOT NULL ,
	[name] [char] ( 250 ) NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[level2] (
	[id] [uniqueidentifier] NOT NULL ,
	[name] [char] ( 250 ) NOT NULL ,
	[parentid] [uniqueidentifier] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[level3] (
	[id] [uniqueidentifier] NOT NULL ,
	[name] [char] ( 250 ) NOT NULL ,
	[parentid] [uniqueidentifier] NOT NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[level4] (
	[id] [uniqueidentifier] NOT NULL ,
	[name] [char] ( 250 ) NOT NULL ,
	[parentid] [uniqueidentifier] NOT NULL 
) ON [PRIMARY]
GO
т.е в строке каждого узла делать ссылку на id родителя и выбирать динамическим запросом похожим на этот (найти 1-->2.3-->3.4-->4.1):

Код: plaintext
1.
2.
3.
4.
5.
6.
select level1.name
from level4,level2,level3,level1
where ((level1.id=level2.parentid)and(level1.name='1'))and
      ((level2.id=level3.parentid)and(level2.name='2.3'))and
      ((level3.id=level4.parentid)and(level3.name='3.4'))and
      (level4.name='4.1'); 
если найдутся записи то значит такая структура есть если нет то нет.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038548
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Murat2005Я вот как думаю это сделать.
А если уровней станет больше? Штук 15-20? А если потребуется ввести 3 записи на 2 уровне и 5 записей на 3 уровне? Или такое в принципе невозможно? Что будет в NAME полях? Такие же цифры или произвольный текст (там у тебя по 250 символов)? Это ж надо уникальность поддерживать для уровня. Да и сравнивать по наименованию как то не того, ИМХО.

ЗЫ: что все таки за предметная облать?
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038586
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не дерево, а декоративный кустик.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038597
Murat2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серега Murat2005
ЗЫ: что все таки за предметная облать?
Путь пользователя по страницам сайта. Где зашел. Как пошел и где вышел.
name - названия страниц.
По поводу уровней сделать 100 :) всеравно нижние уровни в размерах почти не будут расти.
...
Рейтинг: 0 / 0
Поиск аналогичного дерева
    #33038762
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Murat2005Путь пользователя по страницам сайта. Где зашел. Как пошел и где вышел.
Я в этом деле не понимаю, но задача странная какая то, ИМХО.
Т.е. пишется только при выходе? И только уникальный путь? А смысл в этом какой? Не лучше ли просто в лог последовательно писать?

Murat2005По поводу уровней сделать 100 :) всеравно нижние уровни в размерах почти не будут расти.
Ну сделай. И запрос динамически создай. Кто мешает?
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск аналогичного дерева
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]