powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Параметр класса и SQL
12 сообщений из 12, страница 1 из 1
Параметр класса и SQL
    #36397553
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В суперклассе есть некий набор свойств - св1,св2,св3...
Для всех инстансов любого его наследника эти свойства одинаковы (в пределах класса-наследника).
Т.е. для экземпляров некоего "Класса 1" св1 всегда равно 1, а св2 - всегда "зеленый"...
а вот для всех экземпляров "Класса 2" св1 всегда равно 2, а св2 - всегда "Вася".

Напрашивается использование параметров вместо свойств.

Кто-то юзал подобные структуры? Интересует, как это через SQL можно будет выкрутить (будет ли производительность выше... или хотя бы сравнима с использованием свойств?) и какие могут быть грабли?

Собирать данные (в основном) буду через sql-проекцию суперкласса. А работать с инстансами - через интерфейсы наследников.
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36397916
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovНапрашивается использование параметров вместо свойств.

Что-то я не припомню знает ли SQL про параметры вообще.

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

По вычисляемым свойствам вроде как в новых кашах индекс строить можно.
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36398076
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtnПо вычисляемым свойствам вроде как в новых кашах индекс строить можно.

"Не верю" (с)

А в общем, я уже на свойствах сделал... Правда ощущения неприятные - как представлю эти пару миллионов хранящихся и отиндексированных единичек... ;(
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36398179
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovПравда ощущения неприятные - как представлю эти пару миллионов хранящихся и отиндексированных единичек... ;(
Даже не совсем понятно зачем вообще нужны такие "свойства", если все определяется "именем класса"...
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36399186
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovPtnПо вычисляемым свойствам вроде как в новых кашах индекс строить можно.

"Не верю" (с)(

вот

kolesovА в общем, я уже на свойствах сделал... Правда ощущения неприятные - как представлю эти пару миллионов хранящихся и отиндексированных единичек... ;(

Я так понял без индекса все равно не обойтись. Другое дело для различия типов объекта действительно достаточно имени класса, оно все равно храниться в любом индексе.

Доступно в виде скрытого sql поля x__classname. Для базового класса всегда пустое, для предков содержит список наследования
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36399262
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn, вспомнил про свои давнишние (неудачные) опыты, но тогда я пытался использовать поле %ClassName, решил повторить и заодно посмотреть на x__classname.

Код: plaintext
1.
2.
3.
4.
Class Test.A Extends (%Persistent, %Populate)
{ Property P1 As %String;
  Index Pind on (P1);
}
Код: plaintext
1.
2.
3.
Class Test.B Extends Test.A
{  Property P2 As %String;
}
Код: plaintext
1.
2.
USER>d ##class(Test.A).Populate( 5 )
 
USER>d ##class(Test.B).Populate( 5 )
запрос
Код: plaintext
select *,%Classname,x__classname from test.A
результат
#IDP1Literal_3x__classname11Z8389Test.A22H5475Test.A33Y8929Test.A44M4855Test.A55W7867Test.A66E4937Test.A~Test.B~77Z7624Test.A~Test.B~88N3096Test.A~Test.B~99O3214Test.A~Test.B~1010S3530Test.A~Test.B~

а вот что в индексе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 1 :  ^Test.AI("Pind"," E4937", 6 ) = "~Test.B~" 
 2 :  ^Test.AI("Pind"," H5475", 2 ) = "" 
 3 :  ^Test.AI("Pind"," M4855", 4 ) = "" 
 4 :  ^Test.AI("Pind"," N3096", 8 ) = "~Test.B~" 
 5 :  ^Test.AI("Pind"," O3214", 9 ) = "~Test.B~" 
 6 :  ^Test.AI("Pind"," S3530", 10 ) = "~Test.B~" 
 7 :  ^Test.AI("Pind"," W7867", 5 ) = "" 
 8 :  ^Test.AI("Pind"," Y8929", 3 ) = "" 
 9 :  ^Test.AI("Pind"," Z7624", 7 ) = "~Test.B~" 
 10 :  ^Test.AI("Pind"," Z8389", 1 ) = "" 
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36399272
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и еще попробовал сделать третий класс
Код: plaintext
1.
2.
3.
Class Test.C Extends Test.B
{ Property P3 As %String;
}

Код: plaintext
USER>d ##class(Test.C).Populate( 5 )
#IDP1Literal_3x__classname11Z8389Test.A22H5475Test.A33Y8929Test.A44M4855Test.A55W7867Test.A66E4937Test.A~Test.B~77Z7624Test.A~Test.B~88N3096Test.A~Test.B~99O3214Test.A~Test.B~1010S3530Test.A~Test.B~1111G7412Test.A~Test.B~Test.C~1212V7107Test.A~Test.B~Test.C~1313Z7664Test.A~Test.B~Test.C~1414M8963Test.A~Test.B~Test.C~1515Y3271Test.A~Test.B~Test.C~
и индексы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 1 :  ^Test.AI("Pind"," E4937", 6 ) = "~Test.B~" 
 2 :  ^Test.AI("Pind"," G7412", 11 ) = "~Test.B~Test.C~" 
 3 :  ^Test.AI("Pind"," H5475", 2 ) = "" 
 4 :  ^Test.AI("Pind"," M4855", 4 ) = "" 
 5 :  ^Test.AI("Pind"," M8963", 14 ) = "~Test.B~Test.C~" 
 6 :  ^Test.AI("Pind"," N3096", 8 ) = "~Test.B~" 
 7 :  ^Test.AI("Pind"," O3214", 9 ) = "~Test.B~" 
 8 :  ^Test.AI("Pind"," S3530", 10 ) = "~Test.B~" 
 9 :  ^Test.AI("Pind"," V7107", 12 ) = "~Test.B~Test.C~" 
 10 :  ^Test.AI("Pind"," W7867", 5 ) = "" 
 11 :  ^Test.AI("Pind"," Y3271", 15 ) = "~Test.B~Test.C~" 
 12 :  ^Test.AI("Pind"," Y8929", 3 ) = "" 
 13 :  ^Test.AI("Pind"," Z7624", 7 ) = "~Test.B~" 
 14 :  ^Test.AI("Pind"," Z7664", 13 ) = "~Test.B~Test.C~" 
 15 :  ^Test.AI("Pind"," Z8389", 1 ) = "" 
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36399284
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn,
x__classname юзаем во-всю...
а индексы по компьютед-полям, это бред... в том смысле, что по-принципу глупо надеяться, что это будет работать ;) сложное никогда приемлемо не работает....
а подклассов, пока приблизительно 15-ть... причем одинаковым "св1" являются для 5-ти из них... и, получается, что параметр все равно более выгоден, чкм что-либо другое (если бы не сцуко, sql)...
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36399348
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не очень понимаю чем именно параметр выгоднее...

Если желаете делать SQL выборки по значениям св1-св3 то полюбому придется использовать индекс по ним.

Если же выборка идет по каким то своим критериям - и потом нужно быстро определить св1-св3 по ID - ну да можно впихать их в параметры и добавить SQL-процеду для получения значения поля по ID
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36399351
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Ptn, вспомнил про свои давнишние (неудачные) опыты, но тогда я пытался использовать поле %ClassName, решил повторить и заодно посмотреть на x__classname.

%ClassName ... Блин ... а я свое прикручивал... тьфу
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36399406
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn, а что с %ClassName? В SQL это вообще какое-то бесполезное поле, я смотрел в скомпиленный запрос, оно там просто текстом ставится, если селект делаем из таблицы A, то оно текстом просто ставится "Test.A", нет проверки на то, к какому же классу на самом деле принадлежит запись.
А вот в объектном доступе вроде нормально работает.
...
Рейтинг: 0 / 0
Параметр класса и SQL
    #36399462
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovесли бы не сцуко, sql...
Золотые слова - 2
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Параметр класса и SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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