powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Моделирование связей между сущностями
25 сообщений из 60, страница 1 из 3
Моделирование связей между сущностями
    #36536149
andrew_tcvetsikh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Есть вопрос по моделированию связей между сущностями. Каше предоставляет 2 варианта:
1) Использование объектной ссылки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Class temp.B Extends %Persistent
{
}

Class temp.A Extends %Persistent
{
property b as temp.B;
}
2) Использование Relationship
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Class temp.B Extends %Persistent
{
Relationship aMany  As temp.A [ Cardinality = many, Inverse = bOne ];
}

Class temp.A Extends %Persistent
{
Relationship bOne As temp.B [ Cardinality = one, Inverse = aMany ];
}
Есть ли преимущества у одного из подхода перед другим?
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36536173
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первый вариант подходит для реализации связей типа один к одному
а на втором варианте также можно реализовать связь один ко многим

когда нужна связь один к одному думаю лучше использовать первый вариант
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36536205
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Relationship отслеживание ссылочной целостности на уровне системы, хотя вот здесь в этом сильно сомневаются
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36536543
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первый вариант подходит для реализации связей типа один к одномуПервый вариант ничуть не хуже подходит для реализации связей типа 1:M. Потребность в связях 1:1, скорее всего, говорит о проектных ошибках. Я во многом согласен с мнением Д.Лисеева, высказанном в дискуссии 3-летней давности.
Cache на рынке уже более 10 лет, технологии пора бы уже обрести зрелость. Вам не кажется, что за эти годы объектно-реляционный подход к проектированию БД так и не обрел крепкого теоретического фундамента, поэтому и пользоваться им весьма не просто?
На практике, в основном, встречаются 2 подхода:
Р) РСУБД + приложение, работающее с ней только через SQL
Приложение реализовано в зарегистрированных классах или даже в "рутинах". Т.е. отдельно данные, отдельно - программы. Программы могут использовать глобалы в "технических" целях, таких как временное хранение промежуточных данных.
ОО) ООБД полностью инкапсулирована в интерфейсные классы. Тогда уже неважно (для прикладного программиста), как она устроена, т.к. он с нею напрямую не работает, и всевозможные Relationship ему не подмога. Внутри интерфейсных классов работа с БД в этом случае может быть реализована даже на уровне глобалов - это уже вопрос реализации.
Плюсы и минусы Р-подхода:
+ можно полноценно использовать сторонние средства моделирования БД
+ можно использовать какие-вам-нравятся подходы к программированию приложения.
- пресловутый impendance mismatch.
Плюсы и минусы ОО-подхода:
+ потенциально - более высокое быстродействие
+ большая защищенность БД от ошибок прикладных программистов
- сложнее "добыча данных" из такой системы по инициативе сторонних программ.

Понятно, что картинка грубая, и в жизни встречается множество нюансов. М.б., я что-то важное упустил. Принес ли кому-нибудь счастье объектно-реляционный подход?
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36536874
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может просто использовать, зная достоинства и недостатки? :)
Г.Олди Старое доброе зло Стена вставала над миром. Величественная в неумолимости рока. Два цвета, которые лишь в страшном сне могут смешаться друг с другом. Враг с врагом. Сохранив первозданную чистоту. Впервые от начала времен — плечом к плечу. Вместе. Черное и белое. Воинства Света и легионы Тьмы. Беспощадные мортиферы и светозарные белларумы, мрачные феррорки и благородные альбасанктусы, зловещие либитинии и вдохновенные кандиды, смертоносные инфернефусы и гневные алакритасы, ощерившиеся бестистраги и полные решимости люкс-дефенсоры…

Стена вставала над миром. Готовясь очистить лицо бытия от мерзкой накипи, бурой пены, скопища уродцев, презревших величие идеалов, опозоривших грандиозное противостояние Порядка и Хаоса, Добра и Зла, Тьмы и Света.
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36537126
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может просто использовать...Все вышенаписанное основано на практике использования, это не измышления. Если нужны конкретные примеры, их есть у меня :) А вот есть ли примеры успешного использования ОР-подхода? Честно говоря, сомневаюсь. Дискуссия "о 3-х инсертах" в соседнем топике меня лишний раз в этом убеждает.
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36537443
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Web-приложение? Интерфейсом прячем недостатки одного, выставляем достоинства другого. Может я чего-то не понимаю, или в каталоге решений партнеров сплошной обман и надувательство?
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36537502
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отличный пример: писать web-приложение можно по-разному. Можно напрямую работать с БД из js-кода, используя возможности CSP, а можно инкапсулировать работу с БД в серверные методы.
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36537665
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew_tcvetsikhДоброго времени суток. Есть вопрос по моделированию связей между сущностями. Каше предоставляет 2 варианта:
...
Есть ли преимущества у одного из подхода перед другим?
Первый подход

Второй подход (пятая характеристика)
Для случаев не покрываемых relationship Вы можете явно добавить foreign key .
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36548836
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovА может просто использовать...Все вышенаписанное основано на практике использования, это не измышления. Если нужны конкретные примеры, их есть у меня :) А вот есть ли примеры успешного использования ОР-подхода? Честно говоря, сомневаюсь. Дискуссия "о 3-х инсертах" в соседнем топике меня лишний раз в этом убеждает.

