|
|
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Народ, скажите что думаете!!! Есть таблица, допустим "ОБЪЯВЛЕНИЯ", одно объявление может принадлежать разным городам и странам. Т.е. связь с "LOCATIONS" МНОГОЕ КО МНОГИМ. Объявление может принадлежать как Стране, так и Области или Городу и тп. Огранизация дерева "LOCATIONS" использовал принцип DBTree. А теперь, для того чтоб выбрать все объявления к примеру России, нужно выбрать всех детей, а затем либо сабселектом либо джойном выбрать объявления (+ всякие фильтры + сортировка). В программе %50 всех запросов будет такого рода. Получается при выборке всегда нужно использовать 3 таблицы. А вот собственно вопрос. Может использовать схему: ID_LOCATION имеет номер до 1 000 000 000 000 (INTEGER) 000 -- районы города 000 000 -- города 000 000 000 -- области 000 000 000 000 -- страны Например Россия имеет код 1 000 000 000. Таким образом мы исключаем выборку детей, т.к. знаем что дети России это число между 1 000 000 000 и 2 000 000 000. Если Москва имеет 1 000 001 000 то дети будут числом между 1 000 002 000. Итак имея число, оно является левой границей поиска, мы должны вычислить правую границу, что не так сложно, и получим диапазон всех детей. Кто что скажет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 15:58 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
может диапазона для детей-то и не хватить... [hint]одно дело - Москва, другое дело - Урюпинск[/hint] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 18:11 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
egorychможет диапазона для детей-то и не хватить... одно дело - Москва, другое дело - Урюпинск Вы хотите сказать что Урюпинск может иметь больше единиц детей чем Москва? Получается что на каждую сущность для детей отводится по 1000 ячеек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 18:24 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
вообще я хотел сказать обратное (про москву и урюпинск если), но суть вы уловили правильно. что случится, если потребуется создать 1001-го ребёнка? ну и вы уверены, что в России всего 1000 городов... и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 18:36 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
egorychвообще я хотел сказать обратное (про москву и урюпинск если), но суть вы уловили правильно. что случится, если потребуется создать 1001-го ребёнка? ну и вы уверены, что в России всего 1000 городов... и т.д. Согласен. Что ещё можете сказать на счёт такого подхода? Стоит ли так заморачиваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 18:58 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
anydasaegorychвообще я хотел сказать обратное (про москву и урюпинск если), но суть вы уловили правильно. что случится, если потребуется создать 1001-го ребёнка? ну и вы уверены, что в России всего 1000 городов... и т.д. Согласен. Что ещё можете сказать на счёт такого подхода? Стоит ли так заморачиваться? Хотя не согласен, в Стране есть возможность хранить 1 000 000 городов или 1 000 областей у каждой из которых по 1 000 городов. Вряд ли где то не хватит разряда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 19:01 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
anydasa[quot egorych]Что ещё можете сказать на счёт такого подхода? Стоит ли так заморачиваться? тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 19:44 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
proposed amendmentanydasa[quot egorych]Что ещё можете сказать на счёт такого подхода? Стоит ли так заморачиваться? тынц proposed amendment, спасибо за ссылку, не догадался что это называется "интервальное дерево". как думаешь, в данной задаче этот метод подойдёт выгоден? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 20:11 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
открой КЛАДР и посмотри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 20:24 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
proposed amendmentоткрой КЛАДР и посмотриТо ж я думаю, что то это мне напоминает. Поубивал бы авторов КЛАДРА... :) Шучу, конечно. Но для современных СУБД я бы выбрал обычные деревья. авторИтак имея число, оно является левой границей поиска, мы должны вычислить правую границу, что не так сложно, и получим диапазон всех детей. Кто что скажет?Скажу. Проблема будет такая же, как и в КЛАДРЕ. Для краткости: оптимизатор не может использовать индексы для предикатов типа LIKE '%001%'. Увы. В КЛАДРЕ коды в виде строки, а Вы хотите использовать числа, но сути не меняет. ИМХО, Вы слишком "заряжены" на один тип запросов, забывая об остальных. Конкретный пример. Попробуйте составить запрос, выборки всех объявлений, сделанных в городах областного подчинения. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 21:29 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Senya_LКонкретный пример. Попробуйте составить запрос, выборки всех объявлений, сделанных в городах областного подчинения. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 21:58 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
anydasaSenya_LКонкретный пример. Попробуйте составить запрос, выборки всех объявлений, сделанных в городах областного подчинения. ;)В смысле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 22:15 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Senya_L Проблема будет такая же, как и в КЛАДРЕ. Для краткости: оптимизатор не может использовать индексы для предикатов типа LIKE '%001%'. Увы. В КЛАДРЕ коды в виде строки, а Вы хотите использовать числа, но сути не меняет. Почему, по моему это совсем разные вещи. Например Код: plaintext Код: plaintext где get_right_key() функция которое просто вычисляет правый ключ. Senya_L Конкретный пример. Попробуйте составить запрос, выборки всех объявлений, сделанных в городах областного подчинения. ;) :) Интересно, а при какой структуре это будет легко? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 22:26 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Senya_LВ смысле? Запал Ctrl на буке, и нажал Enter, что и привело к отправке сообщения, сорри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 22:28 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
anydasaили Код: plaintext anydasa:) Интересно, а при какой структуре это будет легко?Нормальное древо + CTE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 22:40 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Senya_LВычисляемое выражение и индекс не может быть использован. table scan со всеми вытекающими. Простите за возможно глупый вопрос, а это правило для всех СУБД? Senya_LНормальное древо + CTE Использую PostgreSQL, там такого ещё нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 22:57 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
anydasaSenya_LВычисляемое выражение и индекс не может быть использован. table scan со всеми вытекающими. Простите за возможно глупый вопрос, а это правило для всех СУБД?Для краткости - да. anydasaSenya_LНормальное древо + CTE Использую PostgreSQL, там такого ещё нет.Жаль. Используйте Firebird (из бесплатных), начиная с версии 2.1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 23:03 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Senya_L Используйте Firebird (из бесплатных), начиная с версии 2.1. Я только на Postres перешёл :). Да и потом в следующей версии обещают эту фичу прикрутить. Вобщем, думаю пока буду использовать это . Спасибо за отзыв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 23:31 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Автор топика только что изобрел ОКАТО. Правда, в ОКАТО нет кода страны, но кто мешает его добавить? Рекомендую отыскать в инете справочник ОКАТО и посмотреть степени его детализации для регионов, городов и районов города. Коды стран, кстати, тоже выдумывать не надо, есть международные коды. И еще, каждый разряд никто не мешает записать в свое поле, по которым можно построить составной ключ. Либо же тригерами собирать из них единый уникальный ID и записывать в свое поле. Ну или наоборот, вводишь ID, а тригера разносят значения по отдельным колонкам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 23:43 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Сергей из СамарыИ еще, каждый разряд никто не мешает записать в свое поле, по которым можно построить составной ключ. Либо же тригерами собирать из них единый уникальный ID и записывать в свое поле. Ну или наоборот, вводишь ID, а тригера разносят значения по отдельным колонкам Хорошая идея, Сергей! Нужно обдумать. Ложить по типам, кода в разные ячейки. И работать с таблицей легко будет, и код будет самоописывающим. Можно ещё ввести всякие правила, например: Сталица страны имеет код вида *** *** 001 *** и тп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2009, 10:58 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
anydasaСталица страны имеет код вида *** *** 001 *** и тп. угу... начинается колхоз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2009, 12:26 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
proposed amendmentугу... начинается колхоз... Грубо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2009, 12:32 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
anydasaСергей из СамарыИ еще, каждый разряд никто не мешает записать в свое поле, по которым можно построить составной ключ. Либо же тригерами собирать из них единый уникальный ID и записывать в свое поле. Ну или наоборот, вводишь ID, а тригера разносят значения по отдельным колонкам Хорошая идея, Сергей! Нужно обдумать. Ложить по типам, кода в разные ячейки. И работать с таблицей легко будет, и код будет самоописывающим. Можно ещё ввести всякие правила, например: Сталица страны имеет код вида *** *** 001 *** и тп. И справочник можно по каждому типу построить. Страны с кодами, регионы с кодами и т.п.. Щелкаешь, выбираешь страну, регион, город и т.п. А вот про столицу не понял. И главное зачем? Столицу можно и по-другому отмечать, а такая нумерация будет выбиваться из общей логики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2009, 12:38 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Сергей из Самары И справочник можно по каждому типу построить. Страны с кодами, регионы с кодами и т.п.. Щелкаешь, выбираешь страну, регион, город и т.п. Сергей из Самары Если Вы имели ввиду реальные кода, то мне кажется это создаст больше проблем. Захочется следить за этими кодами, а при изменении кода, нужно обновить код у всех детей и следовательно обновится ID у всех затронутых записях, что не очень хорошо. А вот про столицу не понял. И главное зачем? Столицу можно и по-другому отмечать, а такая нумерация будет выбиваться из общей логики. А зачем, только из-за городов вводить новое поле? Если можно описать так? И почему это назвали колхозом я тоже не понял:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2009, 12:48 |
|
||
|
иерархия дерева (страны города)
|
|||
|---|---|---|---|
|
#18+
Сергей из Самары И справочник можно по каждому типу построить. Страны с кодами, регионы с кодами и т.п.. Щелкаешь, выбираешь страну, регион, город и т.п. Если Вы имели ввиду реальные кода, то мне кажется это создаст больше проблем. Захочется следить за этими кодами, а при изменении кода, нужно обновить код у всех детей и следовательно обновится ID у всех затронутых записях, что не очень хорошо. Сергей из Самары А вот про столицу не понял. И главное зачем? Столицу можно и по-другому отмечать, а такая нумерация будет выбиваться из общей логики. А зачем, только из-за городов вводить новое поле? Если можно описать так? И почему это назвали колхозом я тоже не понял:)[/quot] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2009, 12:49 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35798440&tid=1543450]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 477ms |

| 0 / 0 |
