Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Связывать таблицы по id или получать значение через функцию…?  [new]
StMikle
Member

Откуда:
Сообщений: 132
Подскажите идеологически правильное решение.
Есть 2 таблицы:
Список:
буква | число

A 1
A 2
……
B 1
С 1
и
Словарик
Буква | тип
А гласная
В согласная

Значения для буквы «С» не предусмотрено в словаре, а тип буквы «С» будет браться из тела функции, непосредственно в которой будет прописан тип, что «С» это согласная.

Для достижения необходимого результата
буква | число | тип

A 1 гласная
A 2 гласная
………..
B 1 согласная
С 1 согласная

Планирую использовать:
select nvl(c.тип, функция, содержащая тип букв в своем теле(t.буква)) 
from список t , 
     словарик с 
where t.буква=с.буква(+)

или 

select функция, содержащая тип букв в своем теле и используюшая словарик(t.буква)  
from список t  
     

Какой из этих 2х вариантов наименее емкий к ресурсам и более правильный.. и есть ли 3 вариант &
13 окт 07, 21:06    [4790903]     Ответить | Цитировать Сообщить модератору
 Re: Связывать таблицы по id или получать значение через функцию…?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116200
StMikle
и есть ли 3 вариант &


Третий вариант - занести С в словарные данные, сводя
его к первому, но уже без внешнего соединения.
Мы ведь знаем, что С - это согласная :-)
А что мешает Вам определиться в Вашем случае ?

Предполагаю, что зависимость от неких других (динамически изменяющихся
данных). Тогда можно предложить четвертый вариант :
то, что Вы делаете в функции, делать непосредственно в запросе.
13 окт 07, 21:14    [4790922]     Ответить | Цитировать Сообщить модератору
 Re: Связывать таблицы по id или получать значение через функцию…?  [new]
StMikle
Member

Откуда:
Сообщений: 132
dmidek
ну пример с буквами - так и остаеца примером в реальности
13 окт 07, 21:18    [4790931]     Ответить | Цитировать Сообщить модератору
 Re: Связывать таблицы по id или получать значение через функцию…?  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116200
StMikle
dmidek
ну пример с буквами - так и остаеца примером в реальности


То есть это реальный пример ?
Тогда прокомментируйте мое четвертое и особенно третье предложение.

Или я неверно Вас понял ?
Прокомментируйте в любом случае :-)
13 окт 07, 21:22    [4790941]     Ответить | Цитировать Сообщить модератору
 Re: Связывать таблицы по id или получать значение через функцию…?  [new]
StMikle
Member

Откуда:
Сообщений: 132
dmidek
ну пример с буквами - так и остается примером...

Никаким образом нельзя уйти от функции, хранящею тип буквы, что будет менее требовательно к ресурсам вызывать функцию всегда для проверки сначала есть ли тип для той или иной буквы в теле а потом обрушаться к словарику и узнавать тип данной буквы из словаря,
или
вызывать функцию только в том случае, когда не было найдено типа для буквы в словаре?

В реальности словарик состоит из 10тыс записей а табличка более чем из 2-3 миллионов записей, сделанных за 1 день...
13 окт 07, 21:24    [4790944]     Ответить | Цитировать Сообщить модератору
 Re: Связывать таблицы по id или получать значение через функцию…?  [new]
Levandovskiy
Member

Откуда:
Сообщений: 329
NVL vs (DECODE or CASE)
DECODE vs NVL
13 окт 07, 21:42    [4790981]     Ответить | Цитировать Сообщить модератору
 Re: Связывать таблицы по id или получать значение через функцию…?  [new]
StMikle
Member

Откуда:
Сообщений: 132
Levandovskiy
да естьтакой давно известный фактик с нулом, что покаким то причинам при условии is null по индексировануму столбцу всеравно получаем фулскан в запросе.. и необходимо использовать
where
decode (столбец, null, "любое значение невстречаюшееся в данном столбце")=
decode (столбец, null, "любое значение невстречаюшееся в данном столбце")
- спасибо что напомнили
13 окт 07, 22:00    [4791014]     Ответить | Цитировать Сообщить модератору
 Re: Связывать таблицы по id или получать значение через функцию…?  [new]
StMikle
Member

Откуда:
Сообщений: 132
немного переработаны скрипты
select decode(c.тип, null, функция, содержащая тип букв в своем теле(t.буква),c.тип) 
from список t , 
     словарик с 
where t.буква=с.буква(+)

или 

select функция, содержащая тип букв в своем теле и используюшая словарик(t.буква)  
from список t  
     
13 окт 07, 22:03    [4791023]     Ответить | Цитировать Сообщить модератору
 Re: Связывать таблицы по id или получать значение через функцию…?  [new]
Владимир Бегун
Member

Откуда: Redwood Shores, CA USA
Сообщений: 1707
StMikle
Подскажите идеологически правильное решение.
Правильным решением будет отказ от использования PL/SQL и хранение всей нужной информации в таблице, если количество исключений невелико, то вероятно использование представления, в котором перечисленны такие исключения. Непонятно, кстати, зачем нужен подобный словарь вообще, если речь не идёт о поддержки большого количества языков (да и во всех ли языках есть понятия гласных и согласных?) TRANSLATE вполне справится с распознованием гласных и согласных букв. Вообщем всё выглядит странным.
13 окт 07, 23:19    [4791153]     Ответить | Цитировать Сообщить модератору
 Re: Связывать таблицы по id или получать значение через функцию…?  [new]
Levandovskiy
Member

Откуда:
Сообщений: 329
StMikle
да естьтакой давно известный фактик с нулом, что покаким то причинам при условии is null по индексировануму столбцу всеравно получаем фулскан в запросе.. и необходимо использовать
where decode (столбец, null, "любое значение невстречаюшееся в данном столбце") = decode (столбец, null, "любое значение невстречаюшееся в данном столбце")
И зачем такое выражение? Все равно же будет фуллскан.
14 окт 07, 10:45    [4791605]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить