powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / версионность документов
25 сообщений из 28, страница 1 из 2
версионность документов
    #39531877
AndrewVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.


озадачился собственно сабжем. Именно версионность. а не логирование изменений.

вроде все на первый взгляд просто. для однотабличного документа.
делаем таблицу ревизий.
в другую таблицу выносим неверсионируемые данные (nonversioned) , во вторую версионируемые (versions).

ну и собственно в nonversioned указывает ИД текущей версии. а в versions сами данные версии и ссылку на версию, к которой они относятся.

А вот если двухтабличный документа. где есть шапка и тело.
для шапки так же делаем версионность по вышеописанной схеме. ну и вроде как так же для тела. те будет 4 таблицы. две для шапки и две для тела.

Но возникает такой вопрос. есть документ. у него тело содержит допустим 1000 позиций.
Создаем ему версию. меняется что то в шапке. да хотя бы банальное примечание.
В таблицах шапки создаем версию. а как быть с телом? теоретически если поменялось примечание в шапке, то в позициях ничего не менялось.
Я правильно понимаю, что все же придется скопировать в таблицах тела все 1000 записей и сопоставить их с новой версией шапки?

И далее делаем изменение данных двух записей тела. как быть с неизменившимися записями тела документа?
...
Рейтинг: 0 / 0
версионность документов
    #39531878
AndrewVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И далее.

у этого версионированного документа есть дочерние.
допустим спецификация - договор.
...
Рейтинг: 0 / 0
версионность документов
    #39531948
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewVL,

Если отвлечься от заголовков и шапок, вопрос сводится к такому.

Вот у тебя, скажем, огромный текстовый файл, и ты хочешь вести его версии.

Первый вариант - копировать весь файл целиком для каждой версии: file_001.txt, file_002.txt и т.д. Преимущества - просто и надежно. Недостатки - пропадает место. Если версий от силы десяток, как это бывает с бумажными документами, вполне применимо.

Второй вариант - писать диффы. То ли от первоначальной версии вести, и суммированием диффов собирать текущее состояние, то ли, наоборот, вести текущую версию файла, а историю изменений помнить диффами, и при необходимости собирать через них любую промежуточную версию вплоть до превоначальной. Преимущества и недостатки обратные - сложно, зато экономично. Если это исходники линукса, которые правит весь мир - другого выхода нет.

Собственно, и в базе данных надо выбрать один из этих подходов. А затем уже думать над реализацией в БД.
...
Рейтинг: 0 / 0
версионность документов
    #39531956
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewVLЯ правильно понимаю, что все же придется скопировать в таблицах тела все 1000 записей и сопоставить их с новой версией шапки?

И далее делаем изменение данных двух записей тела. как быть с неизменившимися записями тела документа?

Здесь может помочь идея, что "версия документа" - это отдельная сущность (не шапка документа, а вообще отдельная таблица).

А всякие записи документов (шапка, детали, детали деталей) могут относиться не к одной, а ко многим версиям, если они в ходе этих версий не менялись. То есть "детали-версии" должна быть N-N таблица.
...
Рейтинг: 0 / 0
версионность документов
    #39531976
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альтернатива — версии задавать не номером ревизии, а интервалом дат, в котором действуют определенные данные.
Правда это не версионность, а историчность, и у нее свои особенности.
...
Рейтинг: 0 / 0
версионность документов
    #39532027
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewVL,

Cane Cat Fisher описал оба варианта правильно. Большинство выбирает 2 вариант. Ну а реализация уже зависит от СУБД и кривизны рук разработчика.
...
Рейтинг: 0 / 0
версионность документов
    #39532051
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Альтернатива — версии задавать не номером ревизии, а интервалом дат, в котором действуют определенные данные.
Правда это не версионность, а историчность
... и именно поэтому она не покрывает всех кейсов версионности.
...
Рейтинг: 0 / 0
версионность документов
    #39532795
AndrewVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
собственно такую схему нарисовал


-- хранятся версии документов по типам. непосредственно номера
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE DOCS_VER (
    C          INTEGER NOT NULL, --ПК
    VER          INTEGER NOT NULL, --ИД версии
    PARENT_ID  INTEGER, -- родительская версия
    DOCTYPE    SMALLINT NOT NULL  -- тип документа (может быть много документов)
);


-- общие шапки ВСЕХ документов
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE DOCS (
    C            INTEGER NOT NULL, --ПК
    FLAG1   INTEGER NOT NULL, --общий для всех документов атрибут
    FLAG2   INTEGER NOT NULL, --общий для всех документов атрибут
    FLAG3   INTEGER NOT NULL, --общий для всех документов атрибут
    DOCS_VER_ID  INTEGER NOT NULL, -- ссылка на ТЕКУЩУЮ версию
    DOCTYPE      SMALLINT NOT NULL -- тип документа (избыточно)
);




Собственно в DOCS хранятся все заголовки всех типов документов. на каждый документ вне зависимости от количества версий одна запись

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE DOCS1 (
    C            INTEGER NOT NULL, --ПК
    DOCS_ID   INTEGER NOT NULL, --ссылка на общую таблицу заголовков
    data1   INTEGER NOT NULL, 
    data2   INTEGER NOT NULL, 
    data3   INTEGER NOT NULL, 
    ........
    DOCS_VER_ID  INTEGER NOT NULL -- ссылка на таблицу версий. к какой версии документа принадлежит строка.
);



Этих таблиц много по количеству типов документов. на один документ в DOCS может быть несколько записей в DOCS1. по количеству версий. текущая версия в этой таблице - docs1.docs_id = docs.C and docs1.docs_ver_id = docs.docs_ver_id

собственно вроде и все.


а дочерние документы линкуются к docs. а текущая версия подгребается по docs1.docs_id = docs.C and docs1.docs_ver_id = docs.docs_ver_id. проблем с изменением родительского документа при наличии дочернего нет. ну только предупредить пользователя чтоб обратил внимание.

Может что то и избыточно.

например если без версий получал все документы одного типа так

Код: sql
1.
select * from docs1



теперь так

Код: sql
1.
2.
3.
select * from docs
left join docs1 on docs1.docs_id = docs.C and docs1.docs_ver_id = docs.docs_ver_id
where docs.DOCTYPE = 1



слегка непривычно и можно временами путаться )))

ну и надо наверно в триггерах на DOCS1 сделать проверки чтоб не торнули запись из DOCS не того типа
...
Рейтинг: 0 / 0
версионность документов
    #39532817
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewVL,

Честно говоря, как-то мудрено вышло.
...
Рейтинг: 0 / 0
версионность документов
    #39532831
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Вас как-то странно сделано, Версии - родительская таблица к Документам, хотя должно быть наоборот.
...
Рейтинг: 0 / 0
версионность документов
    #39533328
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewVL,

Мне на скорую руку что-то такое представилось. Поможет?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
версионность документов
    #39907807
maslinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher
AndrewVL,

Мне на скорую руку что-то такое представилось. Поможет?



Doc_header это для чего таблица?
...
Рейтинг: 0 / 0
версионность документов
    #39907904
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maslinka,

фиксированная часть документа, значение не зависит от версии.
В общем случае - бессмысленная часть, ибо константным значением может быть лишь ПК, и то не всегда.
...
Рейтинг: 0 / 0
версионность документов
    #39907907
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
фиксированная часть документа, значение не зависит от версии.
В общем случае - бессмысленная часть, ибо константным значением может быть лишь ПК, и то не всегда.

Без идентификационной части документа возникает вопрос - версия чего, просто сама по себе в воздухе?

Второй вопрос, точнее первый - зачем раскопали тему 2017 года?
...
Рейтинг: 0 / 0
версионность документов
    #39907909
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Без идентификационной части документа возникает вопрос - версия чего, просто сама по себе в воздухе?

