Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация сравнений версий сложных документов / 21 сообщений из 21, страница 1 из 1
18.05.2015, 17:39
    #38961886
Реализация сравнений версий сложных документов
Всем привет.
На данный момент в системе ведутся документы определённой структуры. Документом в системе является набор строк из разных таблиц, которые взаимосвязаны между собой. По определённому действию пользователи могут скопировать документ для параллельного внесения в него изменений. Данное действие полностью копирует в базе строки документа в те же самые таблицы. При этом таблица, которая хранит заголовки документа, ссылается на специальную таблицу архивов, где при каждом копировании добавляется строка, и заголовок копии документа уже ссылается на новую строку.
Появилась следующая задача: необходима возможность сравнения разных версий одного и того же документа. Подскажите, пожалуйста, какие уже есть основные подходы к решению данной проблемы.
...
Рейтинг: 0 / 0
18.05.2015, 18:57
    #38961967
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
быстро дешево и сердито - считаете хэш (crc, md5 или еще что нибудь) от всех полей, всех строк документа и сравниваете его.
...
Рейтинг: 0 / 0
19.05.2015, 08:07
    #38962190
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
Марков Илья,

так а какие подходы ?
напиши процедуру, как процедура кончается документа, только чтобы сравнивала, а не копировала.

Контрольные суммы применять так бессмысленно, потому что ты примерно одно усилие будешь затрачивать как на подсчет контрольной суммы, так и на полное сравнение. Вот если считать сумму в процессе пересечения, и хранить, то потом можно будет легко сказать, разные ли документы (при чем чтобы сказать, что они одинаковы, надо снова сравнивать документы)
...
Рейтинг: 0 / 0
19.05.2015, 08:41
    #38962208
Реализация сравнений версий сложных документов
SERG1257быстро дешево и сердито - считаете хэш (crc, md5 или еще что нибудь) от всех полей, всех строк документа и сравниваете его.

MasterZivтак а какие подходы ?
напиши процедуру, как процедура кончается документа, только чтобы сравнивала, а не копировала.

Контрольные суммы применять так бессмысленно, потому что ты примерно одно усилие будешь затрачивать как на подсчет контрольной суммы, так и на полное сравнение. Вот если считать сумму в процессе пересечения, и хранить, то потом можно будет легко сказать, разные ли документы (при чем чтобы сказать, что они одинаковы, надо снова сравнивать документы)

я, наверное, не точно выразился :) Под сравнением я имел виду нормальное визуальное сравнение. То есть необходимо видеть как изменился один вариант документа по сравнению с другим.

У меня только приходит в голову, так это для каждого элемента документа (строки) создавать уникальный идентификатор, который будет копироваться из версии в версию. И потом по этим идентификаторам сравнить элементы.
Может есть другие пути решения)
...
Рейтинг: 0 / 0
19.05.2015, 09:55
    #38962263
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
Марков Илья,

Пользуйте уже готовые системы и не заморачивайтесь. Все уже "украдено" до вас.
Ну а если изобретаете свой "велосипед" то сравнивайте по знакам. При этом если документ не мелких размеров то логичнее разбивать на небольшие куски которые потом и сравнивать, так будете меньше тратить времени если правок мало.
...
Рейтинг: 0 / 0
19.05.2015, 10:17
    #38962293
Реализация сравнений версий сложных документов
Злой БобрМарков Илья,

Пользуйте уже готовые системы и не заморачивайтесь. Все уже "украдено" до вас.
Ну а если изобретаете свой "велосипед" то сравнивайте по знакам. При этом если документ не мелких размеров то логичнее разбивать на небольшие куски которые потом и сравнивать, так будете меньше тратить времени если правок мало.

Не совсем понял. Например, какие готовые системы? Я и хочу узнать какие есть лучшие практики в решении этого вопроса)
Документ, да, иногда бывает большим. Но структура документов и так сама по себе делится на 3 куска.
...
Рейтинг: 0 / 0
19.05.2015, 10:23
    #38962304
Реализация сравнений версий сложных документов
На самом деле мне нужно что-то подобное как например в ГАРАНТе. Интересно как там реализовано хранение документов, их изменение, сравнение и пр.
...
Рейтинг: 0 / 0
19.05.2015, 10:24
    #38962305
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
Марков ИльяНапример, какие готовые системы?Например, вот - www.ixbt.com/soft/abbyy-comparator.shtml

