|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
Допустим есть документ (поля, атрибуты, все как положено), заполняемый несколькими пользователями. По части полей идет разделение доступа по ролям. Но, другие доступны для нескольких пользователей... И необходимо соблюсти версионность и историчность. Как в word. Кс делать лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2007, 08:40 |
|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
AlexsalogДопустим есть документ (поля, атрибуты, все как положено), заполняемый несколькими пользователями. По части полей идет разделение доступа по ролям. Но, другие доступны для нескольких пользователей... И необходимо соблюсти версионность и историчность. Как в word. Кс делать лучше?А вчем проблема? Делать также как и во всевозможных RCS/CVS Заблокировал, Изменил, Снял блокировку - изменения записались куда надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2007, 15:50 |
|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
Скорее: 1. Заблокировал на запись/удаление. 2. Изменил. 3. Если изменеия подтверждаются то п.4, если нет, то п.5. 4. Создаём новую запись с меткой кто изменил, когда и номер версии. Туда копируем тек. запись с изменениями. 5. Разблокируем текущую запись. Если нужно, то можно ввести поле-флаг для обозначения последней (актуальной) записи, чтобы не искать каждый раз последнюю. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2007, 18:15 |
|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
AlexsalogДопустим есть документ (поля, атрибуты, все как положено), заполняемый несколькими пользователями. По части полей идет разделение доступа по ролям. Но, другие доступны для нескольких пользователей... И необходимо соблюсти версионность и историчность. Как в word. Кс делать лучше? Я когда-то применял для решения похожей задачи (хранение истории изменений свойств объектов переменной структуры) EAV, причём и у сущности "instances", и у сущности "property values" были свойства "isActual", "creationDate", "creator". Соответственно, ничего не удалялось, просто объявлялось актуальным. Работало, но было сложно. Да и реализация поддержки целостности такой структуры и распределния полномочий - изобретение велосипеда, "СУБД над СУБД". Наверное, есть решение лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2007, 11:03 |
|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
Возможно, тема давно закрылась но попробую предложить Свои логи мы храним готовым SQL в текстовом виде перед удалением записи сохраняем текст SQL Код: plaintext
перед редактированием записи сохраняем текст SQL Код: plaintext
В вашем случае, перед редактированием записи можно сохранять строку вида Код: plaintext
Доступ к значениям полей получаем, составив и выполнив SQL запросы Код: plaintext 1. 2.
Такой метод, наверное, не подойдет для мультимедийных данных, но для бухгалтерии проще не придумать ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2007, 14:33 |
|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
Хотел красиво, получилоси как сегда... :-( Доступ к значениям полей получаем, составив и выполнив СЛЕДУЮЩИЕ SQL запросы Код: plaintext 1. 2.
точнее запрос с подзапросом Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2007, 14:56 |
|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
sereginseregin так и не понял зачем хранить готовый SQL и что это дает ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2007, 15:01 |
|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
Историю изменений можно хранить сложными структурами со свойствами isActual, creationDate, creator и т.д., для каждого значения, как предлагалось выше... А можно, перед каждым изменением, сохранять текстовую строку со старыми значениями, которую затем распарсивать. Можно использовать и XML структуру. Но в СУБД с SQL-ем попроще. Если история изменений используется только для отката старых значений, сохраняйте готовый INSERT перед удалением. В таком случае восстановление удаленной информации осуществится нажатием нескольких клавиш. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2007, 16:58 |
|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
Гм. sereginsereginИсторию изменений можно хранить сложными структурами со свойствами isActual, creationDate, creator и т.д., для каждого значения, как предлагалось выше... А можно, перед каждым изменением, сохранять текстовую строку со старыми значениями, которую затем распарсивать. Ну и как получить из распарсенного SQL-я эти самые creationDate, creator и т.п. если мне надо ? sereginsereginЕсли история изменений используется только для отката старых значений, сохраняйте готовый INSERT перед удалением. В таком случае восстановление удаленной информации осуществится нажатием нескольких клавиш. а что мешает создавать этот insert только когда он нужен ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2007, 17:53 |
|
Поддержка исправлений и версий
|
|||
---|---|---|---|
#18+
AviantГм. sereginsereginИсторию изменений можно хранить сложными структурами со свойствами isActual, creationDate, creator и т.д., для каждого значения, как предлагалось выше... А можно, перед каждым изменением, сохранять текстовую строку со старыми значениями, которую затем распарсивать. Ну и как получить из распарсенного SQL-я эти самые creationDate, creator и т.п. если мне надо ? Создаете таблицу Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Теперь, используя триггеры (или другие инструменты), для тех таблиц БД которые вам важны сохраняете в my_log одной строкой старые значения тех полей, которые вам необходимы. Здесь есть автор, дата и версионность с историчностью. Если старые значения сохранять в виде Код: plaintext
то распарсивать их можно, составив динамический SQL Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2007, 08:13 |
|
|
start [/forum/topic.php?fid=33&msg=34738660&tid=1549018]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
134ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 246ms |
0 / 0 |