ПК не меняется. :)
...
Рейтинг: 0 / 0
версионность документов
    #39907910
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
ПК не меняется. :)

Да да, пользователям так важно знать id непонятно чего ...
...
Рейтинг: 0 / 0
версионность документов
    #39907912
maslinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
ёёёёё
фиксированная часть документа, значение не зависит от версии.
В общем случае - бессмысленная часть, ибо константным значением может быть лишь ПК, и то не всегда.

Без идентификационной части документа возникает вопрос - версия чего, просто сама по себе в воздухе?

Второй вопрос, точнее первый - зачем раскопали тему 2017 года?
раскопала потому что задача актуальная. ме сейчас нужно такую же решить. в общем, опираюсь на эту схему.
...
Рейтинг: 0 / 0
версионность документов
    #39907914
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
ёёёёё
ПК не меняется. :)

Да да, пользователям так важно знать id непонятно чего ...

Пользователи ни при чем. Программисты - при чем.

Если пользователь изменит наименование файла, файл останется тем же самым?
...
Рейтинг: 0 / 0
версионность документов
    #39907915
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maslinka
опираюсь на эту схему.

Ну и зря.
...
Рейтинг: 0 / 0
версионность документов
    #39907916
maslinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
maslinka,

фиксированная часть документа, значение не зависит от версии.
В общем случае - бессмысленная часть, ибо константным значением может быть лишь ПК, и то не всегда.
не поняла. можете тогда всю схему пояснить, пожалуйста?
...
Рейтинг: 0 / 0
версионность документов
    #39907917
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
Пользователи ни при чем. Программисты - при чем.

Если пользователь изменит наименование файла, файл останется тем же самым?

Нормальные программисты начинают не с фантазий, а с конкретной постановки задачи.

Если у файла есть версионность, то его наименование будет постоянным, новое наименование - новый файл со своей версионностью, но на самом деле все будет зависеть от постановки задачи, в противном случае сферического коня в вакууме можно крутить как хочешь.
...
Рейтинг: 0 / 0
версионность документов
    #39907919
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
все будет зависеть от постановки задачи

Премия Тьюринга?
...
Рейтинг: 0 / 0
версионность документов
    #39907923
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maslinka
не поняла. можете тогда всю схему пояснить, пожалуйста?

Вам задачу поставили, что нужно сделать понимаете?

Как вариант
1.
Документ (идентификационная часть) -> Версия (+ изменяемая часть шапки) -> Состав документа (один -> ко многим)
для каждой новой версии состав дублируется.

2.
Документ -> Версия
Документ -> Версия состава -> Состав документа
Табличка связи Версия - Версия состава, id документа лучше протаскивать насквозь до таблички связи,
можно для разных версий документа подставлять разные версии состава документа, не дублируя каждый раз состав.

3. ... 4. ... и так далее, будут конкретные требования можно думать, иначе можно нафантазировать что угодно
...
Рейтинг: 0 / 0
версионность документов
    #39908156
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewVL,

а тебе версии зачем? В СУБД они используются в основном для обеспечения конкурентного доступа к данным
которые изменяются в данный момент времени. И для откатов. И еще очень редко для ретроспективных просмотров
дейтсвий и аудита.

У тебя есть юзкейс когда пользователь сознательно пошел в систему смотреть версию документа за прошлый год?

Почему я спрашиваю. На коробочном уровне MS-Office документы и так себя версионируют.
Программисты уже лет 20 хранят код под git, svn, mercurial что тоже само по себе версионирует все.

Может тебе вообще не нужна DBMS?
...
Рейтинг: 0 / 0
версионность документов
    #39908162
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нуачо ? Нормальная хотелка, узнать, каким документ был ХХ дней назад.
Особенно если его редактирует много народу.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / версионность документов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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