А в данном случае надо подробно смотреть как именно документы и их версии хранятся в базе. Возможно, получится обойтись всего одним SQL-запросом.
...
Рейтинг: 0 / 0
19.05.2015, 10:28
    #38962312
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
Марков Ильядля каждого элемента документа (строки) создавать уникальный
идентификатор,
А сейчас у них нет первичного ключа?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.05.2015, 13:54
    #38962676
Реализация сравнений версий сложных документов
miksoftМарков ИльяНапример, какие готовые системы?Например, вот - www.ixbt.com/soft/abbyy-comparator.shtml

А в данном случае надо подробно смотреть как именно документы и их версии хранятся в базе. Возможно, получится обойтись всего одним SQL-запросом.

Спасибо. Интересное приложение :) но это конечно не то
У меня есть только один тип документа. Вкратце структура базы данных приведена во вложении. Пользователи копируют версии документов. При копировании версии также копируются все её дочерние строки с новыми идентификаторами в первичных и внешних ключах. Строки справочников не копируются.
...
Рейтинг: 0 / 0
19.05.2015, 13:57
    #38962679
Реализация сравнений версий сложных документов
Dimitry SibiryakovМарков Ильядля каждого элемента документа (строки) создавать уникальный
идентификатор,
А сейчас у них нет первичного ключа?


В данном случае под уникальным идентификатором я не подразумевал первичный ключ) Первичный ключ само собой есть. Я имел ввиду, что для каждого элемента в документе (строки в базе) во всех версиях иметь один и тот же идентификатор.
...
Рейтинг: 0 / 0
19.05.2015, 15:42
    #38962865
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
Марков Илья, система сбалансированных показателей? :)

Итого, как я понял, при копировании одного документа у вас появляется копия, которую потом изменяют, и вам хотелось сравнить оригинал и копию и получить разницу между этими двумя документами.
Если "ДА!", то:
1) определитесь, информация о каких изменениях волнует пользователя при сравнении;
2) после чего можно попробовать снять требования или предложиьт варианты представления этой информации.

Вариант с лёту:
1) "хочу видеть разницу между данными, которые печатаются на бланке документа"
2) вариант: формируем отчётом два текстовых файла или xml - отдаём их оба на откуп существующим утитлитам по сравнению содержания таких файлов.
...
Рейтинг: 0 / 0
19.05.2015, 16:16
    #38962911
Реализация сравнений версий сложных документов
АнатоЛой,

Нет) система ведения государственных программ :)

АнатоЛойИтого, как я понял, при копировании одного документа у вас появляется копия, которую потом изменяют, и вам хотелось сравнить оригинал и копию и получить разницу между этими двумя документами.

Да, так и есть. Сейчас как раз пытаюсь получить основные требования. Завтра человек выходит из отпуска и я буду с ним разговаривать. Но я точно знаю, что сейчас попросят один отчёт для сравнения, потом другой, потом десятый. Поэтому хотелось бы изначально попытаться заложить такую структуру, которая будет в большинстве случаях удобной)))

Вариант с лёту сделать не могу. Причина вот в чём (более подробное описание задачи):
1) все версии документов утверждаются;
2) копировать можно только утверждённые документы (для внесения в них поправок);
3) сравнение версий нужно как раз для утверждения. То есть этот процесс будет постоянным. Сначала сравнивают неутверждённую версию с утверждённой, потом только новую версию утверждают. И весь этот процесс должен происходить в системе.

P.S. сейчас основная задача состоит в том, чтобы сравнивать копию с оригиналом. Но я точно знаю, что основным пользователям системы, которые ведут свои документы, было очень полезно сравнение старых версий с более новыми, между которыми может быть несколько версий. Но изначально я ориентируюсь на основную задачу.
...
Рейтинг: 0 / 0
19.05.2015, 16:23
    #38962927
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
Марков Ильясейчас основная задача состоит в том, чтобы сравнивать копию с
оригиналом.
Саму систему переделывать можно или ты делаешь внешнюю нашлёпку?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.05.2015, 16:47
    #38962977
Реализация сравнений версий сложных документов
Dimitry Sibiryakov,

