Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Пытаюсь сделать небольшую утилиту для экспорта данных из классов в файл-скрипт с sql запросами, а также для последующего импорта из данного скрипта в базу. Возникли следующие вопросы (попытки поиска по форуму и в документации оказались малоуспешны): 1. Как можно выполнить COS-код из .NET ? Или как из .NET обратиться к методам системных классов Cache для которых не удается сгенерировать соответствующие объекты через CacheNetWizard ? Используемый .NET CacheProvider как-то странно документирован, описывается только малая часть классов и их свойств/методов (в основном про простую работу с объектами и запросами). Очень хотелось бы из .NET получить дерево классов БД (как в утилите CacheNetWizard): 2. Как получить список Namespace'ов на сервере? 3. Как получить список pakages внутри определенного Namespace? 4. Как получить список классов внутри определенного pakage ? 5. Есть несколько взаимосвязанных по relationship классов. Насколько я понимаю внутри этой связи используются ObjID таблиц. При удалении/добавлении записей в таблицы ObjID меняются. Как грамотно сохранить связи между объектами? Возможно есть способ принудительно изменения значений ObjID? Или можно сделать связь на основе значений других идентификаторов сущностей. 6. Как из ClassMethod сделанного на COS можно вернуть результат-запроса в виде набора из нескольких строк (также как это возврщает Query)? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 14:56 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
И еще в догонку :) 7. Как в .NET с помощью Managed Provider'а работать с системными классами, например с %Directory.ClassDefinition ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 15:21 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
при попытке сгенерировать соответствующий proxie-класс для %Directory.ClassDefinition происходит ошибка Код: plaintext 8. Возможно ли создавать proxie-классы для классов системной библиотеки (%классов) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 15:24 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Советую Вам сделать набор собственных классов Cache' для реализации функционала Вашей утилиты. А потом уже сделать proxy этого класса в .Net. Посмотрите документ про API по конфигурированию Cache'. Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 15:50 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Я имел в виду, вызывать системные классы из кода Ваших классов Cache'. Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 15:52 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
авторСоветую Вам сделать набор собственных классов Cache' для реализации функционала Вашей утилиты. А потом уже сделать proxy этого класса в .Net. Пока так и приходиться делать. Просто мне кажется странным отсутствие возможности вызывать напрямую из .NET системные классы. авторПосмотрите документ про API по конфигурированию Cache'. Посмотрел, спасибо. Но описанное там не помогает решить проблему с получением списка namespace'ов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 17:40 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Нашел ответ на вопрос AndreyBark6. Как из ClassMethod сделанного на COS можно вернуть результат-запроса в виде набора из нескольких строк (также как это возврщает Query)? ответ называется User-Written Class Queries решение выглядит приблизительно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Нормально вроде компилируется, но при выполнении этого запроса почему-то происходит подвисание. Так что ответ на вопрос 6 можно считать не полным :) Ответ на вопрос AndreyBark2. Как получить список Namespace'ов на сервере? вроде бы такой Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Продолжается поиск (и ожидание :)) ответов на оставльные вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 17:48 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Andrey Bark Нормально вроде компилируется, но при выполнении этого запроса почему-то происходит подвисание. Подвисает? У меня выдаёт ошибку при выполнении. Код: plaintext 1. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 18:05 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Получить список namespace-ов: рылась в документации нашла команду do ^%CD. На запрос надо ввести "?". вот пример из терминала DELTA>d ^%CD Namespace: ? '?' for help. '@' (at-sign) to edit the default, the last namespace name attempted. Edit the line just as if it were a line of code. <RETURN> will leave you in the current namespace. Here are the defined namespaces: %CACHELIB %SYS DELTA DELTA2 DEV DOCBOOK EASTLINE KZ PITER SAMPLES SBARRO USER Может, поможет...)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 18:10 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
На самом деле решение выглядит приблизительно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Кто переменную N за собой таскать будет ? Вполне вероятно что она всегда при вызове фетча пустая - вот вам и бесконечный цикл. Для передачи между этими тремя процедурами данных используйте qHandle! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 18:20 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Александр КобловRow должен быть списком, т.е. set Row=$LB(n) После исправления вроде нормально работает. Спасибо, COS у меня в стадии изучения, поэтому правильнописание хромает. LenRoverрылась в документации нашла команду do ^%CD. На запрос надо ввести "?". Спасибо. Это практически то что нужно. Осталорсь только перекинуть эти данные в .NET :) PtnКто переменную N за собой таскать будет ? Вполне вероятно что она всегда при вызове фетча пустая - вот вам и бесконечный цикл. Для передачи между этими тремя процедурами данных используйте qHandle! Огромное спасибо. После чтения доков по Cache у меня почему то сложилось твердое (и видимо неправильное) убеждения что все переменные он делает глобально-надолго-видимыми, если им не делать new и close. После исправления по вашему совету, подвисать перестало, но к сожалению в результате выполнения запроса в программу приходит пустой ResultSet. Помогите, пожалуйста, довести до победного конца :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 18:35 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Я бы так подправил: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 18:41 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Вот 100% рабочий кусок, но рабоает только в консоли Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Осталось правильно переделать в запрос, чтобы получить результаты в .NET. Вот это пока не получается :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 18:42 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Ура!!! Заработало Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Большое спасибо товарищам Александр Коблов и Ptn Вопросы 2 и 6 закрыты. Остались вопросы 1, 3-5, 7, 8 Еще немного, еще чуть-чуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 18:49 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Andrey Bark1) Как можно выполнить COS-код из .NET ? Если небольшой кусок, то xecute. Ещё можете посмотреть в области DocBook класс DocBook.Utils метод ExecuteCOS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 15:50 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Александр КобловЕсли небольшой кусок, то xecute. Ещё можете посмотреть в области DocBook класс DocBook.Utils метод ExecuteCOS Спасибо за ответ. Но дело в том, что команда xecute - это команда COS. А надо выполнить произволный COS-код из среды C#.NET. пока получается получить доступ только к своим классам посредстом сгенерированных для них прокси-классов. А как выполнить произволный COS-код из кода C# пока остается загадкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 02:07 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Может я что-то не понял, но что мешает создать метод в классе с параметром этого метода -- строка на COS. типа Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 12:13 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Александр КобловМожет я что-то не понял, но что мешает создать метод в классе с параметром этого метода -- строка на COS. типа Код: plaintext 1. 2. 3. Все правильно, это просто я не сообразил о чем речь. Хорошее решение, но оставется проблема взаимосвязанного исполнения блоков COS-кода. Т.к. судя по документации xecute выполняет только одну строку COS-кода. И что особенно неприятно Код: plaintext т.е. как я понимаю к переменным инициализированным в предыдущем запуске xecute не будет доступа в последующих запусках xecute. Что с этим можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 13:09 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Ставьте ProcedureBlock=0 в параметрах вызывающего метода и все будет видеть. Правда про new не забудьте тогда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2007, 13:13 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Спасибо. Вопрос Andrey Bark1. Как можно выполнить COS-код из .NET ? можно считать закрытым. Хотя решение не идеально и позволяет выполнять только небольшие куски кода, скорее даже одиночные команды. Но это лучше чем ничто. Поиметь более прямой доступ из C#.NET к системным классам Cache, кроме как создавать свои промежуточные Cache-классы, а потом и прокси для них, видимо невозможно. Ладно утремся :) Остались вопросы 3-5, 7, 8 С благодарностью за полученные ответы предвкушаю последующие :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 03:10 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
3,4 Наверняка есть классы в пакете %Dictionary, которые вам помогут. Но лично мне удобней ползать по глобалам ^oddDEF, ^oddCOM 5 не понял, что вы имеет в виду. Возможно вы путаете ID и OREF объекта? OREF меняется при каждом открытии объекта и идентифицирует его только в пределах процесса. ID постоянен (его кажется вообще нельзя изменить легальным методами) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 07:49 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.3,4 Наверняка есть классы в пакете %Dictionary, которые вам помогут. Но лично мне удобней ползать по глобалам ^oddDEF, ^oddCOM Спасибо за наводку, почитаю. Блок А.Н.5 не понял, что вы имеет в виду. Возможно вы путаете ID и OREF объекта? OREF меняется при каждом открытии объекта и идентифицирует его только в пределах процесса. ID постоянен (его кажется вообще нельзя изменить легальным методами) Речь именно про ID. Представим что у нас в базе лежат данные для двух связанных по релатионшипу класов. Мы экспортируем эти данные в какой-либо файл, вместе со значениями полей ID. После этого пользователь продолжает работать с базой. И внутренние значения ID продолжают расти. После этого нам нужно загрузить в базу ранее сохраненные данные, но так чтобы сязи между ними не потерялись. Но при их добавлении они получат уже новые значения ID. При этом Cache не позволяет (насколько я понял) принудительно задавать/изменять значения поля ID. Встает вопрос: Как грамотно сохранить связи между объектами? И как их потом загружать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 10:27 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
>Как грамотно Грамотно так не делать :-) А если уж так делать, то тщательно продумывать протокол выгрузки-загрузки-сихнхронизации. Если вы выгружате данные в виде глобалов, то они назад закачиваются в точно таком же виде, с теми же идешиками. Но это чревато, приведу пришедшие в голову примеры: 1.Запись индексирована по полю А, при выгрузке индекс выгружаете вместе с данными. Запись в базе изменяется, создается новая индексная запись, а старая удаляется. Если вы восстановите глобал поверх новых данных, то у вас будет одна запись данных, и две индексные записи с разными индексироваными значениями. 2. Класс А имеет поле АА, указывающее на класс Б, класс Б имеет поле ББ, указывающее на класс А. Сохраняем данные класса А в глобал, меняем данные классов А и Б, и восстанавливаем класс А. Что имеем в ссылках - непонятно. А с учетом того, что они могут быть индексированы - вообще ужас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 11:55 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Да, не закончил, если не хотите заморачиваться с восстановлением целостности данных, то выгрузка-загрузка оправдана только при удалении предыдущих данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 12:00 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.Грамотно так не делать :-) А если уж так делать, то тщательно продумывать протокол выгрузки-загрузки-сихнхронизации. Пока, приходиться перед загрузкой удалять глобалы с данными и индексами для загружаемых классов. Блок А.Н.Если вы выгружате данные в виде глобалов, то они назад закачиваются в точно таком же виде, с теми же идешиками. Нет, данные выгружаются в подобие sql-скрипта. Точнее планируется так сделать. Осталось решить задачу по сохранению информации о связях. Можно сохранить например существующие значения ID, и значения ссылающихся полей (ссылки на ID). Но при импорте из этого скрипта возникает проблема восстановления связей (поскольку ID не обязательно идут по порядку и могут, в общем случае, быть разрежены). Блок А.Н.Но это чревато, приведу пришедшие в голову примеры: 1. ... 2. ... Честно говоря, вообще не хочу с импортом глобалов целиком связываться. Блок А.Н.Да, не закончил, если не хотите заморачиваться с восстановлением целостности данных, то выгрузка-загрузка оправдана только при удалении предыдущих данных. Пока так и делаю. Но не знаю как связи восстановить и загрузке в чистую базу. PS: обсуждение очень способствует пониманию проблемы, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2007, 13:11 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
1.А старые значения ID восстановить нельзя? Если будете при загрузке менять ID, это слишком большая проблема, оно вам точно надо? 2. Попробовать использовать естественные ключи вместо суррогатных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 05:58 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Блок А.Н.1.А старые значения ID восстановить нельзя? Если будете при загрузке менять ID, это слишком большая проблема, оно вам точно надо? Да, мне тоже хотелось бы восстановить старые значения ID. Но этого сделать не получается. При явном указании значения поля ID в insert-запросе вылетает ошибка про невозможность пользовательского задания автогенерируемого значения. Дело в том, что в исходной (экспортируемой в скрипт) таблице код ID в общем случае не обязательно идет последовательно, после длительной работы пользователей с таблицей очень вероятно, что значения поля ID будут разрежены. Сохранив эту таблицу в скрипт (даже со знаениями полей ID) возникает проблема последующей загрузки скрипта в таблицу (пускай даже чистую). На это накладывается требование сохранения связей между таблицами. Блок А.Н.2. Попробовать использовать естественные ключи вместо суррогатных. К сожалению я не знаю как настроить relationship между классами на основе значений естественных ключей. К тому же не хочется добалять дополнительные PK когда и так есть ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:39 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Если решить проблему дублирования ID ... то указать ID в INSERT можно, достаточно завести поле ID и назначить его IDKEY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 13:59 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Andrey Bark Блок А.Н.3,4 Наверняка есть классы в пакете %Dictionary, которые вам помогут. Но лично мне удобней ползать по глобалам ^oddDEF, ^oddCOM Спасибо за наводку, почитаю. Блок А.Н.5 не понял, что вы имеет в виду. Возможно вы путаете ID и OREF объекта? OREF меняется при каждом открытии объекта и идентифицирует его только в пределах процесса. ID постоянен (его кажется вообще нельзя изменить легальным методами) Речь именно про ID. Представим что у нас в базе лежат данные для двух связанных по релатионшипу класов. Мы экспортируем эти данные в какой-либо файл, вместе со значениями полей ID. После этого пользователь продолжает работать с базой. И внутренние значения ID продолжают расти. После этого нам нужно загрузить в базу ранее сохраненные данные, но так чтобы сязи между ними не потерялись. Но при их добавлении они получат уже новые значения ID. При этом Cache не позволяет (насколько я понял) принудительно задавать/изменять значения поля ID. Встает вопрос: Как грамотно сохранить связи между объектами? И как их потом загружать? В Cache' есть синхронизация объектов. Для реализации синхронизации в Cache' есть поддержка GUID. Глобальный уникальный идентификатор как раз позволяет решить проблему, которую Вы описываете. Почитайте документацию на эту тему . Советую использовать GUID! Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 14:25 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
То, что значения ID идут разреженно - доказывать не нужно Andrey Bark Блок А.Н.1.А старые значения ID восстановить нельзя? При явном указании значения поля ID в insert-запросе вылетает ошибка про невозможность пользовательского задания автогенерируемого значения. А у меня получается. Хотя у нас идешники не совсем стандартные. Они тоже автоинкрементные, но генерятся "руками". Andrey Bark Блок А.Н.2. Попробовать использовать естественные ключи вместо суррогатных. К сожалению я не знаю как настроить relationship между классами на основе значений естественных ключей. К тому же не хочется добалять дополнительные PK когда и так есть ID. Ну в общем то вы делаете индекс по любому уникальному (идентифицирующему) полю, говорите в свойствах что это idkey - и все, работаете так же, это поле теперь как ID (если не так сказал - пусть поправят). С такими (естественными) ключами не возникнет проблем связности (правда там другие проблемы, но эти проблемы возникнут в любой СУБД). Правда если у вас есть уже работающая система - этот способ не подойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 14:51 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
VadimF В Cache' есть синхронизация объектов. Для реализации синхронизации в Cache' есть поддержка GUID. Глобальный уникальный идентификатор как раз позволяет решить проблему, которую Вы описываете. Почитайте документацию на эту тему . Советую использовать GUID! Вадим Вот ... хоть какой то пример на пальцах.... но все равно остается неясным ... как например сделать что бы синхронизировались только выбранные таблицы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2007, 20:13 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
VadimFВ Cache' есть синхронизация объектов. Для реализации синхронизации в Cache' есть поддержка GUID. Глобальный уникальный идентификатор как раз позволяет решить проблему, которую Вы описываете. Почитайте документацию на эту тему. Советую использовать GUID! Спасибо за совет, посмотрел. Это конечно все очень хорошо,мощно и интересно. Но применять средство поддержки репликации баз для решения простых задач импорта/экспорта данных по-моему это как из пушки по воробъям. Хочется более простого решения. PtnЕсли решить проблему дублирования ID ... то указать ID в INSERT можно, достаточно завести поле ID и назначить его IDKEY. Проблемы дублирования ID у меня нет, я готов предварнительно очищать глобалы с данными. Интересно только, сохраняется ли при таком подходе внутреннее поле %ID ? И как-то переделывать все классы базы данных не хотелось бы. Но большое спасибо за очень ценный совет. Блок А.Н.Ну в общем то вы делаете индекс по любому уникальному (идентифицирующему) полю, говорите в свойствах что это idkey - и все, работаете так же, это поле теперь как ID (если не так сказал - пусть поправят). С такими (естественными) ключами не возникнет проблем связности (правда там другие проблемы, но эти проблемы возникнут в любой СУБД). Правда если у вас есть уже работающая система - этот способ не подойдет. Спасибо. Ваш пост совместно с постом уважаемого Ptn проянили механизм настриваемого для ID поля. Это наверно лучшее решения, единственная проблема в том, механизм импорта/экспорта данных с сохранением связности объектов хотелось бы иметь более-менее универсальный, по возможности не сильно привязанный к описаниям классов. Предполагалось описания классов получать динамически, выявлять какое поле является ID, и сохранять это в строки вида Код: plaintext 1. 2. Итого: GUID - тяжеловесно, собственный естественный ключ с IDKEY - хорошо, но требует предварительной модификации классов. Хотелось бы универсального решения без изменения структуры базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 19:08 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
Сделайте свой суррогатный ключ, тот же автоинкрементный ID. Для всех связанных классов ничего не изменится - старые ID не потеряются. Правда классы все равно придется модифицировать, например ту же процедуру выдачи нового ID. Примерно так у нас сделано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 20:02 |
|
||
|
Вопросы по доступу к метаданным
|
|||
|---|---|---|---|
|
#18+
%ID Существует всегда - это декларативная сущность. Занимался я у нас проблемой разнонаправленных бэкапов... могу сказать следующее... Анализируя описание классов - всегда можно построить схему, не всегда просто но можн, где в классе ссылки на объект, где ID где еще какой прикол. Если интересует именно полноый перенос базы - то проще рещить бэкапами или переносом глобалов. В противном случае у вас неизбежно в файле восстоновления должны появится UPDATE-ы и DELETE-ы... что приводит нас к третей проблеме .... Либо встраивать систему трассировки, что бы вести журнал изменениий таблицы... либо учится определять неизменые/изменненые строки ... что с ростом базы будет выполнять все труднее и труднее по экспоненте... Вот если бы "научится" работать на низком уровне с системной таблицей синхронизаций GUID.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2007, 22:25 |
|
||
|
|

start [/forum/topic.php?all=1&fid=39&tid=1559231]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 379ms |

| 0 / 0 |
