powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / UPDATE по совпадению в подстроке
25 сообщений из 61, страница 2 из 3
UPDATE по совпадению в подстроке
    #32003126
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Genady

Дык вот вы такой умный - напишите структуру таблиц с ключами и запрос. Неужели это так сложно, с вашей-то начитанностью? Всего-то две таблички. Мне искренне интересно как это надо правильно организовать.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003128
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergSuper

Для двух табличек я и написал т. е. в Calls присутствует RateID, а DestinationCode почему то нет.
Чиста канкретна схему данных я написать не могу, для этого анализ ПО нужен, уж пусть Victor этим и займется.

Выпады по поводу книг в общем то смешны
Я искренне советовал, поскольку по части теории у Виктора заметные пробелы, кстати совсем недавно я сам такой был, могу сказать, что знание теории мне совсем не мешает
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003129
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Для того, чтобы организовать
отношение Parent Child, нужно из парента передать в чилд первичный ключ в виде внешнего ключа, т. е. поля составляющие
первичный ключ Rates должны присутствовать Calls, таким образом будет организовано однозначное соответствие.

Так я, блин, это и хочу сделать! Попытаюсь уточнить формулировку задачи подругому:

В таблицу Calls переодически заносятся данные поступающие от внешной системы в поля DialedNumber,Duration,RateID.
Задача: как создать производную таблицу calls1 или какие поля необходимо добавить в существующую таблицу Calls для того чтобы наиболее быстрым способом производить описаный в моем первом сообщении расчет.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003130
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Для двух табличек я и написал т. е. в Calls присутствует RateID, а DestinationCode почему то нет.
Так его потому и нет, что это часть решаемой задачи - необходимо по номеру определить какай DestinationCode ему соответсвует и по найденному DestinationCode определить тариф.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003133
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Так его потому и нет, что это часть решаемой задачи - необходимо по номеру определить какай DestinationCode ему соответсвует и >по найденному DestinationCode определить тариф.
А откуда он у Вас берется в Rates?

Я бы посоветовал все же нормализовать Rates, полагаю все же join-ы будут быстрее, чам ваша посимвольная обработка.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003136
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уфф устал прям. Виктор, если хотите пришлите мне по e-mail вашу ER-диаграмму, можно в копиях экрана, только чтоб не мегабайты весила, и краткое описание работы, я посмотрю и скажу что на мой взгляд не так.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003138
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Могу в ErWin 3.52
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003141
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Genady

"Чиста канкретна схему данных я написать не могу, для этого анализ ПО нужен, уж пусть Victor этим и займется."

Ну и как тут не вспомнить фразу: "Кто умеет тот делает, кто не умеет тот учит".
Я привел всего 2 таблицы из двух полей каждая - какой еще нужен анализ ПО?

К сожалению данная задача не попадает под чистые, красивые схемы, описанные в учебниках, хоть их до дыр читай. У меня была похожая проблемма - расчет банковских нормативов. Там складывается куча счетов, причем задаётся обычно несколько первых цифр счета. Я тоже долго думал как это лучше сделать - ничего красивого не получается. На первый взгляд вроде и есть первичный и вторичный ключи, но приглядишься - вроде их и нет. И надо либо их как-то генерить и работать по теории, либо оставить теории в сторону и думать самому. Обычно второе предпочтительней.

Поэтому совет Вам - не судите с наскока, не разобравшись. Если критикуете чего-то - покажите как сделать лучше.

С приветом Сергей
PS. Надеюсь я ничего обидного не написал?
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003144
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Я бы посоветовал все же нормализовать Rates, полагаю все же join-ы будут быстрее, чам ваша посимвольная обработка.

Так посоветуйте! Как?
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003145
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей,
интересно было бы услышать, как вы решили вашу проблему.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003147
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victor

Присылайте, у меня power designer, но он по моему умеет открывать ErWin диагграмы

2 SergSuper
>Ну и как тут не вспомнить фразу: "Кто умеет тот делает, кто не умеет тот учит".

Спорить не буду, может быть так и есть.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003162
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victor

"интересно было бы услышать, как вы решили вашу проблему."

А как я в самом начале написал - записывал счета так, чтобы их можно было сравнить like-ом. Но у меня было несколько сложнее, допустим все счета 322...., но кроме тех у которых 5-я цифра 1 (от балды пример). Ну и приходилось писать: 322_[^1]%. Но вести такую таблицу - никому не пожелаю. Допустим чтобы написать: все счета 3..... кроме 32219..., надо вставить
3[^2]%
32[^2]%
322[^1]%
3221[^9]%

