powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / ненаправленая связь между объектами...
10 сообщений из 10, страница 1 из 1
ненаправленая связь между объектами...
    #34994506
orahome1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обычный случай: нужно хранить в базе связь между объектами (объект представляется строкой в таблице с уникальным идентификатором OBJ_ID).
Нужно организовать логическую связь объекта много ко многим но так чтоб не зависело от направления связи.
Физически можно организовать как таблицу (FROM_OBJ_ID, TO_OBJ_ID, LINK_TYPE_ID) - все внешние ключи, первичный уникальный ключь - все три поля. (третье - тип связи - ссылка на справочник)
Для дого чтобы убрать направленность связи - триггер который при добавлении строки добавляет еще ее противоположное нарпвление или же проверяет есть обратная связь и если есть ругается...

Ну приходят в голову и другие варианты с непринципиальными отличиями, но в любом случае не получается избавится от направленности связи на физическом уровне.
Или можно? что-то ничего более разумного в голову не приходит...
...
Рейтинг: 0 / 0
ненаправленая связь между объектами...
    #34994600
orahome1Обычный случай: нужно хранить в базе связь между объектами (объект представляется строкой в таблице с уникальным идентификатором OBJ_ID).
Нужно организовать логическую связь объекта много ко многим но так чтоб не зависело от направления связи.
Физически можно организовать как таблицу (FROM_OBJ_ID, TO_OBJ_ID, LINK_TYPE_ID) - все внешние ключи, первичный уникальный ключь - все три поля. (третье - тип связи - ссылка на справочник)
Для дого чтобы убрать направленность связи - триггер который при добавлении строки добавляет еще ее противоположное нарпвление или же проверяет есть обратная связь и если есть ругается...

Ну приходят в голову и другие варианты с непринципиальными отличиями, но в любом случае не получается избавится от направленности связи на физическом уровне.
Или можно? что-то ничего более разумного в голову не приходит...
А для чего так извращаться? Если поля не символьные, то, что a=b, что b=a - воспринимается SQL одинаково...
...
Рейтинг: 0 / 0
ненаправленая связь между объектами...
    #34994687
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Храните (реализуется триггером) только FROM_OBJ_ID <=TO_OBJ_ID
Соотвестсвенно в запросах, если нужно проверить (а, b) то
where ... Наименьшее_из(а, b) = FROM_OBJ_ID and Наибольшее_из(а, b) =TO_OBJ_ID
...
Рейтинг: 0 / 0
ненаправленая связь между объектами...
    #34994749
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Link(LINK_ID,LINK_TYPE_ID)
Points4Link(LINK_ID, OBJ_ID)

Link (1,"я связь")
Points4Link(1, ID_одного)
Points4Link(1, ID_другого)

и это можно заставить работать, но ...
вот стоит ли овчинка выделки

IMHO, Mon$te®
...
Рейтинг: 0 / 0
ненаправленая связь между объектами...
    #34995053
Leshij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On Fri, 07 Dec 2007 15:45:44 +0300, orahome1 <nospam@sql.ru>; wrote:

> Обычный случай: нужно хранить в базе связь между объектами (объект
> представляется строкой в таблице с уникальным идентификатором OBJ_ID).
> Нужно организовать логическую связь объекта много ко многим но так чтоб
> не зависело от направления связи.

Links(fromId, toId, linkId).
Хранится только связь в одном направлении, проверка наличия связи идет
через ф-ию isLinkExists(fromId, toId, linkId), к-ая проверяет, есть ли в
базе связь (fromId, toId) *или* (toId, fromId).

> но в любом случае не получается избавится от направленности связи на
> физическом уровне.

Ну если на логическом уровне все чисто и красиво, можно забыть, как оно
физически хранится. По крайней мере пока нет проблем с производительностью
:)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ненаправленая связь между объектами...
    #34995121
orahome1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ModelerR, спасибо - Ваш вариант триггера интереснее :)

4d_monster - В принципе такое решение я встречал на практике и оно хорошо для групповых связей (>2 объектов), но в данном случае наверно излишне.

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

Как тут отметили, в SQL запросах оператор a=b комутативен. Так что стрелка скорее напоминает о том, что связующие поля в реляционной БД должны быть проиндексированы. В общем случае в физической модели отсутствует часть сведений, содержащихся в логической модели. Собственно для того логическое моделирование и проводят, чтобы эти сведения зафиксировать в проектных документах.
...
Рейтинг: 0 / 0
ненаправленая связь между объектами...
    #35019015
BKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BKV
Гость
d
...
Рейтинг: 0 / 0
ненаправленая связь между объектами...
    #35019023
BKV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BKV
Гость
А как оптимизировать хранение связей для получение всех объектов связанных с конкретным?
(Направления связи нет. Есть просто связь)
В этом случае без дублирования записей не обойтись? (Одна в одном направлении, другая в противоположном)
...
Рейтинг: 0 / 0
ненаправленая связь между объектами...
    #35020121
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BKVА как оптимизировать хранение связей для получение всех объектов связанных с конкретным ?
(Направления связи нет. Есть просто связь)
В этом случае без дублирования записей не обойтись ? (Одна в одном направлении, другая в противоположном)
В этом случае дублировать записи не надо. А вот дублирование информации будет, но и это не самое страшное. В зависимости от ситуации, может возникнуть необходимость хранения не только прямых, но и косвенных связей (через потомка).
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / ненаправленая связь между объектами...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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