powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / иерархия дерева (страны города)
25 сообщений из 34, страница 1 из 2
иерархия дерева (страны города)
    #35796903
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, скажите что думаете!!!

Есть таблица, допустим "ОБЪЯВЛЕНИЯ", одно объявление может принадлежать разным городам и странам. Т.е. связь с "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.

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

Кто что скажет?
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797439
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может диапазона для детей-то и не хватить... [hint]одно дело - Москва, другое дело - Урюпинск[/hint]
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797476
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorychможет диапазона для детей-то и не хватить... одно дело - Москва, другое дело - Урюпинск

Вы хотите сказать что Урюпинск может иметь больше единиц детей чем Москва?

Получается что на каждую сущность для детей отводится по 1000 ячеек.
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797515
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще я хотел сказать обратное (про москву и урюпинск если), но суть вы уловили правильно. что случится, если потребуется создать 1001-го ребёнка? ну и вы уверены, что в России всего 1000 городов... и т.д.
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797571
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorychвообще я хотел сказать обратное (про москву и урюпинск если), но суть вы уловили правильно. что случится, если потребуется создать 1001-го ребёнка? ну и вы уверены, что в России всего 1000 городов... и т.д.


Согласен.

Что ещё можете сказать на счёт такого подхода?
Стоит ли так заморачиваться?
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797578
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
anydasaegorychвообще я хотел сказать обратное (про москву и урюпинск если), но суть вы уловили правильно. что случится, если потребуется создать 1001-го ребёнка? ну и вы уверены, что в России всего 1000 городов... и т.д.


Согласен.

Что ещё можете сказать на счёт такого подхода?
Стоит ли так заморачиваться?

Хотя не согласен, в Стране есть возможность хранить 1 000 000 городов или 1 000 областей у каждой из которых по 1 000 городов.

Вряд ли где то не хватит разряда
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797653
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anydasa[quot egorych]Что ещё можете сказать на счёт такого подхода?
Стоит ли так заморачиваться?

тынц
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797700
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
proposed amendmentanydasa[quot egorych]Что ещё можете сказать на счёт такого подхода?
Стоит ли так заморачиваться?

тынц

proposed amendment, спасибо за ссылку, не догадался что это называется "интервальное дерево".
как думаешь, в данной задаче этот метод подойдёт выгоден?
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797724
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
открой КЛАДР и посмотри
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797785
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
proposed amendmentоткрой КЛАДР и посмотриТо ж я думаю, что то это мне напоминает. Поубивал бы авторов КЛАДРА... :) Шучу, конечно. Но для современных СУБД я бы выбрал обычные деревья.
авторИтак имея число, оно является левой границей поиска, мы должны вычислить правую границу, что не так сложно, и получим диапазон всех детей.

Кто что скажет?Скажу. Проблема будет такая же, как и в КЛАДРЕ. Для краткости: оптимизатор не может использовать индексы для предикатов типа LIKE '%001%'. Увы. В КЛАДРЕ коды в виде строки, а Вы хотите использовать числа, но сути не меняет. ИМХО, Вы слишком "заряжены" на один тип запросов, забывая об остальных.

Конкретный пример. Попробуйте составить запрос, выборки всех объявлений, сделанных в городах областного подчинения. ;)
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797816
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LКонкретный пример. Попробуйте составить запрос, выборки всех объявлений, сделанных в городах областного подчинения. ;)
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797832
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anydasaSenya_LКонкретный пример. Попробуйте составить запрос, выборки всех объявлений, сделанных в городах областного подчинения. ;)В смысле?
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797839
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_L Проблема будет такая же, как и в КЛАДРЕ. Для краткости: оптимизатор не может использовать индексы для предикатов типа LIKE '%001%'. Увы. В КЛАДРЕ коды в виде строки, а Вы хотите использовать числа, но сути не меняет.


Почему, по моему это совсем разные вещи. Например

Код: plaintext
SELECT * FROM locations WHERE id like '%001%';
или
Код: plaintext
SELECT * FROM locations WHERE id BETWEEN  1100000  AND get_right_key( 1100000 )

где get_right_key() функция которое просто вычисляет правый ключ.

Senya_L
Конкретный пример. Попробуйте составить запрос, выборки всех объявлений, сделанных в городах областного подчинения. ;)

:)
Интересно, а при какой структуре это будет легко?
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797845
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LВ смысле?

