powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вопросы по доступу к метаданным
9 сообщений из 34, страница 2 из 2
Вопросы по доступу к метаданным
    #34770589
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.А старые значения ID восстановить нельзя?
Если будете при загрузке менять ID, это слишком большая проблема, оно вам точно надо?
2. Попробовать использовать естественные ключи вместо суррогатных.
...
Рейтинг: 0 / 0
Вопросы по доступу к метаданным
    #34771576
Andrey Bark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.1.А старые значения ID восстановить нельзя?
Если будете при загрузке менять ID, это слишком большая проблема, оно вам точно надо?

Да, мне тоже хотелось бы восстановить старые значения ID.
Но этого сделать не получается. При явном указании значения поля ID в insert-запросе вылетает ошибка про невозможность пользовательского задания автогенерируемого значения.

Дело в том, что в исходной (экспортируемой в скрипт) таблице код ID в общем случае не обязательно идет последовательно, после длительной работы пользователей с таблицей очень вероятно, что значения поля ID будут разрежены. Сохранив эту таблицу в скрипт (даже со знаениями полей ID) возникает проблема последующей загрузки скрипта в таблицу (пускай даже чистую). На это накладывается требование сохранения связей между таблицами.

Блок А.Н.2. Попробовать использовать естественные ключи вместо суррогатных.

К сожалению я не знаю как настроить relationship между классами на основе значений естественных ключей. К тому же не хочется добалять дополнительные PK когда и так есть ID.
...
Рейтинг: 0 / 0
Вопросы по доступу к метаданным
    #34771678
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если решить проблему дублирования ID ... то указать ID в INSERT можно, достаточно завести поле ID и назначить его IDKEY.
...
Рейтинг: 0 / 0
Вопросы по доступу к метаданным
    #34771766
VadimF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Bark Блок А.Н.3,4 Наверняка есть классы в пакете %Dictionary, которые вам помогут.
Но лично мне удобней ползать по глобалам ^oddDEF, ^oddCOM

Спасибо за наводку, почитаю.

Блок А.Н.5 не понял, что вы имеет в виду. Возможно вы путаете ID и OREF объекта?
OREF меняется при каждом открытии объекта и идентифицирует его только в пределах процесса.
ID постоянен (его кажется вообще нельзя изменить легальным методами)

Речь именно про ID. Представим что у нас в базе лежат данные для двух связанных по релатионшипу класов. Мы экспортируем эти данные в какой-либо файл, вместе со значениями полей ID. После этого пользователь продолжает работать с базой. И внутренние значения ID продолжают расти. После этого нам нужно загрузить в базу ранее сохраненные данные, но так чтобы сязи между ними не потерялись. Но при их добавлении они получат уже новые значения ID.
При этом Cache не позволяет (насколько я понял) принудительно задавать/изменять значения поля ID.

Встает вопрос: Как грамотно сохранить связи между объектами? И как их потом загружать?

В Cache' есть синхронизация объектов.
Для реализации синхронизации в Cache' есть поддержка GUID.
Глобальный уникальный идентификатор как раз позволяет решить проблему, которую Вы описываете.

Почитайте документацию на эту тему .
Советую использовать GUID!

Вадим
...
Рейтинг: 0 / 0
Вопросы по доступу к метаданным
    #34771894
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что значения ID идут разреженно - доказывать не нужно

Andrey Bark Блок А.Н.1.А старые значения ID восстановить нельзя?

При явном указании значения поля ID в insert-запросе вылетает ошибка про невозможность пользовательского задания автогенерируемого значения.

А у меня получается.
Хотя у нас идешники не совсем стандартные. Они тоже автоинкрементные, но генерятся "руками".

Andrey Bark
Блок А.Н.2. Попробовать использовать естественные ключи вместо суррогатных.

К сожалению я не знаю как настроить relationship между классами на основе значений естественных ключей. К тому же не хочется добалять дополнительные PK когда и так есть ID.
Ну в общем то вы делаете индекс по любому уникальному (идентифицирующему) полю, говорите в свойствах что это idkey - и все, работаете так же, это поле теперь как ID (если не так сказал - пусть поправят). С такими (естественными) ключами не возникнет проблем связности (правда там другие проблемы, но эти проблемы возникнут в любой СУБД).