Он даже теоретически не может принести облегчения:)
Хуже другое: ни в Р, ни в ОО, ни в ОР связи между объектами не поддерживаются: 1) ссылки - это не связи (более того, свойством обекта не может быть другой объект) 2) и, если я правильно понимаю, при использовании Relationship мощность связи М:М не поддерживается:)
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36549069
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бредесли я правильно понимаю, при использовании Relationship мощность связи М:М не поддерживается:)
Только через третью таблицу...
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36551282
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaБредесли я правильно понимаю, при использовании Relationship мощность связи М:М не поддерживается:)
Только через третью таблицу...

Это и говорит о том, что связи принципиально не поддерживаются (см., например, тему "Зачем нужны связи" в разделе Проектирование БД):)
Так что Cache еще очень далеко до объектной СУБД (не в смысле ООП, а в прямом смысле:)).
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36551366
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БредТак что Cache еще очень далеко до объектной СУБД (не в смысле ООП, а в прямом смысле:)).
Я как-то не очень переживаю по этому поводу...
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36552385
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, спасибо :)
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36553880
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaБредТак что Cache еще очень далеко до объектной СУБД (не в смысле ООП, а в прямом смысле:)).
Я как-то не очень переживаю по этому поводу...
Вы же программист, наверное:) Как же Вы можете переживать по поводу того, что у Вас всегда есть работа:)
Вот "Р"СУБД и были созданы для того, чтобы дать работу массе программистов. IS пошли этим же путем. Вполне логично:) Жванецкий ясно выразил эту тенденцию, и этот стиль жизни, так сказать: "паровозы для машинистов, магазины для продавщиц, университеты для преподавателей, больницы для врачей". Все правильно:)
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36553933
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бред, согласитесь, Cache все-таки шаг вперед. Возможно маленький с точки зрения "правильных" теорий, но вперед. Или Вы хотите послушать, что говорят те самые конечные пользователи (ради которых все и делается) по поводу объектного навигатора?
Бред"Р"СУБД и были созданы для того, чтобы дать работу массе программистов О как... Надеюсь, Вы это несерьезно?
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36554010
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТолько через третью таблицу...
Хм...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
/// Многие слева
Class test.B Extends (%Persistent, %Populate) {
Property Name As %String;
///Ссылаемся на один
Relationship C As test.C [ Cardinality = one, Inverse = Bs ];
///Ссылаемся на много 
Relationship Cs As test.C [ Cardinality = many, Inverse = B ];
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
/// Многие с другой стороны
Class test.C Extends (%Persistent, %Populate) {
Property Name As %String;
///Ссылаемся на один 
Relationship B As test.B [ Cardinality = one, Inverse = Cs ];
///Ссылаемся на много
Relationship Bs As test.B [ Cardinality = many, Inverse = C ];
}

Код: plaintext
1.
2.
3.
 d ##class(test.B).Populate( 5 )
 d ##class(test.C).Populate( 10 )
 d ##class(test.B).Populate( 5 )
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36554043
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintХм...
И чего ты с этим "Хм" дальше будешь делать? Какую например задачу решать?
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36554198
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, задачу реализации отношения многие ко многим не только через третью таблицу ;)
Например, сделать на Cache объектную БД, в которой будут "правильные" отношения между "объектами". А "хм.." будет уровнем реализации, скрытый от пользователя интерфейсом.
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36554416
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintзадачу реализации отношения многие ко многим не только через третью таблицу ;)
Вот только реализацию "чего" ты сделал? Имеется ввиду в практическом плане... Или пример придумать уже не хватает сил?
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36554483
2acid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
реализация "авторы - книги" не подойдет ?
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36554486
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa. Не, ну так не пойдет. Я же привел пример. Или прочитать "уже не хватает сил". Два "Объекта" связанных "отношением" многие-ко-многим. Вы хотите сказать, что это не будет работать или этим нельзя пользоваться?
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36554564
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintэтим нельзя пользоваться?Именно. Представьте, что это авторы-книги. У 1 автора м.б. несколько книг. У 1 книги - несколько авторов. Пока все хорошо :) Но вот вы решили удалить из БД книгу (ошибочно введенную, например, да мало ли по какой причине). Как вы это сделаете? Не удалив всех ее авторов, вы книгу не удалите.
Введя промежуточный объект (e.g. "авторство"), связанный с книгой и с автором отношениями 1:M, мы эту проблему снимаем. Если продолжать использовать Relationship, то удаление книги потребует предварительного удаление всех дочерних "авторств" - но не авторов.
Сторонники "чисто объектного" подхода хотели бы, чтобы связь выступала как отдельная сущность (хотя и нехорошо так ее называть :), которая может иметь атрибуты и т.д. Но мне кажется, что это не принципиально - нагрузить атрибутами промежуточный объект (таблицу), или саму связь.
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36554631
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2acidреализация "авторы - книги" не подойдет ?
Для практического применения - нет.
...
Рейтинг: 0 / 0
Моделирование связей между сущностями
    #36554641
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintДва "Объекта" связанных "отношением" многие-ко-многим.
"многие-ко-многим" тоже нужно взять в кавычки...

doublefintВы хотите сказать, что это не будет работать или этим нельзя пользоваться?
Вот про использование и хочется от тебя примеры услышать. Сам-то пока так и не могу придумать где такое применить можно на практике.
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 1 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Моделирование связей между сущностями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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