[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Иерархии
HardWoman
Собственно бьюсь на оптимизацией иерархической структуры. Все стандартные методы мне знакомы.
Основной недостаток вижу в увеличении иерархии путем добавления дублирующих массивов.

Вроде как нашла способ избежать дублей. И вроде дети выбираются незатейливо /ну мне так кажется.

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

Обычно запрос на выборку/поиск по параметрам проходит сверху вниз



Спустя 4 минуты, 39 секунд (22.04.2010 - 13:14) waldicom написал(а):
Цитата (HardWoman @ 22.04.2010 - 12:09)
...Отсюда вопрос - в каком реальном случае может понадобится поиск всех родителей...

Например для раскрытия меню...

Спустя 3 минуты, 4 секунды (22.04.2010 - 13:17) HardWoman написал(а):
для раскрытия - запрос проходит сверху вниз - от родителя к ребенку.

В каком случае нужно наоборот? более одного ближайшего родителя? То есть - когда может понадобится весь родительский путь от последнего элемента иерархии?

Чет я не нахожу таких потребностей
Попробую объяснить проще.
1работа
2работа постоянная
3работа проектная
4работа удаленная
5Частичная занятость
6 Постоянная занятость

Получаются ветки
1.2.5
1.3.5
1.4.5
1.2.6
1.3.6
1.4.6

Так вот в каком случае может понадобиться найти от последних элементов всех родителей? Не просто - потому что может понадобится.

Конкретный пример, кто может привести?

Спустя 13 минут, 10 секунд (22.04.2010 - 13:30) FatCat написал(а):
Цитата (HardWoman @ 22.04.2010 - 14:09)
Но вот пока не получается извлекать всех родителей. Отсюда вопрос - в каком реальном случае может понадобится поиск всех родителей?

Сейчас как раз работаю над семантическим анализом текстов, столкнулся с подобным.
Есть таблица тем. Очевидно, что "языки программирования" - дочерняя от "язык" и "программирование".
Это одноуровневая связь. Второй уровень появляется, когда дочерняя тема становится родительской другим темам: та же "языки программирования" будет родительской темам "языки веб программирования", "языки программирования для винмобайл" и т.д.

У себя реализовал только одноуровневые связи.
Таблица тем имеет 4 поля:
  `id` int(6) NOT NULL auto_increment,
`word` varchar(63) default NULL,
`parrent_ids` text NOT NULL,
`children_ids` text NOT NULL,
PRIMARY KEY (`id`)

Родительские и дочерние айдишники пишутся через запятую, чтобы можно было сразу подставлять в запрос в конструкцию IN(...).

Отдельно таблица-словарик семантических связей, чтобы "роза" и "гвоздика" стали дочерними к "цветы", а не только по точному вхождению родительского слова в дочернее словосочетание. И конечно же, в таблице семантических связей храню "неправильные" слова, чтобы "пил" и "пью" оказались дочерними к "пить", а "аллах" не оказался дочерним к "Алла".

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

Спустя 4 минуты, 7 секунд (22.04.2010 - 13:34) FatCat написал(а):
Кстати, одноуровневых связей в этом случае вполне хватает.
По точному вхождению слова "язык", внучатый элемент "языки программирования для винмобайл" будет добавлен и в список дочерних, и наоборот.

Спустя 8 минут, 30 секунд (22.04.2010 - 13:43) HardWoman написал(а):
То, что я привела выше - это знакомая всем конструкция, я же хочу нумеровать все элементы массива каждого не используя уникальных идентификаторов. Есть связи 1.2, 1.3, 1.4

И есть номер каждой связи. И есть идентификаторы массивов.
Массив 1 может содержать три элемента, два из которых связанны с одинаковыми массивами, а третий со вторым массивом.

используя одинаковые идентификаторы - то есть определяя одни и те же связи для разных массивов мы значительно уменьшим количество связей, и накладывая связи элементов на связи массивов - выбрать детей не затруднительно.

Михаил, если я вас правильно поняла - у вас ведь тоже вхождение от родителя к ребенку?

Наоборот не используется?

Спустя 10 минут, 5 секунд (22.04.2010 - 13:53) FatCat написал(а):
Цитата (HardWoman @ 22.04.2010 - 14:17)
в каком случае может понадобиться найти от последних элементов всех родителей?

Пример из семантики, когда нужны все родители.
Например есть текст. Задача напарсить из вордстата релевантных разбавленных ключей под сейп для продвижения под "пластиковые окна в Москве".
Нам сначала потребуются все родители: "пластиковые окна" и "окна в Москве".
Затем и родители родителей: "пластиковые", "окна" и "Москва".
Затем от всех родителей понадобятся все их дети и внуки для сбора смежных тем: "стеклянные или пластиковые", "окна и двери в Москве" и т.д. ...
Так мы получим полный список тем для парсинга вордстата.

Спустя 7 минут, 33 секунды (22.04.2010 - 14:00) HardWoman написал(а):
ладно соглашусь. Но у меня стоит другая задача и для нее я не нахожу необходимости искать всех родителей.

Это рубрикатор для определения параметров объявлений.

При добавлении объявлений указываются параметры в некоторых массивах из которых сформирован путь к объявлению. Так что найти по сути можно.

Но есть и необязательные параметры в которых связь не определена.

И вот сижу и думаю - на какой фиг мне может понадобится искать всех возможных родителей объявления?, если есть промежуточные?

Спустя 7 минут, 24 секунды (22.04.2010 - 14:08) glock18 написал(а):
думаю, вполне возможная потребность - поиск возможных веток к родителям. так называемые "хлебные крошки" или "breadcrumb trails". При потребности подняться на один уровень выше, если родителей больше одного, это действие становится неоднозначным. а значит если что-то такое будет нужно, то и поиск вверх по дереву тоже потребуется.

Спустя 29 минут, 24 секунды (22.04.2010 - 14:37) HardWoman написал(а):
У хлебных крошек - а они организуются при выводе - у них уже будет идентификатор. Отправляется идентификатор и выбираются все его дети.
В чем неоднозначность?

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

Что касаемо самого объявления, то к нему и так будут приписываться все параметры которые ему определил пользователь при добавлении объявления. Пара ID массива и значение/

И именно введение нового параметра как ID массива позволит при выводе формировать уровни на лету - не записывая все связи в таблицы.

Я все пытаюсь свои 60 тематических направлений уместить в одной базе.

Спустя 35 минут, 38 секунд (22.04.2010 - 15:13) waldicom написал(а):
Цитата (HardWoman @ 22.04.2010 - 12:17)
В каком случае нужно наоборот? более одного ближайшего родителя? То есть - когда может понадобится весь родительский путь от последнего элемента иерархии?

Так я же говорю: самый простой случай - это меню.
Например есть такая иерархия: продукт->электроника->усилители->Sony->HDMI

При выборе категории у меня есть айди только последнего элемента (HDMI), в то время как в меню надо открыть все уровни (электроника, усилители, Sony). В данном случае нам надо получить всех родителей узла HDMI.

Или я не правильно понял вопрос?

Спустя 1 час, 24 минуты, 37 секунд (22.04.2010 - 16:37) HardWoman написал(а):
В том то и дело, что если допустим хочешь ты себе штучку с мультимедийным интерфейсом и еще не определился, с моделью Получаешь родители массивы, которые могут подгрузить перечень производителей и потом будешь искать дальше.

Но зачем тебе знать сами связи между элементами в массиве? Сами связи жестко не прописаны. жестко прописаны только связи массивов.

каждый массив это параметр.

Как по твоему ты будешь записывать параметры, по которым товар был добавлен в таблицу? по ветке? Допустим, да если каждый последний идентификатор уникален мы можем к каждому товару приписать только один идентификатор, по которому мы и определим к чему он относится.

Как + можно определить по одному единственному ID, остальные параметры его, вернее не параметры, а значения параметров

А теперь представь вывод для удобства пользователя, где он хочет иметь вывод параметров не в ветке, а в массиве.

По твоему. sony> мультимедиа, panasonic> мультимедиа это разные ветки и у мультимедиа в разных ветках разные идентификаторы, в противном случае мы просто не сможем определить именно ту самую уникальность значений параметров

А у тебя при выводе , опять же для удобства поиска выводятся массивы.

производители и экраны отметил пользователь несколько производителей и выбрал мультимедиа, вывод то элементов массива мультимедиа/не мультимедиа в единственном экземпляре, а по твоим уникальным параметрам в ветке - как определить, к каким родителям принадлежит твое мультимедиа? вывод то элемента мульмедиа единичный. Следовательно нужно делать ID синхронизации, между мультимедиа в разных ветках.

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

Хоть как не пляши а путь и значения определены как параметры к товару при добавлении.

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

Но при помощи ID массива можно сформировать связи между параметрами и знать какие параметры какому товару принадлежат.

Так вот. Здесь затык в пустых элементах массива, потому и не определяется полный путь, но это не значит,что не определяется путь по элементам по которому объявление добавлялось.

За то такой подход позволяет формировать связи при выводе налету

Спустя 36 минут, 3 секунды (22.04.2010 - 17:13) HardWoman написал(а):
Хотя пустому параметру тоже можно присвоить определенное значение и тогда ветка будет читаться полностью.
Нл это не решает основной проблемы, которой я пытаюсь избежать. Колосального количества записей при жестком ссылочном наследовании дублей по ветке - элемент - элемент.

Мне нужно втулить 60 тематических направлений и каждый со своими параметрами.

И одни и те же параметры могут использоваться в других тематиках.

Например массив мероприятия. Это и кастинги, и аккредитации и билеты.

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


_____________
Сложные иерархии рулят!!!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.