Правда если у вас есть уже работающая система - этот способ не подойдет.
...
Рейтинг: 0 / 0
Вопросы по доступу к метаданным
    #34772853
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VadimF В Cache' есть синхронизация объектов.
Для реализации синхронизации в Cache' есть поддержка GUID.
Глобальный уникальный идентификатор как раз позволяет решить проблему, которую Вы описываете.

Почитайте документацию на эту тему .
Советую использовать GUID!

Вадим

Вот ... хоть какой то пример на пальцах.... но все равно остается неясным ... как например сделать что бы синхронизировались только выбранные таблицы ?
...
Рейтинг: 0 / 0
Вопросы по доступу к метаданным
    #34775723
Andrey Bark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VadimFВ Cache' есть синхронизация объектов.
Для реализации синхронизации в Cache' есть поддержка GUID.
Глобальный уникальный идентификатор как раз позволяет решить проблему, которую Вы описываете.

Почитайте документацию на эту тему.
Советую использовать GUID!

Спасибо за совет, посмотрел. Это конечно все очень хорошо,мощно и интересно. Но применять средство поддержки репликации баз для решения простых задач импорта/экспорта данных по-моему это как из пушки по воробъям. Хочется более простого решения.

PtnЕсли решить проблему дублирования ID ... то указать ID в INSERT можно, достаточно завести поле ID и назначить его IDKEY.

Проблемы дублирования ID у меня нет, я готов предварнительно очищать глобалы с данными. Интересно только, сохраняется ли при таком подходе внутреннее поле %ID ? И как-то переделывать все классы базы данных не хотелось бы. Но большое спасибо за очень ценный совет.


Блок А.Н.Ну в общем то вы делаете индекс по любому уникальному (идентифицирующему) полю, говорите в свойствах что это idkey - и все, работаете так же, это поле теперь как ID (если не так сказал - пусть поправят). С такими (естественными) ключами не возникнет проблем связности (правда там другие проблемы, но эти проблемы возникнут в любой СУБД).

Правда если у вас есть уже работающая система - этот способ не подойдет.

Спасибо. Ваш пост совместно с постом уважаемого Ptn проянили механизм настриваемого для ID поля. Это наверно лучшее решения, единственная проблема в том, механизм импорта/экспорта данных с сохранением связности объектов хотелось бы иметь более-менее универсальный, по возможности не сильно привязанный к описаниям классов. Предполагалось описания классов получать динамически, выявлять какое поле является ID, и сохранять это в строки вида
Код: plaintext
1.
2.
insert into SomePakaje.ClassA (ID, SomeUserField1, RelationToClassB, ...) values ( 1 , "aaa",  22 , ...)
insert into SomePakaje.ClassB (ID, SomeUserField1, ...) values ( 22 , "bbb", ...)
Вообщем идея в том, что бы экспортировать данные взаимосвязанных классов (без предварительного изменения их структуры введением собственных IDKEY полей) в текстовый sql-подобный скрипт. А потом в новую (или предварительно очищенную) базу залить данные из этого скрипта, так чтобы связи между объектами сохранились.

Итого: GUID - тяжеловесно,
собственный естественный ключ с IDKEY - хорошо, но требует предварительной модификации классов. Хотелось бы универсального решения без изменения структуры базы.
...
Рейтинг: 0 / 0
Вопросы по доступу к метаданным
    #34775839
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте свой суррогатный ключ, тот же автоинкрементный ID.
Для всех связанных классов ничего не изменится - старые ID не потеряются.

Правда классы все равно придется модифицировать, например ту же процедуру выдачи нового ID.

Примерно так у нас сделано.
...
Рейтинг: 0 / 0
Вопросы по доступу к метаданным
    #34775996
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
%ID Существует всегда - это декларативная сущность.

Занимался я у нас проблемой разнонаправленных бэкапов... могу сказать следующее...

Анализируя описание классов - всегда можно построить схему, не всегда просто но можн, где в классе ссылки на объект, где ID где еще какой прикол.

Если интересует именно полноый перенос базы - то проще рещить бэкапами или переносом глобалов. В противном случае у вас неизбежно в файле восстоновления должны появится UPDATE-ы и DELETE-ы... что приводит нас к третей проблеме ....

Либо встраивать систему трассировки, что бы вести журнал изменениий таблицы... либо учится определять неизменые/изменненые строки ... что с ростом базы будет выполнять все труднее и труднее по экспоненте...

Вот если бы "научится" работать на низком уровне с системной таблицей синхронизаций GUID....
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Вопросы по доступу к метаданным
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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