Однажды написав, разобраться в этом очень тяжело, счетов много, отсортировать по смыслы никак
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003208
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да уж, это будет похуже моего случая.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003210
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victor
К сожалению я не смог открыть Вашу диаграмму но я немного посоображал и хочу задать Вам несколько вопросов, ответив на которые Вы несколько проясните картину, во всяком случае для меня. Тогда возможно на диаграмму смотреть и не прийдется

Вот эти вопросы:

1. Вам не кажется, что таблицы Calls и Rates должны быть связаны?
2. В таблице Calls вы храните вычисляемое поле Cost, с чем это связано?
3. Какое назначение поля RateId? Как я понимаю это идентификатор, идентификатор чего?
4. Каким образом заносятся значения поля DestinationCode?

Удачи
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003213
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый интересный первый вопрос.

Что бы понять, попробуйте связать для начала две таблицы:
1. русский алфавит
2. все слова русского языка

Вроде же они должны быть связаны и понятно как.
Ну и что по этому поводу в умных книжках пишут?
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003215
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Вроде же они должны быть связаны и понятно как.
>Ну и что по этому поводу в умных книжках пишут?

Я подожду ответы Victorа, потом отвечу и Вам, ОК?
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003218
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Генадий,
а 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?
Есть справочник кодов - из него выбираются.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003220
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Генадий,
>а ERX тоже не открывается?

Ко мне приходил только ER1, если Вы посылали ERX сегодня, тогда я смогу посмотреть его только вечером дома, на работе у меня нет такой возможности.

>Они и будут связаны когда в результате расчета станет известно какой тариф применять, т.е. UPDATE будет вида
>set cost=,rateid=,destinationcode=

То есть Вы хотите установить связь программно. А почему Вас не устраивает связь средствами СУБД?

>Это связано с тем, что COST вычисляется довольно сложным способом учитывая всевозможные варианты округления длительности >звонка и период действия тарифного плана (как я сказал приведенный пример весьма упрощенный). Проводить эти вычисления каждый >раз когда необходимо сформировать отчет по таблице calls не имеет смысла с точки зрения произоводительности.

Понятно, спасибо.

>Это идентификатор тарифного плана. Если более подробно:
Понятно

>ну и соответственно
>Calls -звонки сделанные клиентами
>(Account,DialedNumber,Duration,-известны
>RateId,Cost,DestinationCode) -вычисляются

На каком этапе вычисляется DestinationCode?
И на каком этапе проводится обновление Calls, я имею в виду поле Cost?

>Rates - детали тарифных планов.

Насколько я понимаю Rates это тоже справочник?

>Есть справочник кодов - из него выбираются.

Дайте пожалйста структуру справочника.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003261
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SergSuper
>Вроде же они должны быть связаны и понятно как.
>Ну и что по этому поводу в умных книжках пишут?

Как и обещал отвечаю:
Должны быть связаны и связаны все же несколько разные понятия. Понятно кому? И интересно как?

По поводу русского алфавита и слов, просто связать конечно нельзя, но я как то не понял аналогии, в телефонном номере что, может быть произвольное количество кодов, раставленых в произвольном порядке? Впрочем, можно связать и алфавит со словами, если рассмотреть что у слова кроме атрибута - буква есть атрибут - позиция этой буквы в слове.
В общем как то я не очень понимаю смысл Ваших наездов, что Вам собственно не понравилось? То что я посоветовал почитать книги, дабы лучше ориентироваться хотя бы в терминологии? Откровенно говоря Ваша кусючесть меня озадачивает
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003266
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Должны быть связаны и связаны все же несколько разные понятия"

Собственно я это и пытался высказать.

И это тоже Ваши слова:
", т. е. поля составляющие первичный ключ Rates должны присутствовать Calls, таким образом будет организовано однозначное соответствие."

А "кусючесть"...

Ну не люблю я когда человек критикует, советует книжки почитать, а сам предложить ничего не может

Может перебрал немного, извиняюсь

С приветом Сергей
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003267
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>И это тоже Ваши слова:
>", т. е. поля составляющие первичный ключ Rates должны присутствовать Calls, таким образом будет организовано однозначное >соответствие."

