|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
2Genady Дык вот вы такой умный - напишите структуру таблиц с ключами и запрос. Неужели это так сложно, с вашей-то начитанностью? Всего-то две таблички. Мне искренне интересно как это надо правильно организовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 13:10 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
2 SergSuper Для двух табличек я и написал т. е. в Calls присутствует RateID, а DestinationCode почему то нет. Чиста канкретна схему данных я написать не могу, для этого анализ ПО нужен, уж пусть Victor этим и займется. Выпады по поводу книг в общем то смешны Я искренне советовал, поскольку по части теории у Виктора заметные пробелы, кстати совсем недавно я сам такой был, могу сказать, что знание теории мне совсем не мешает ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 13:23 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
>>Для того, чтобы организовать отношение Parent Child, нужно из парента передать в чилд первичный ключ в виде внешнего ключа, т. е. поля составляющие первичный ключ Rates должны присутствовать Calls, таким образом будет организовано однозначное соответствие. Так я, блин, это и хочу сделать! Попытаюсь уточнить формулировку задачи подругому: В таблицу Calls переодически заносятся данные поступающие от внешной системы в поля DialedNumber,Duration,RateID. Задача: как создать производную таблицу calls1 или какие поля необходимо добавить в существующую таблицу Calls для того чтобы наиболее быстрым способом производить описаный в моем первом сообщении расчет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 13:28 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
>>Для двух табличек я и написал т. е. в Calls присутствует RateID, а DestinationCode почему то нет. Так его потому и нет, что это часть решаемой задачи - необходимо по номеру определить какай DestinationCode ему соответсвует и по найденному DestinationCode определить тариф. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 13:34 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
>Так его потому и нет, что это часть решаемой задачи - необходимо по номеру определить какай DestinationCode ему соответсвует и >по найденному DestinationCode определить тариф. А откуда он у Вас берется в Rates? Я бы посоветовал все же нормализовать Rates, полагаю все же join-ы будут быстрее, чам ваша посимвольная обработка. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 13:50 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
Уфф устал прям. Виктор, если хотите пришлите мне по e-mail вашу ER-диаграмму, можно в копиях экрана, только чтоб не мегабайты весила, и краткое описание работы, я посмотрю и скажу что на мой взгляд не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 13:59 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
Могу в ErWin 3.52 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 14:04 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
2 Genady "Чиста канкретна схему данных я написать не могу, для этого анализ ПО нужен, уж пусть Victor этим и займется." Ну и как тут не вспомнить фразу: "Кто умеет тот делает, кто не умеет тот учит". Я привел всего 2 таблицы из двух полей каждая - какой еще нужен анализ ПО? К сожалению данная задача не попадает под чистые, красивые схемы, описанные в учебниках, хоть их до дыр читай. У меня была похожая проблемма - расчет банковских нормативов. Там складывается куча счетов, причем задаётся обычно несколько первых цифр счета. Я тоже долго думал как это лучше сделать - ничего красивого не получается. На первый взгляд вроде и есть первичный и вторичный ключи, но приглядишься - вроде их и нет. И надо либо их как-то генерить и работать по теории, либо оставить теории в сторону и думать самому. Обычно второе предпочтительней. Поэтому совет Вам - не судите с наскока, не разобравшись. Если критикуете чего-то - покажите как сделать лучше. С приветом Сергей PS. Надеюсь я ничего обидного не написал? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 14:07 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
>>Я бы посоветовал все же нормализовать Rates, полагаю все же join-ы будут быстрее, чам ваша посимвольная обработка. Так посоветуйте! Как? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 14:20 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
Сергей, интересно было бы услышать, как вы решили вашу проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 14:22 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
2 Victor Присылайте, у меня power designer, но он по моему умеет открывать ErWin диагграмы 2 SergSuper >Ну и как тут не вспомнить фразу: "Кто умеет тот делает, кто не умеет тот учит". Спорить не буду, может быть так и есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 14:26 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
2 Victor "интересно было бы услышать, как вы решили вашу проблему." А как я в самом начале написал - записывал счета так, чтобы их можно было сравнить like-ом. Но у меня было несколько сложнее, допустим все счета 322...., но кроме тех у которых 5-я цифра 1 (от балды пример). Ну и приходилось писать: 322_[^1]%. Но вести такую таблицу - никому не пожелаю. Допустим чтобы написать: все счета 3..... кроме 32219..., надо вставить 3[^2]% 32[^2]% 322[^1]% 3221[^9]% Однажды написав, разобраться в этом очень тяжело, счетов много, отсортировать по смыслы никак ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 16:31 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
Да уж, это будет похуже моего случая. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 10:35 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
2 Victor К сожалению я не смог открыть Вашу диаграмму но я немного посоображал и хочу задать Вам несколько вопросов, ответив на которые Вы несколько проясните картину, во всяком случае для меня. Тогда возможно на диаграмму смотреть и не прийдется Вот эти вопросы: 1. Вам не кажется, что таблицы Calls и Rates должны быть связаны? 2. В таблице Calls вы храните вычисляемое поле Cost, с чем это связано? 3. Какое назначение поля RateId? Как я понимаю это идентификатор, идентификатор чего? 4. Каким образом заносятся значения поля DestinationCode? Удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 11:16 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
Самый интересный первый вопрос. Что бы понять, попробуйте связать для начала две таблицы: 1. русский алфавит 2. все слова русского языка Вроде же они должны быть связаны и понятно как. Ну и что по этому поводу в умных книжках пишут? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 12:22 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
>Вроде же они должны быть связаны и понятно как. >Ну и что по этому поводу в умных книжках пишут? Я подожду ответы Victorа, потом отвечу и Вам, ОК? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 12:32 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
Генадий, а ERX тоже не открывается? Как я сказал, это просто пример, поэтому такая структура. 1.Вам не кажется, что таблицы Calls и Rates должны быть связаны? Они и будут связаны когда в результате расчета станет известно какой тариф применять, т.е. UPDATE будет вида set cost=,rateid=,destinationcode= 2. В таблице Calls вы храните вычисляемое поле Cost, с чем это связано? Это связано с тем, что COST вычисляется довольно сложным способом учитывая всевозможные варианты округления длительности звонка и период действия тарифного плана (как я сказал приведенный пример весьма упрощенный). Проводить эти вычисления каждый раз когда необходимо сформировать отчет по таблице calls не имеет смысла с точки зрения произоводительности. 3. Какое назначение поля RateId? Как я понимаю это идентификатор, идентификатор чего? Это идентификатор тарифного плана. Если более подробно: имеем таблицы RateHeader - Список тарифных планов, RateId,RateName 1,Любимый 2,Серебрянный CustomerAccounts - список номеров клиентов account,rateid 7660222,1 7660333,1 7770333,2 ну и соответственно Calls -звонки сделанные клиентами (Account,DialedNumber,Duration,-известны RateId,Cost,DestinationCode) -вычисляются Rates - детали тарифных планов. соответственоо в UPDATE добавится FROM rates,customerservice where rates.rateid=customerAccounts.rateid and customeraccounts.account=calls.account вместо calls.rateid=rates.rateid как в примере. 4. Каким образом заносятся значения поля DestinationCode? Есть справочник кодов - из него выбираются. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 14:24 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
>Генадий, >а ERX тоже не открывается? Ко мне приходил только ER1, если Вы посылали ERX сегодня, тогда я смогу посмотреть его только вечером дома, на работе у меня нет такой возможности. >Они и будут связаны когда в результате расчета станет известно какой тариф применять, т.е. UPDATE будет вида >set cost=,rateid=,destinationcode= То есть Вы хотите установить связь программно. А почему Вас не устраивает связь средствами СУБД? >Это связано с тем, что COST вычисляется довольно сложным способом учитывая всевозможные варианты округления длительности >звонка и период действия тарифного плана (как я сказал приведенный пример весьма упрощенный). Проводить эти вычисления каждый >раз когда необходимо сформировать отчет по таблице calls не имеет смысла с точки зрения произоводительности. Понятно, спасибо. >Это идентификатор тарифного плана. Если более подробно: Понятно >ну и соответственно >Calls -звонки сделанные клиентами >(Account,DialedNumber,Duration,-известны >RateId,Cost,DestinationCode) -вычисляются На каком этапе вычисляется DestinationCode? И на каком этапе проводится обновление Calls, я имею в виду поле Cost? >Rates - детали тарифных планов. Насколько я понимаю Rates это тоже справочник? >Есть справочник кодов - из него выбираются. Дайте пожалйста структуру справочника. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 14:55 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
2 SergSuper >Вроде же они должны быть связаны и понятно как. >Ну и что по этому поводу в умных книжках пишут? Как и обещал отвечаю: Должны быть связаны и связаны все же несколько разные понятия. Понятно кому? И интересно как? По поводу русского алфавита и слов, просто связать конечно нельзя, но я как то не понял аналогии, в телефонном номере что, может быть произвольное количество кодов, раставленых в произвольном порядке? Впрочем, можно связать и алфавит со словами, если рассмотреть что у слова кроме атрибута - буква есть атрибут - позиция этой буквы в слове. В общем как то я не очень понимаю смысл Ваших наездов, что Вам собственно не понравилось? То что я посоветовал почитать книги, дабы лучше ориентироваться хотя бы в терминологии? Откровенно говоря Ваша кусючесть меня озадачивает ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 11:56 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
"Должны быть связаны и связаны все же несколько разные понятия" Собственно я это и пытался высказать. И это тоже Ваши слова: ", т. е. поля составляющие первичный ключ Rates должны присутствовать Calls, таким образом будет организовано однозначное соответствие." А "кусючесть"... Ну не люблю я когда человек критикует, советует книжки почитать, а сам предложить ничего не может Может перебрал немного, извиняюсь С приветом Сергей ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 12:47 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
>И это тоже Ваши слова: >", т. е. поля составляющие первичный ключ Rates должны присутствовать Calls, таким образом будет организовано однозначное >соответствие." Дык в том же и дело, что почти сразу посоветовал связать эти таблици, и пытался разными словами объяснить почему, вот только Виктор почему то никак не мог понять что я ему советую, хотя выше приведенная фраза по моему однозначна Вот я отсылал его к книгам, чтоб прочитал, да разобрался Что касается обид, так я и не обижался просто Ваша некоторая злобность меня удивила не мог понять из-за чего ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 13:16 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
Генадий, не совсем понял, что вы имеете в виду под: "То есть Вы хотите установить связь программно. А почему Вас не устраивает связь средствами СУБД?" Далее, "На каком этапе вычисляется DestinationCode? И на каком этапе проводится обновление Calls, я имею в виду поле Cost?" В процессе UPDATE. Справочник DestinationCode - список всех возможных кодов Destinationcode (PK) - собственно сам код Description - описание Например 44 - United Kingdom 441 - London 4412 - London Cellular ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 14:22 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
IMHO, обсуждение зашло в тупик и стало походить на толчение воды в ступе. Попытаюсь несколько освежить обсуждение (если получится ). Мне приходилось решать аналогичную проблему, причем как раз с кодами междугородних префиксов. Просто тот, кто придумывал коды, понятия не имеет о реляционной алгебре, и в голове у него каша, поэтому не нужно сгоряча пинать программиста, который эту кашу пытается расхлебать. Вариант SergSuper весьма оригинален, и лично мне понравился. Другое дело, что юзерам подобные записи могут быть непривычны и малопонятны: 3[^2]% 32[^2]% 322[^1]% 3221[^9]% 32219% Я вижу два варианта структуры данных, которые могут оказаться более удобными с точки зрения восприятия простого обывателя. Вариант 1. Табличный с приоритетами. Prefix Priority 32219 1 3221 2 322 3 32 4 3 5 Фактически здесь написано то же самое, что в примере SergSuper. После префикса подразумевается символ маски %, но юзер его не видит, и в обморок не падает. Ему достаточно понимать, что в конкретном телефонном номере из данных префиксов будет использован тот, у которого префикс совпадает с первой частью набранного телефонного номера, а значение Priority минимально. Вариант 2. Древовидная структура префикса. 3 / \ 2 прочие / \ 2 прочие / \ 1 прочие / \ 9 прочие Это дерево отражает тот же самый пример. Фраза "прочие" подменяет собой символ маски %. Пример не совсем удачный, поскольку дерево вышло очень похожим на бинарное. На самом деле следует использовать B-дерево (один узел может иметь более двух дочерних элементов). На самом деле оба примера реализуют примерно один и тот же подход. В варианте с деревом в каждом узле нужно хранить информацию о текущей глубине дерева, и для однозначного соответствия следует искать префикс с наибольшей глубиной дерева *аналогично приоритету в примере 1). В общем, это скорее варианты визаульной реализии одного и того же подхода. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 14:57 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
>не совсем понял, что вы имеете в виду под: >"То есть Вы хотите установить связь программно. А почему Вас не устраивает связь средствами СУБД?" Программно это то, что Вы показывали ранее, т. е. в момент обновления Calls вы с помошью цикла определяете соответствие двух таблиц, проводите обновление и все, связь теряется, предположите теперь, что Вам нужно выдать отчет по клиенту с данными о том по каким кодам он звонил и например, сумму оплаты по каждому коду, Вы что снова будуте цикл использовать?? Я не знаю динамики Вашей системы, но косвенно по Вашим описаниям предполагаю, что обновление поля Cost происходит пакетно, т. е. обновляются множество записей уже после того как данные по звонкам занесены. Естественно цикл работает на каждой записи и это не повышет быстродействия системы. А теперь предположите еще и такое - значение Rate было введено с ошибкой и спустя какое то время ошибка обнаружена - снова цикл? Связь обеспечивается СУБД с помощью связки Первичный ключ - Внешний ключ, эта связь обеспечивает однозначную и непротиворечивую связь обеих таблиц. В вашем случае эта связка усложняется из-за поля Cost, значения, которого необходимо проверять с промощью триггеров, как минимум после обновления таблицы Rates. Возможны и другие случаи при которых нужна такая проверка, но это уже виднее Вам, т. к. я не знаю вашей системы в целом. В случае этой связи Вам при занесении записи в Calls необходимо будет записать в нее RateID и DestinationCode как раз именно для установления связи, в этот же момент можно записать и Cost но не обязательно. Проблема определения DestinationCode в этом случае будет не проблемой базы, а скорее проблемой приложения, которое собственно и заносит данные в Вашу таблицу. Сделать это можно будет как минимум не сложнее Вашего решения, однако определение DestinationCode в данном случае будет производиться только один раз! Как я уже говорил, я не знаю как к Вам приходят номера, но предполагаю, что не по 100 млн. одновременно, соответственно определение DestinationCode пусть даже и в цикле но по мере поступления записей звонков, вероятнее всего не будет сильно сказываться на производительности системы. Уфф, аж устал набивать Надеюсь понятно объяснил, если нет, то чесслово понятней не умею P.S. Как установить связь в СУБД я писал Вам в ответе на Ваше письмо, если оно не пришло, я повторю ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 15:11 |
|
UPDATE по совпадению в подстроке
|
|||
---|---|---|---|
#18+
Григорий, я пожалуй прислушаюсь к Сергею по поводу ведения таблицы его способом -"Но вести такую таблицу - никому не пожелаю". Дело в том что уровень вложенности может быть от 1 до 13 цифр, причем заранее не известно будет ли он менятся с течением времени (скорее всего будет). Если клиент имеет следующую разбивку: 7 73 7095 7333 7812 .. еще 40 кодов вида 7xxx 7095766 ... еще 50 кодов вида 7xxxxx то мне даже пытаться проанализировать как ЭТО записать в виде шаблонов страшно В варианте с приоритетом не совсем понятно,как я этот приритет смогу использовать в UPDATE - по моему только таким же образом, как я сейчас использую DATALENGTH - перебором от самого длинного кода/высокого приоритете к самому короткому/низкому. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 15:17 |
|
|
start [/forum/topic.php?fid=46&msg=32003145&tid=1827173]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 259ms |
total: | 392ms |
0 / 0 |