Запал Ctrl на буке, и нажал Enter, что и привело к отправке сообщения, сорри
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797855
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anydasaили
Код: plaintext
SELECT * FROM locations WHERE id BETWEEN  1100000  AND get_right_key( 1100000 )
Ну и все, называется, приплыли. Вычисляемое выражение и индекс не может быть использован. table scan со всеми вытекающими.
anydasa:)
Интересно, а при какой структуре это будет легко?Нормальное древо + CTE
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797882
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LВычисляемое выражение и индекс не может быть использован. table scan со всеми вытекающими.

Простите за возможно глупый вопрос, а это правило для всех СУБД?

Senya_LНормальное древо + CTE
Использую PostgreSQL, там такого ещё нет.
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797893
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anydasaSenya_LВычисляемое выражение и индекс не может быть использован. table scan со всеми вытекающими.

Простите за возможно глупый вопрос, а это правило для всех СУБД?Для краткости - да.

anydasaSenya_LНормальное древо + CTE
Использую PostgreSQL, там такого ещё нет.Жаль. Используйте Firebird (из бесплатных), начиная с версии 2.1.
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797912
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_L Используйте Firebird (из бесплатных), начиная с версии 2.1.

Я только на Postres перешёл :).
Да и потом в следующей версии обещают эту фичу прикрутить.

Вобщем, думаю пока буду использовать это .
Спасибо за отзыв.
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35797929
Сергей из Самары
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор топика только что изобрел ОКАТО. Правда, в ОКАТО нет кода страны, но кто мешает его добавить? Рекомендую отыскать в инете справочник ОКАТО и посмотреть степени его детализации для регионов, городов и районов города.

Коды стран, кстати, тоже выдумывать не надо, есть международные коды.

И еще, каждый разряд никто не мешает записать в свое поле, по которым можно построить составной ключ. Либо же тригерами собирать из них единый уникальный ID и записывать в свое поле. Ну или наоборот, вводишь ID, а тригера разносят значения по отдельным колонкам
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35798440
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей из СамарыИ еще, каждый разряд никто не мешает записать в свое поле, по которым можно построить составной ключ. Либо же тригерами собирать из них единый уникальный ID и записывать в свое поле. Ну или наоборот, вводишь ID, а тригера разносят значения по отдельным колонкам

Хорошая идея, Сергей! Нужно обдумать. Ложить по типам, кода в разные ячейки. И работать с таблицей легко будет, и код будет самоописывающим. Можно ещё ввести всякие правила, например:

Сталица страны имеет код вида *** *** 001 *** и тп.
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35798761
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anydasaСталица страны имеет код вида *** *** 001 *** и тп.

угу... начинается колхоз...
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35798797
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
proposed amendmentугу... начинается колхоз...

Грубо!
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35798823
Сергей из Самары
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anydasaСергей из СамарыИ еще, каждый разряд никто не мешает записать в свое поле, по которым можно построить составной ключ. Либо же тригерами собирать из них единый уникальный ID и записывать в свое поле. Ну или наоборот, вводишь ID, а тригера разносят значения по отдельным колонкам

Хорошая идея, Сергей! Нужно обдумать. Ложить по типам, кода в разные ячейки. И работать с таблицей легко будет, и код будет самоописывающим. Можно ещё ввести всякие правила, например:

Сталица страны имеет код вида *** *** 001 *** и тп.
И справочник можно по каждому типу построить. Страны с кодами, регионы с кодами и т.п.. Щелкаешь, выбираешь страну, регион, город и т.п.

А вот про столицу не понял. И главное зачем? Столицу можно и по-другому отмечать, а такая нумерация будет выбиваться из общей логики.
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35798850
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей из Самары
И справочник можно по каждому типу построить. Страны с кодами, регионы с кодами и т.п.. Щелкаешь, выбираешь страну, регион, город и т.п.
Сергей из Самары

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


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

А зачем, только из-за городов вводить новое поле? Если можно описать так?
И почему это назвали колхозом я тоже не понял:)
...
Рейтинг: 0 / 0
иерархия дерева (страны города)
    #35798852
anydasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей из Самары
И справочник можно по каждому типу построить. Страны с кодами, регионы с кодами и т.п.. Щелкаешь, выбираешь страну, регион, город и т.п.

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



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

А зачем, только из-за городов вводить новое поле? Если можно описать так?
И почему это назвали колхозом я тоже не понял:)[/quot]
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / иерархия дерева (страны города)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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