Дык в том же и дело, что почти сразу посоветовал связать эти таблици, и пытался разными словами объяснить почему, вот только Виктор почему то никак не мог понять что я ему советую, хотя выше приведенная фраза по моему однозначна
Вот я отсылал его к книгам, чтоб прочитал, да разобрался

Что касается обид, так я и не обижался просто Ваша некоторая злобность меня удивила
не мог понять из-за чего
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003269
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Генадий,
не совсем понял, что вы имеете в виду под:
"То есть Вы хотите установить связь программно. А почему Вас не устраивает связь средствами СУБД?"

Далее,
"На каком этапе вычисляется DestinationCode?
И на каком этапе проводится обновление Calls, я имею в виду поле Cost?"
В процессе UPDATE.

Справочник DestinationCode - список всех возможных кодов
Destinationcode (PK) - собственно сам код
Description - описание
Например
44 - United Kingdom
441 - London
4412 - London Cellular
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003271
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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). В общем, это скорее варианты визаульной реализии одного и того же подхода.
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003272
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>не совсем понял, что вы имеете в виду под:
>"То есть Вы хотите установить связь программно. А почему Вас не устраивает связь средствами СУБД?"

Программно это то, что Вы показывали ранее, т. е. в момент обновления Calls вы с помошью цикла определяете соответствие двух таблиц, проводите обновление и все, связь теряется, предположите теперь, что Вам нужно выдать отчет по клиенту с данными о том по каким кодам он звонил и например, сумму оплаты по каждому коду, Вы что снова будуте цикл использовать??
Я не знаю динамики Вашей системы, но косвенно по Вашим описаниям предполагаю, что обновление поля Cost происходит пакетно, т. е. обновляются множество записей уже после того как данные по звонкам занесены. Естественно цикл работает на каждой записи и это не повышет быстродействия системы. А теперь предположите еще и такое - значение Rate было введено с ошибкой и спустя какое то время ошибка обнаружена - снова цикл?

Связь обеспечивается СУБД с помощью связки Первичный ключ - Внешний ключ, эта связь обеспечивает однозначную и непротиворечивую связь обеих таблиц. В вашем случае эта связка усложняется из-за поля Cost, значения, которого необходимо проверять с промощью триггеров, как минимум после обновления таблицы Rates. Возможны и другие случаи при которых нужна такая проверка, но это уже виднее Вам, т. к. я не знаю вашей системы в целом. В случае этой связи Вам при занесении записи в Calls необходимо будет записать в нее RateID и DestinationCode как раз именно для установления связи, в этот же момент можно записать и Cost но не обязательно. Проблема определения DestinationCode в этом случае будет не проблемой базы, а скорее проблемой приложения, которое собственно и заносит данные в Вашу таблицу. Сделать это можно будет как минимум не сложнее Вашего решения, однако определение DestinationCode в данном случае будет производиться только один раз!
Как я уже говорил, я не знаю как к Вам приходят номера, но предполагаю, что не по 100 млн. одновременно, соответственно определение DestinationCode пусть даже и в цикле но по мере поступления записей звонков, вероятнее всего не будет сильно сказываться на производительности системы.

Уфф, аж устал набивать
Надеюсь понятно объяснил, если нет, то чесслово понятней не умею

P.S. Как установить связь в СУБД я писал Вам в ответе на Ваше письмо, если оно не пришло, я повторю
...
Рейтинг: 0 / 0
UPDATE по совпадению в подстроке
    #32003273
Victor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Григорий,

я пожалуй прислушаюсь к Сергею по поводу ведения таблицы его способом -"Но вести такую таблицу - никому не пожелаю".
Дело в том что уровень вложенности может быть от 1 до 13 цифр, причем заранее не известно будет ли он менятся с течением времени (скорее всего будет).
Если клиент имеет следующую разбивку:
7
73
7095
7333
7812
..
еще 40 кодов вида 7xxx
7095766
...
еще 50 кодов вида 7xxxxx
то мне даже пытаться проанализировать как ЭТО записать в виде шаблонов страшно

В варианте с приоритетом не совсем понятно,как я этот приритет смогу использовать в UPDATE - по моему только таким же образом, как я сейчас использую DATALENGTH - перебором от самого длинного кода/высокого приоритете к самому короткому/низкому.
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 2 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / UPDATE по совпадению в подстроке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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