|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
Нужен совет, как лучше организовать хранение информации для след. задачи Есть список торговых представителей, отвечающих каждый за свой регион - регион определяется почтовыми индексами. Сейчас этот список у меня на бумаге 111111 Петров 111112 Петров 111113 Петров 111114 Петров 111115 Иванов 111116 Иванов 111117 Петров надо будет хранить в БД (SQL Server) и организовывать поиск по индексу. Вводим "111111" получаем "Петров" Проблема в том, что индексов много - 8000, представителей 20, т.е. примерно по 400 индексов на брата и организовывать что-то вроде table1 1 Петров 2 Иванов table2 1 111111 1 111112 2 111116 не хочется, было бы проще может быть table1 1 Петров 111111-11114, 111117 2 Иванов 111115,111116 но тогда проблемы с организацией поиска Хм, задача вроде бы простая, может у кого-то есть хорошие идеи? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2003, 14:19 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
Делай "многие ко многим" через промежуточную таблицу. А вдруг будет несколько людей на один регион? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2003, 14:59 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
многие-ко-многим (как в примере 1) это понятно... меня не то беспокоит - имеет ли смысл делать связку (как в примере 1) 111111 Петров .... 111511 Петров т.е. в таблице table2 будет 400 индексов для Петрова, хотя может быть все они идут по порядку (+1) м.б. хранить границы интервала и исключения из интервала? потому что посмотри, индексов - 8000, представителей 20, т.е. примерно по 400 индексов на брата - потом же и редактировать как это дело - это веб-приложение - как в форме редактирования данных торговых представителей задавать 400 индексов? в большом поле через enter? упаришься... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2003, 17:00 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
а еще одно поле для индекса? то есть одно - начальный индекс, другое - конечный если первый < второг, значит это диапазон если первый = второму, или второй= null, то в первом единичный индекс добавится одна колонка ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2003, 21:13 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
2 Smile А если у человека несколько диапазонов. Может заведем еще табличку с диапазонами и будем их привязывать к людям ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2003, 21:44 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
в принципе, я уже так подумал, что возможно как тут и посоветовали в таблице создать дополнительные поля, для хранения границ интервала индексов. И в случае, когда проще задать 111111-111114, то min_index = 111111 max_index = 111114 тогда и искать можно было бы SELECT * FROM [Table2] WHERE myindex BETWEEN min_index AND max_index Это конечно если диапазон только один (иначе и правда придется связанную таблицу иметь для нескольких диапазонов) Вот.... а если границы задать нельзя, то тогда через разделитель в какое-то одно поле пишем все индексы, например через запятую ... а на выборку запрос SELECT * FROM [Table2] WHERE [gindex1] Like '%_1__3;%' где % - любой символ(ы) _ - обязательный любой ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2003, 23:50 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
Если есть отдельная таблица для диапазонов, то через запятую не требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2003, 00:25 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
через запятую если, потом возникнут сложности с обработкой таких записей, парсить придется и тп и потом, если таких диапазонов будет много (например, для одного пользователя 111111-111113, 111115-111117, 111119-111121 и т.д) стоит ли городить огород с диапазонами??? мож оставь все как есть?? вроде не так уж и большие таблицы получатся а что значит таблица с диапазонами? у вас по любому две таблицы будет как минимум, ну, или три если многие ко многим хоть диапазон, хоть просто индексы - число таблиц будет одинаковым ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2003, 00:54 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
А если еще потребуется помнить - кто и когда за какой регион отвечал? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2003, 01:05 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
да не... тут бы индексы сохранить, не то что историю... ;-)))) с одной стороны конечно хорошо хранить индексы "поштучно" без всяких там диапазонов, с другой стороны представьте тетю, забивающую (проверяющую) 8000 индексов друг за другом и это когда ясно видно что можно задать диапазон а если хранить диапазоны, то возникают проблемы, где их хранить, как их хранить... пока так ни чё и не решил ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2003, 02:34 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
Пусть тетя видит диапазоны, а ты их в россыпь поштучно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2003, 02:45 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
разумеется, храни индексы по-честному, 8000 - смешная цифра. другое дело, что ты можешь удобно организовать их ввод и отображение (по интервалам), сделав парочку ритуальных приседаний, за это тебе тетя спасибо скажет. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2003, 07:48 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
для SQL Server'а это конечно смешная цифра... вот посоветуй тогда как в случае хранения "по-честному" определить интервал? table1 1 Петров 2 Иванов table2 1 111111 1 111112 1 111113 1 111114 1 111115 2 111116 1 111117 1 111118 1 111119 1 111120 Как видно из примера, в интервале от 111111 до 111120 получается одно "исключение" 111116, каким образом можно быстро найти все "исключения" (или скажем по-другому, - все интервалы)? Это я спрашиваю к теме об удобном вводе и изображении... Хотя, может зря я это все... пусть тетя парится? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2003, 12:38 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
Нет, предыдущий пост, не читайте :-) Даже если удастся сделать алгоритм быстрого обнаружения интервалов без тупого перебора каждого индекса и проверки на +1 - т.е. задача визуализации данных из БД, то потом у меня возникнут проблемы с сохранением данных в БД - как же эти интервалы заданные тетей потом превратить в представление "по-честному"? Думаю, что завтра сделаю большое текстовое поле в интерфейсе (как поле где пишется ответ на этом форуме), куда можно будет через enter задавать индексы "поштучно". С разбиенем полученного текста на 400 индексов и сохранением их "по-честному" проблем не возникнет. Проблема только при первоначальном заполнении индексов может быть... потому что много значений надо вводить. Но это можно javascript какой-нибудь написать, чтобы автоматом заполняло поле при введенных границах интервала. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2003, 12:50 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
немного подумал, как бы это сделал я: 1. Имеем master-slave грид (иерархический, с "плюсиком") 2. если в мастер-гриде в строке стоит просто индекс, слева нет плюсика 3. если там стоит запись типа 11120-11250, то открываем по "+" список интервалов, редактируем (добавляем, например). Т.е. надо сделать возможность редактировать как на мастере, так и на слейве с синхронизацией. Если интервал "рвется" в подчиненных строках - то отображать его как 11120-11135, 11139-11250. 4. После нажатия кнопки Save - нормализация структуры (склеивание соседних интервалов, разнесение на строки многоинтервальных записей). 5. Усе. на мой взгляд - удобно. Да, именно, на клиентской части тупая пробежка по интервалам. Никакого мастер-слэйв на сервере. На чем клиент? Это обычно за миллисекунды происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2003, 23:59 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
2Alex1111ы >меня не то беспокоит - имеет ли смысл делать связку (как в примере 1) Я за. Ибо это УНИВЕРСАЛЬНЫЙ способ хранения. С диапазонами можно и запутаться в конец. Кроме того, в вопросе ты говоришь про "регионы", а индексы в примере - соседние почтовые отделения. Это как то не стыкуется. ИМХО регион - это город, например, или область. А у них разные 3 первые цифры. Может в эту сторону подумать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 11:04 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
Спасибо всем откликнувшимся! Клиент на ASP/ASP.NET, так что с гридами проблемки, но за идею спасибо. Насчет "регионов" - я не имел ввиду области/федеральные округа и т.п. крупные структуры - сорри за непонятки - да, действительно, индексы бывают разные даже на соседних улицах мало-мальски крупного города. Ну а хранить мне надо индексы, причем это не только РФ, но и Европа, там еще и буквы бывают :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 11:50 |
|
"Географическая" БД. Нужен совет!
|
|||
---|---|---|---|
#18+
В InterSystems Cache Ваша структура выразилась бы всего навсего в паре - тройке глобалов. Например так: Глобал1(Индекс,Дата)=ФИО1^ФИО2^ФИО3^...^ Глобал2(ФИО,Дата)=Индекс1^Индекс2^Индекс3^...^ Тогда сведения о том кто отвечает за индекс получаем одним оператором: Сведения=$G(^Глобал1(Индекс,$O(^Глобал1(Индекс,Сегодняшнее число+1 день),-1)) Для ФИО аналогично но по Глобал2 Диалоги по уточнению непоностью введенных индексов или фамилий проблемы не составляют. Объемы данных для Cache несущественные. Создать SQL-описание этих структур также не сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 12:00 |
|
|
start [/forum/topic.php?fid=32&fpage=176&tid=1546792]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 190ms |
0 / 0 |