powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение возможных ссылок на документы
5 сообщений из 5, страница 1 из 1
Хранение возможных ссылок на документы
    #32683825
Dr_Mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(Основная сущность - документы.)

У документа есть реквизиты, например - "Комментарий". Нужно добавить возможность в этом комментарии указывать ссылки на соотносящиеся документы. А их количество заранее неизвестно.

Думаю пока реализовать путем добавления еще одной таблицы со связями "Документ" - "Ссылающиеся на него документы" - "Из какого реквизита ссылаются".

Может, существует более изящное решение?
...
Рейтинг: 0 / 0
Хранение возможных ссылок на документы
    #32683888
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто в Документ добавь атрибут "Ссылается на..." - Null-able (т.е. он может ни на кого не ссылаться, либо ссылаться на один другой документ). Если же один документ может ссылаться на несколько других - тогда вспомогательную табличку нужно, ничего не поделаешь...
...
Рейтинг: 0 / 0
Хранение возможных ссылок на документы
    #32684091
Dr_Mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все равно неудобно получается - еще какой-то дополнительный список будет висеть по нескольким реквизитам.

Думаю, придется заняться написанием чего-то по типу парсера - в поле будет храниться так сказать "гипертекст" с прямыми ссылками на документы.
Правда, чувствую, что поморочусь с отображением туда-обратно этого "гипертекста" :-((
...
Рейтинг: 0 / 0
Хранение возможных ссылок на документы
    #32684103
Dedushka Mazai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не изобретай америку. у тебя связь многий-ко-многим - решается с помощью связующей таблицы create table(docid int, refdocid int). а с парсером точно геморроя поимеешь
...
Рейтинг: 0 / 0
Хранение возможных ссылок на документы
    #32684151
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dr_MikeВсе равно неудобно получается - еще какой-то дополнительный список будет висеть по нескольким реквизитам.

Думаю, придется заняться написанием чего-то по типу парсера - в поле будет храниться так сказать "гипертекст" с прямыми ссылками на документы.
Правда, чувствую, что поморочусь с отображением туда-обратно этого "гипертекста" :-((
Если действительно аттрибуты самих документов не так важны в базе данных, то можно посмотреть в сторону XML. Правда тут уже все будет зависеть от конкретной реализации СУБД, но например на Sybase ASA в "оправданных" случаях я делаю так:
1. Храню дополнительные и не особо нужные аттрибуты в поле с типом XML.
2. Записываю в них данные через специальные возможности ASA, позволяющие модифицировать данные в XML или же генеря XML через SELECT, у которого достаточно много заточенных под это опций.
3. Работаю с этими аттрибутами, используя LATERAL соединение (внутреннее соединение JOIN) и функцию OPENXML. Например если у меня в XML поле на каждую запись храниться такая структура:
Код: plaintext
1.
2.
3.
<params>
  <param id="Author">ASCRUS</param>
  <param id="CreateDate"> 2004 . 09 . 07 </param>
</params>
то запрос получения этих аттрибутов будет такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT d.Document_id, a.ParamName, a.ParamValue
FROM Documents d,
  LATERAL (
    SELECT ParamName, ParamValue
    FROM OpenXML( d.Attributes, '/params/param' )
    WITH ( ParamName CHAR( 20 ) '@id', ParamValue LONG VARCHAR 'text()')
  ) AS a
WHERE d.Document_id =  1 ;
На выходе получим:
Код: plaintext
1.
2.
Document_id, ParamName, ParamValue
 1 , Author, ASCRUS
 1 , CreateDate,  2004 . 09 . 07 
Как видим LATERAL соединение позволяет для каждой записи главного запроса вызвать указанный подзапрос (или хранимую процедуру, в которую можно передать в качестве параметров поля главного запроса). Не знаю как у других СУБД с поддержкой такого соединения, знаю, что в Юконе вроде как планировали тоже такое сделать (кстати лучше им сделать, реально можно и многие аггрегирующие сложные запросы через это соединение неплохо разруливать на оптимизаторе - ASA например использует для такого соединения специальные алгоритмы и подзапрос разворачивается и выполняется в корневом плане с удовлетворительной скорость, в отличие от subquery, которые реально бы подтормаживали).

В итоге через XML можно хранить и обрабатывать любые дополнительные аттрибуты или массивы, причем деревянная структура XML позволяет описывать множество уровней хранения, а парсер обрабатывать любой указанный уровень вложенности, что тоже в принципе является преимуществом.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение возможных ссылок на документы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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