powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Ошибка: Определены следующие отношения с множественными связями
7 сообщений из 7, страница 1 из 1
Ошибка: Определены следующие отношения с множественными связями
    #35106551
L_Dorrit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени,
Вопрос следующий. Пытаюсь реализовать схемку вида:

Класс ObjectType, имеет name, id;
Класс RelationType, имеет name, id, entityName;
Класс "связь" - Link, содержит: id, код объекта слева, код объекта справа, код типа объекта слева, код типа объекта справа.

Т.е. для записи связи между, например, лицом и документом: объект вида "Лицо", код 1, связан с объектом вида "Документ", код 3, связью вида 4 (скажем, "бывший владелец документа").

Код: 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.
35.
Class mypack.RelationType Extends mypack.DictionaryAbstract [ Not ProcedureBlock ]
{
...
Relationship relationLinks As mypack.Link [ Cardinality = children, Inverse = relationType ];

}

Class mypack.ObjectType Extends mypack.DictionaryAbstract [ Not ProcedureBlock ]
{

Property entityName As %String [ Private ];

Relationship rightLinks As mypack.Link [ Cardinality = children, Inverse = rightObjectType ];

Relationship leftLinks As mypack.Link [ Cardinality = children, Inverse = leftObjectType ];

}

Class mypack.Link Extends %Persistent [ ClassType = persistent, Not ProcedureBlock ]
{

Property uid As %Integer [ Private ];

Property objLeftId As %Integer [ Private ];

Property objRightId As %Integer [ Private ];

Relationship leftObjectType As mypack.ObjectType [ Cardinality = parent, Inverse = leftLinks, Required ];

Relationship rightObjectType As mypack.ObjectType [ Cardinality = parent, Inverse = rightLinks, Required ];

Relationship relationType As mypack.RelationType [ Cardinality = parent, Inverse = relationLinks, Required ];

}


При попытке реализовать такую схему классов в Cache получаю ошибку вида
Компиляция класса mypack.Link
ОШИБКА #5266: Определены следующие отношения с множественными связями: 'relationType'

В чем тут дело? Я бы еще поняла, если бы компилятор не принимал две ссылки на один и тот же класс ObjectType. Но какие вопросы вызывает в данном случае RelationType? Что я делаю не так?
...
Рейтинг: 0 / 0
Ошибка: Определены следующие отношения с множественными связями
    #35107100
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

> Class mypack.RelationType Extends mypack.DictionaryAbstract [ Not ProcedureBlock ]
Рекомендую все-таки использовать ProcedureBlock.

> Relationship leftObjectType As mypack.ObjectType [ Cardinality = parent, Inverse = leftLinks, Required ];
> Relationship rightObjectType As mypack.ObjectType [ Cardinality = parent, Inverse = rightLinks, Required ];
> Relationship relationType As mypack.RelationType [ Cardinality = parent, Inverse = relationLinks, Required ];

> Что я делаю не так?
Отношения parent-child ставят объекты со стороны children в полную зависимость
от объектов parent (в частности, они удаляются при удалении parent). Поэтому в
Вашем случае лучше будет использовать one-many отношения. Кроме того, у Вас
родители и дети перепутаны местами.

Любви.
logist (Сергей Шутов)
ООО Димас, Хабаровск
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Ошибка: Определены следующие отношения с множественными связями
    #35107160
L_Dorrit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logistРекомендую все-таки использовать ProcedureBlock.
Таким образом импортировалась модель из Rational Rose; я не знаю, почему именно так.

logistОтношения parent-child ставят объекты со стороны children в полную зависимость
от объектов parent (в частности, они удаляются при удалении parent). Поэтому в
Вашем случае лучше будет использовать one-many отношения.

Вот это еще один вопрос, который на данный момент меня занимает. Когда нужно использовать parent-child, а когда one-many? Я читаю документацию, да. О полной зависимости, об удалении. Но разве не логично удалять связи некоторого вида, если сам вид такой связи удаляется? Здесь, как мне кажется, достаточно тонкая грань. Есть ли более четкий признак, по которому можно определить нужный тип связи?

logistКроме того, у Вас
родители и дети перепутаны местами.

Можно подробнее - где именно перепутаны?

