|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
Как сделать Primary Key на classname + Number в этой задаче? - есть один базовый класс Base, у него есть свойство Number - все остальные классы произведены от базового, Number уникален для каждого конечного класса, таким образом (classname,Number) уникален для таблицы Base Служебное поле x__classname я так понимаю нельзя использовать ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 11:39 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
Можно сделать вычисляемое поле и на него навесить индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:04 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
Я тут один момент не догоняю, который возможно делает мой вопрос бесмысленным: если классы B и С произведены от класса A, и я делаю 'select * from C', каким образом каше находит все объекты типа C? У него же нет индекса по classname. Он, что перебирает все A и откидывает все не-С? Но это же супер как неэффективно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 14:49 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
alatalo, А план запроса не пробовал смотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 15:23 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
Вообще создание Extent индекса для каждого подкласса должно решать проблему перебора всех объектов при поиске по подклассам. Либо делать свое хранение в каждом подклассе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 15:57 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
а, да, это я ступил. Конечно в Data-глобале классы идут как под-глобали. Тогда обратно к моему вопросу, уточню его: как сделать IdKey таким? Index key On (classname,Number) [ IdKey, PrimaryKey, Unique ]; ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 16:02 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
alataloа, да, это я ступил. Конечно в Data-глобале классы идут как под-глобали. Тогда обратно к моему вопросу, уточню его: как сделать IdKey таким? Index key On (classname,Number) [ IdKey, PrimaryKey, Unique ];И думаешь, этот индекс автоматически начнет использоваться? Почему? Напиши пример запроса, который думаешь что так оптимизируешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 16:07 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
не, не, речь не про оптимизицию. Все проще, у меня каждый объект идентифицируется парой classname+Number и я хочу иметь возможность сказать ##class(classC).%OpenId("classC||10"), но не знаю как сказать Cache что IdKey это classname+Number ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 20:48 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
alataloне, не, речь не про оптимизицию. Все проще, у меня каждый объект идентифицируется парой classname+Number и я хочу иметь возможность сказать ##class(classC).%OpenId("classC||10"), но не знаю как сказать Cache что IdKey это classname+NumberХм, что-то еще запутанней становится. Number уникален в пределах класса, а зачем делать индекс по классу и Number если должно быть достаточно только Number. По индексам типа Unique можно открывать объекты без %OpenId. так генерятся методы IndexName с приставками Open, Exist. Куда нужно передать список значений полей по которым этот индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 22:25 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
Тогда для каждого производного класса нужно отдельно делать свой Number и уникальный индекс по нему. Моя же идея простая как топор - Number определяется один раз в базовом классе и IdKey определяется как classname+Number. Тогда Data глобаль будет выгдядеть как classB Number1 (...record data) Number2 (...record data) classC Number1 (...record data) Number2 (...record data) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2018, 21:54 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
alatalo, соглашусь daimor в этой теме, или krvsa в соседней теме - вы делаете что-то не то ( недоговариваете ) Код: vbnet 1. 2. 3. 4. 5. 6.
У %Persistent уже есть метод %Open( oid ), где oid = $lb( id, classname ) - если не подходит, напишите свой ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2018, 16:31 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
doublefint, неа, так select по baseA не сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2018, 11:13 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
alatalo, тут такое дело... Наследование это же из ООП, мол, классB ( наследник ) такой же как классA ( родитель ), но поведение другое, так? А у нас тут ООП с хранением - хранится состояние ( значения свойств ), а не поведение. Также следует помнить, что это СУБД, что предполагает обработку множеств записей для множества пользователей. Объектный доступ имеет свою цену ( память, скорость ), что рано или поздно, подтолкнет вас к необходимости все чаще использовать класс-методы ( хранимые процедуры ). А им, кроме идентификаторов, мало что нужно. И в конце этого длинного пути, вы начнете предпочитать простые схемы хранения - таблицы, которые будете обрабатывать разным набором функций ( класс-методы, хранимки ). Конечно, все эти предпочтения зависят от ваших обстоятельств, но вы их не раскрываете. Возвращаясь к вашему вопросу: 1. C одинаковым интерфейсом вроде разобрались - абстрактный класс 2. С общим списком - в базовом классе можно написать ( или генерировать ) запрос объединяющим строки наследников Код: plsql 1. 2. 3. 4. 5.
и потом Код: vbnet 1.
3. Уникальность номера между всеми экземплярами наследников проверять в момент сохранения - метод, создающий и использующий идексноподобную глобаль, вам в помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2018, 13:53 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
4. И чтоб совсем соответствовать, запрос из п.2 объявить как view ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2018, 13:56 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
doublefint, >... но вы их не раскрываете. Именно. Вопрос этого топика - можно ли уговорить Каше использовать x__classname в Primary Key, т.е. получить такую структуру Data Global: ^data("classB",1)=... ^data("classB",2)=... ^data("classB",n)=... ^data("classС",1)=... ^data("classС",2)=... ^data("classС",n)=... Зачем и не лучше ли использовать хранимки отстается за скобками ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2018, 22:34 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
alatalo, x__classname - служебное поле, с информацией о цепочке наследования. Вы не можете указать это поле при описании индекса. Если вам нужна определенная структура глобали, используйте другие схемы хранения ( Cache SQL Storage, Custom Storage ) вместо дефолтной ( Cache Storage ) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 01:03 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
doublefint, >x__classname - служебное поле, с информацией о цепочке наследования. Вы не можете указать это поле при описании индекса. Спасибо, Кеп :) >Если вам нужна определенная структура глобали... Cамое важное здесь не структура глобали, а чтобы Каше сам знал что в первом индексе хранится classname и мог бы его использовать как extent index. Таким образом, запрос "select * from classB order by Number" может был выполнен эффективно без дополнительных индексов. Можно ли этого добиться с помощью альтернативных схем хранения? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 10:42 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
alatalo >... x__classname - служебное поле, с информацией о цепочке наследования ... >> Спасибо, Кеп :) "Здесь мало услышать, Здесь вслушаться нужно..." alatalo... а чтобы Каше сам знал что в первом индексе хранится classname и мог бы ... С помощью альтернативных схем хранения можно добиться поведения, которым не обладает схема хранения по умолчанию :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 11:58 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
doublefint, >С помощью альтернативных схем хранения можно добиться поведения, которым не обладает схема хранения по умолчанию :) да ладно?! вот оно решение всем проблемам! :) Можете привести пример такой схемы с Primary Key по classname+Number? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 12:33 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
alatalo ... решение всем проблемам ... Не могу разделить ваш оптимизм, ведь их список вы не раскрываете. alatalo Можете привести пример такой схемы с Primary Key по classname+Number? Именно в такой постановке достаточно и стандартной схемы. Но ведь список ваших требований постоянно пополняется... Готовы предоставить полную спецификацию и ответить на уточняющие вопросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 13:04 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
doublefint, >Готовы предоставить полную спецификацию запросто: Как сделать Primary Key на classname + Number в этой задаче? - есть один базовый класс classA, у него есть свойство Number - все остальные классы произведены от classA, Number уникален для каждого конечного класса, таким образом пара (classname,Number) уникален для всех объектов classA - classA должен проецироваться как таблица доступная для 'select ... from classA' ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 14:43 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
Number это если я правильно понимаю, ID идентификатор объекта. Зачем вам индекс по classname+Number если вы и так можете открывать объект по ##class(classname).%OpenId(Number) Если Number не Id а еще одно поле, то просто Unique индекс по нему и открывать через него ##class(classname).NumberIndexOpen(Number) А индекс по Classname достигается через Extent индекс, его хватит чтобы sql запросы не перебирали все объекты classA ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 15:42 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
alatalo ... запросто ... Неа - вы не описали поле classname. Если предположить, что это поле с именем класса, то решение может быть таким: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 18:41 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
doublefintalatalo ... запросто ... Неа - вы не описали поле classname. Если предположить, что это поле с именем класса, то решение может быть таким: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Только этот индекс не поможет в SQL запросе. Только если не искать фильтровать по классу в where. Но это будет выглядеть несколько нелепо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 21:13 |
|
Индекс на x__classname
|
|||
---|---|---|---|
#18+
DAiMordoublefintпропущено... Неа - вы не описали поле classname. Если предположить, что это поле с именем класса, то решение может быть таким: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Только этот индекс не поможет в SQL запросе. Только если не искать фильтровать по классу в where. Но это будет выглядеть несколько нелепо. Да, именно так. Собственно весь вопрос этой темы в том, можно ли сообщить Каше, что classname (a.k.a x__classname, %%CLASSNAME) хранится в Primary Key. Таким образом, Primary Key будет одновременно и Extent индексом. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 08:27 |
|
|
start [/forum/topic.php?fid=39&fpage=4&tid=1556239]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 138ms |
0 / 0 |