Можно. Но тоже не полностью, так как есть некоторые ограничения в используемой платформе для проектирования систем (внутренний продукт). Но их по сути тоже можно будет решить некоторыми доработками :)
...
Рейтинг: 0 / 0
19.05.2015, 16:52
    #38962985
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
Марков ИльяЯ имел ввиду, что для каждого элемента в документе (строки в базе) во
всех версиях иметь один и тот же идентификатор.
Да, это будет правильно. И первичный ключ сделать из этого идентификатора + номер версии.
Это позволит делать copy-on-write и тогда нахождение различий сведётся к выборке всех
записей с версиями между двумя заданными и их компоновке для вывода пользователю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.05.2015, 16:54
    #38962993
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
Марков ИльяВариант с лёту сделать не могу. Причина вот в чём (более подробное описание задачи):
1) все версии документов утверждаются;
2) копировать можно только утверждённые документы (для внесения в них поправок);
3) сравнение версий нужно как раз для утверждения. То есть этот процесс будет постоянным. Сначала сравнивают неутверждённую версию с утверждённой, потом только новую версию утверждают. И весь этот процесс должен происходить в системе.


И в чём проблема для реализации моей идеи?
А) Тебе нужна идея, как сделать СВОЙ велосипед? Смотри готовые продукты ...
Б) Ты не можешь использовать внешнее приложение? Ищи соответствующее приложение с API или просто API:
- двух xml-файлов ;
- двух текстовых файлов ...
...
Рейтинг: 0 / 0
19.05.2015, 16:59
    #38963008
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
Марков Илья, в конце-концов, сформировал для каждого документа отчёт в формате Word, а потом программно заставил Word сравнить два документа и отобразить пользователю :).
...
Рейтинг: 0 / 0
22.05.2015, 13:12
    #38966266
Реализация сравнений версий сложных документов
Dimitry Sibiryakov,

Спасибо. Копирование при записи, наверное, самый лучший вариант. Но к сожалению я не могу реализовать такую сборку версий на своей платформе :(
Поэтому, наверное, оставлю полное копирование в текущей реализации и добавлю спец. идентификатор, который будет что-то типа естественного ключа для каждого элемента документа во всех версиях. А при изменении строк я буду сравнивать их со строками в предыдущих версиях и в случае чего буду проставлять статус "Изменена". Если строка будет добавляться, то буду проставлять статус "Добавлена", а при удалении - "Удалена".
Но с изменениями есть некоторая проблема: для каких-то форм сравнения одна и та же строка изменена в случае изменения одних атрибутов, для каких-то форм - в случае изменения других атрибутов. А при каждом изменении строки добавлять для каждого изменяемого атрибута строку в спец. таблицу не очень радует :( Как мне здесь лучше поступить? Сравнивать строки при открытии отчётов? Либо сделать вместо статуса "Изменена" в поле записывать двоичные числа, где каждому биту будет соответствовать атрибут?
...
Рейтинг: 0 / 0
22.05.2015, 13:16
    #38966271
Реализация сравнений версий сложных документов
АнатоЛой,

Проблема в том, что сравнение должно происходить в структурированном виде, включая использование OLAP-системы)
Но твоё предложение я обязательно учту))) сравнение печатных документов с помощью приложений со своими интерфейсами очень полезная и интересная идея. Но пока задача состоит не в этом :)
...
Рейтинг: 0 / 0
31.05.2015, 18:46
    #38972764
Goffman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация сравнений версий сложных документов
ну поставили на update признак "Запись изменена", а дальше что? В таблице 20 полей. Как узнать какое поле было изменено? Будете сравнивать каждое поле? Или на каждое поле отдельный признак заводить?
Что будете делать при изменении значения какого-нибудь справочника? Во всех документах будете показывать ИЗМЕНЕНО? Или будете вести версии значений и сопоставлять их с версиями документов?
Как будете вести версии самих отчетов - например в старой версии сортировка задач по наименованию, а в новой - по приоритету - это считается за изменение или нет.
еще один нюанс - например в отчете есть поле ЦЕЛИ, где цели перечислены через запятую. Удаление записи из этой таблицы будет для пользователя отображаться как изменение или как удаление?
это лишь некоторые моменты, советую над ними подумать прежде чем браться за реализацию.
задача сомнительная, проблем много, выхлопа мало - как уже советовали, для начала лучше остановиться на варианте сравнения pdf, doc, и удобней и надежней
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация сравнений версий сложных документов / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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