Код: plaintext
1.
2.
3.
Relationship leftObjectType As mypack.ObjectType [ Cardinality = parent, Inverse = leftLinks, Required ];
Relationship rightObjectType As mypack.ObjectType [ Cardinality = parent, Inverse = rightLinks, Required ];
Relationship relationType As mypack.RelationType [ Cardinality = parent, Inverse = relationLinks, Required ];

У связи есть тип объекта (два: для объекта справа и слева.) Связей для каждого типа объекта может быть много, поэтому тип - родитель, связи - дети.
У связи есть тип связи: аналогичная ситуация. Может, поясните, где тут ошибка?

Я только начинаю изучать Cache. Сверяюсь с примерами из методичек и учебников. Вот пример с человеком и телефонами.
Свойство телефона:

Код: plaintext
Relationship person As Test.Person [ Cardinality = parent, Inverse = phones ];

Свойство лица:
Код: plaintext
Relationship phones As Test.Phone [ Cardinality = children, Inverse = person ];

Вроде бы все по аналогии. Или я где-то дурак?
...
Рейтинг: 0 / 0
Ошибка: Определены следующие отношения с множественными связями
    #35107305
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял справа и слева всегда будут одни и те же типы. Т.е. с одной стороны всегда лицо... С другой документ. Зачем тогда в третьей таблице хранить их типаж?

У вас как? У лица может быть много документов, а у документа может быть много лиц?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Ошибка: Определены следующие отношения с множественными связями
    #35107896
L_Dorrit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaЕсли я правильно понял справа и слева всегда будут одни и те же типы. Т.е. с одной стороны всегда лицо... С другой документ. Зачем тогда в третьей таблице хранить их типаж?

У вас как? У лица может быть много документов, а у документа может быть много лиц?

У лица может быть много документов, да. Разных документов, или с разными связями - например, паспорт может быть со связью типа "бывший владелец", когда паспорт был заменен; или "владелец" - когда это текущий паспорт. У документа не должно быть много лиц, хотя теоретически может быть - скажем, у договора или свидетельства о браке. :-)

Но в данном случае имелось в виду, что в базе могут храниться сведения об объектах разных типов, и эта таблица - попытка унифицировать структуру хранения связей между объектами. Лицо. Документ. Автомобиль (например). Адрес. Любой объект, не только лицо и документ. Поэтому и типаж. Иначе в базе данных было бы много таблиц связей: лицо-документ, лицо-автомобиль, лицо-адрес, лицо-телефон... ну и так далее. Вопрос проектирования.

На самом деле, тоже интересный вопрос. :-) Жизнеспособна ли такая модель проектирования связей...
...
Рейтинг: 0 / 0
Ошибка: Определены следующие отношения с множественными связями
    #35109608
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

> Таким образом импортировалась модель из Rational Rose; я не знаю, почему
> именно так.
Скорее всего потому что импортер из Rose написан давно, когда ProcedureBlock в
Каше еще не было.

> Вот это еще один вопрос, который на данный момент меня занимает. Когда
> нужно использовать parent-child, а когда one-many?
Наиболее простой способ определить что Вам нужно - если при удалении родителя
должны удаляться дети - это parent-child, если не должны - one-many. Реализация
parent-child построена таким образом, что в поле может быть только одно child
свойство! (т.к. на самом деле весь child объект хранится в parent-е)


> Но разве не логично удалять связи
> некоторого вида, если сам вид такой связи удаляется?
Честно говоря, не очень.


> Можно подробнее - где именно перепутаны?
Да, это я чего то перепутал. Там же тип связи, а не объекта. То есть связь типа
parent, а сам объект - child. Все правильно написано.

Так что единственная проблема в Вашем коде - parent связь в классе должна быть
только одна. Исправляйте на one-many.

=logist (Сергей Шутов)
ООО Димас, Хабаровск
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Ошибка: Определены следующие отношения с множественными связями
    #35109668
L_Dorrit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logistТак что единственная проблема в Вашем коде - parent связь в классе должна быть
только одна. Исправляйте на one-many.
Да, спасибо. Уже опытным путем было выяснено, что двух родителей система "не кушает". One-to-many так one-to-many...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Ошибка: Определены следующие отношения с множественными связями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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