Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / reference, relationship или foreign key? / 11 сообщений из 11, страница 1 из 1
12.02.2007, 21:15
    #34325371
reference, relationship или foreign key?
Господа! Кто использует ОО и СКЛ в Каше, скажите..
Есть три способа указания связей (reference, relationship или foreign key),
но не совсем понятно какой из них и когда следует использовать.

На первый взгляд наилучшим способом выглядит relationship, но..
Отношения 1-к-1 [пока?] не поддерживаются.
Обнулить ссылку в дочерних объектах при удалении получилось только в методе %OnDelete,
триггер Delete ваще не запускается (что теперь, удалять через хранимые процедуры??)

Вобщем, какие есть рекомендации?

(К сожалению надыбать литературу пока не получается(((
...
Рейтинг: 0 / 0
13.02.2007, 03:55
    #34325664
Dmitry V. Liseev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
reference, relationship или foreign key?
Hi!

Юрий Куклачев
Господа! Кто использует ОО и СКЛ в Каше, скажите..
Есть три способа указания связей (reference, relationship или foreign key),
Связь - штука относительная, как и мед. Как только она есть, так ее сразу нет.
В том смысле, что когда говорят о связи, подразумевают ссылочную целостность
в условиях изолирования множества конкурирующих транзакций. И тут есть
много нюансов ;)

Юрий Куклачев
но не совсем понятно какой из них и когда следует использовать.
Изучить недостатки всех трех и придумать свой ;)

Юрий Куклачев
Отношения 1-к-1 [пока?] не поддерживаются.
И это правильно. Отношения 1-к-1 - плохой стиль проектирования.

Юрий Куклачев
Обнулить ссылку в дочерних объектах при удалении получилось только в методе %OnDelete,
триггер Delete ваще не запускается (что теперь, удалять через хранимые процедуры??)
Метод %OnDelete запускается, при удалении объектным способом ##class(SomeClass).%DeleteId(567).
А триггер запускается при удалении реляционным способом &sql(DELETE FROM SomeClass WHERE ID=567)
или при обращении через ODBC,JDBC. Это если использовать стандартный метод хранения CacheStorage.

Собственно, чтобы не дублировать код в двух местах, удобнее создать метод класса SomeDeleteId()
и просто вызывать его как из триггера, так и из %OnDelete()

Юрий Куклачев
(К сожалению надыбать литературу пока не получается(((
А ее и не надо дыбать по причине отсутствия. Надо изучить исходники системных классов, пока
еще есть возможность (Интерсистемз теперь стал их старательно прятать) и разобрать те файлы
*.INT, которые генерит компилятор для ваших классов.
____________________________
С уважением, Лисеев Дмитрий.
http://private.peterlink.ru/dimik/
PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
13.02.2007, 16:58
    #34327823
reference, relationship или foreign key?
авторИзучить недостатки всех трех и придумать свой ;)Ну спасибо ;) Это в третьем то тысячелетии будем сочинять рукоблудие для ссылочной целостности?!
обычную ссылку сразу отбрасываем, как не поддерживающую целостность.
остатеся relationship и foreign key.

авторА триггер запускается при удалении реляционным способом &sql(DELETE FROM SomeClass WHERE ID=567)
угу! в том то и дело, что если отношение ONE-MANY, а удаление типа DELETE FROM OneSideClass WHERE Name %STARTSWITH "A",
то что-то происходит не совсем понятное(((

С другой стороны, если использовать foreign key, то все отрабатывает вроде корректно
как при удалении через ОО, так и через СКЛ по условию.

авторСобственно, чтобы не дублировать код в двух местах, удобнее создать метод класса SomeDeleteId()
и просто вызывать его как из триггера, так и из %OnDelete()Да, уже знаком с такой методой. Будем надеятся когда-нибудь обработчики будут автоматом сопоставлены триггерам.
...
Рейтинг: 0 / 0
13.02.2007, 17:05
    #34327853
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
reference, relationship или foreign key?
Юрий КуклачевБудем надеятся когда-нибудь обработчики будут автоматом сопоставлены триггерам.
Чтобы вызвать объектный обработчик нужно поднять объект с диска в память.
...
Рейтинг: 0 / 0
13.02.2007, 17:11
    #34327882
reference, relationship или foreign key?
ну яЧтобы вызвать объектный обработчик нужно поднять объект с диска в память.даже classmethod??
...
Рейтинг: 0 / 0
13.02.2007, 17:24
    #34327943
VadimF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
reference, relationship или foreign key?
Юрий,

Мне кажется перед обсуждением этой темы в форуме, стоит посмотреть документацию.
Вы установили Cache', соответственно, установилась и документация.
Есть документация и в Интернете.

Если Вас интересуют объекты, почитайте Using Caché Objects .

Если хочется почитать на русском, то есть материалы на нашем сайте:
http://www.intersystems.ru/cache/education/docs.htmlhttp://www.intersystems.ru/cache/education/docs.html%5B/url]

Обратите внимание на ObjectQS .
Есть там и учебное пособие про объекты.

Есть у InterSystems и курсы по разработке на Cache'. На курсах вы можете узнать все об объектах.

Надеюсь, Вы используете какую-то новую версию - Cache' 5.2. или Cache' 2007.1.


Вадим
...
Рейтинг: 0 / 0
13.02.2007, 17:47
    #34328041
reference, relationship или foreign key?
Вадим, все это уже прочитано.

When an object is deleted and there are objects related to it, the related objects are deleted (parent/child cardinality) or the delete operation fails (one/many cardinality).или связанные объекты удаляются вместе с родителем или родитель вообще не удаляется и выдает ошибку. третьего не дано(((
...
Рейтинг: 0 / 0
13.02.2007, 19:58
    #34328447
VadimF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
reference, relationship или foreign key?
Чаще используются отношения One-to-Many.
В этом случае классы хранятся независимо.
При этом поддерживается ссылочная целостность.
Если компания связана с сотрудниками отношением one-to-many нельзя удалить компанию, пока у нее есть сотрудники.

Отношения проецируется в SQL .


Вадим
...
Рейтинг: 0 / 0
13.02.2007, 20:43
    #34328517
Юрий К
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
reference, relationship или foreign key?
Ну разумеется!
А если все-таки надо удалять сотрудников при удалении компании или ставить им пустое (или по-умолчанию) значение в свойство "Компания"?

Можно вписать нужный код в %OnDelete и в триггер перед удалением или даже запускать один и тот же статический метод из них обоих, как многие делают, но..
1) Триггер не срабатывает при удалении по условию типа WHERE Name LIKE '%Вася%'
2) Если вместо отношения использовать внешний ключ, можно обойтись без триггеров и методов.
...
Рейтинг: 0 / 0
23.02.2007, 23:13
    #34352462
Dmitry V. Liseev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
reference, relationship или foreign key?
Hi!

аТЙК лХЛМБЮЕЧ
оХ УРБУЙВП ;) ьФП Ч ФТЕФШЕН ФП ФЩУСЮЕМЕФЙЙ ВХДЕН УПЮЙОСФШ ТХЛПВМХДЙЕ ДМС УУЩМПЮОПК ГЕМПУФОПУФЙ?!
ПВЩЮОХА УУЩМЛХ УТБЪХ ПФВТБУЩЧБЕН, ЛБЛ ОЕ РПДДЕТЦЙЧБАЭХА ГЕМПУФОПУФШ.
ПУФБФЕУС relationship Й foreign key.
чУЕЗДБ РПЦБМХКУФБ ;) чЩ ХЦЕ ЧЩСУОЙМЙ, ЮФП ПВЩЮОБС УУЩМЛБ ГЕМПУФОПУФШ ОЕ ПВЕУРЕЮЙЧБЕФ.
хЦЕ ОЕРМПИП ДМС ОБЮБМБ. еУМЙ ВЩ чЩ ЛПРОХМЙ ЗМХВЦЕ Ч *.INT ЛПД Й Ч РПФТПИБ УЙУФЕНОЩИ
ЛМБУУПЧ, ЛБЛ С УПЧЕФПЧБМ, ФП чЩ ВЩ ЧЩСУОЙМЙ, ЮФП ГЕМПУФОПУФШ ОЕ ПВЕУРЕЮЙЧБЕФ ОЙ ПДЙО
ЙЪ ФТЕИ УРПУПВПЧ ХЛБЪБОЙС УЧСЪЙ, УХЭЕУФЧХАЭЙИ Ч Cache. пОБ ОЙЛПЗДБ ОЕ РПДДЕТЦЙЧБМБ,
ОЕ РПДДЕТЦЙЧБЕФ Й ОЕ ВХДЕФ РПДДЕТЦЙЧБФШ ГЕМПУФОПУФШ ДБООЩИ. оЕ ДПДЕМБЧ ухвд, йОФЕТУЙУФЕНЪ
ЧУЕ УЙМЩ ВТПУЙМ ОБ ЧЕВ-ФЕИОПМПЗЙЙ. оХЦОП РТПУФП ХЮЙФЩЧБФШ ЬФПФ ОАБОУ Ч УЧПЕК ТБВПФЕ.
тБУУЮЙФЩЧБФШ НПЦОП ФПМШЛП ОБ ЗПМЩК н-ДЧЙЦПЛ. пО ТБВПФБЕФ УФБВЙМШОП Й ДПЛХНЕОФБГЙС
РП ОЕНХ ЕУФШ. б ЛМБУУЩ, ПВЯЕЛФЩ, SQL - ЫЕМХИБ.

йНЕООП РП ЬФПНХ С УПЧЕФПЧБМ УПЮЙОЙФШ УПВУФЧЕООПЕ ТХЛПВМХДЙЕ ДМС УУЩМПЮОПК ГЕМПУФОПУФЙ.
ьФП ОБДЕЦОЕЕ Й УФБВЙМШОЕЕ Ч ХУМПЧЙСИ ПФУХФУФЧЙС ЮЕФЛПК ДПЛХНЕОФБГЙЙ ОБ РТПДХЛФ.
____________________________
у ХЧБЦЕОЙЕН, мЙУЕЕЧ дНЙФТЙК.
http://private.peterlink.ru/dimik/
PGP key fingerprint: 09 28 74 28 6C 39 62 29 2E CB 95 03 4F 04 33 73


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
24.02.2007, 16:30
    #34352861
reference, relationship или foreign key?
Понятно.. будем знать, спасибо.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / reference, relationship или foreign key? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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