powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Логирование действий
20 сообщений из 20, страница 1 из 1
Логирование действий
    #39573087
virtuOS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MS SQL.

Как правильно спланировать БД для фиксации заявок от пользователей? Если рассмотреть самый простой случай, когда каждой заявке присваивается номер и есть некий набор обязательных полей для заполнения. У пользователей будут права на внесение изменений в уже заведенные заявки. Также требуется видеть историю изменений, вносимых пользователем по заявке.

Вариант 1:
первая таблица с полями: idTicket (primary key), idUser, stamp (время создания)
вторая таблица содержит idTicket (FK) и набор необходимых параметров. В таблицу осуществляется только операция вставки (insert), последняя вставленная запись соответствует актуальному состоянию.

Вариант 2:
плоская таблица с idTicket и набором параметров. Пользователи имеют права на вставку и обновление записей.
Логирование осуществляется через вставку новых значений во вторую таблицу (например, через конструкцию output)

В первом варианте минусом считаю то, что для получения информации по заявке надо выбирать последнюю запись из второй таблицы (select top(1) ) и джойнить с первой таблицей. Может быть медленно.
Во втором варианте может быть сложно получить данные на определенный момент времени.

Какое решение в данном случае считается наилучшим? Может быть, есть третий вариант?
...
Рейтинг: 0 / 0
Логирование действий
    #39573172
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так объедините оба варианта

virtuOSплоская таблица с idTicket и набором параметров. Пользователи имеют права на вставку и обновление записей.


В таблице имеем два служебных поля ValidFrom и ValidUntil типа datetime. Причем первое при вставке всегда равно CURRENT_TIMESTAMP, а второе некой заведомо большой константе, например '2100-12-31'. При вставке новой версии, обновляется так же запись содержащая в ValidUntil равное '2100-12-31' - в ней значение CURRENT_TIMESTAMP присваивается ValidUntil.
Выборку последней версии осуществляем по ValidUntil='2100-12-31'
Выборку версии на нужный момент времени по @need_date>ValidFrom AND @need_date<=ValidUntil
...
Рейтинг: 0 / 0
Логирование действий
    #39573388
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virtuOSMS SQL.
Как правильно спланировать БД для фиксации заявок от пользователей? Если рассмотреть самый простой случай, когда каждой заявке присваивается номер и есть некий набор обязательных полей для заполнения. У пользователей будут права на внесение изменений в уже заведенные заявки. Также требуется видеть историю изменений, вносимых пользователем по заявке.

Самый важный вопрос здесь - как это все будет использоваться?
Как часто нужно видеть внесенные изменения , и как именно - нужно ли будет реализовывать откат изменений и т.д. и т.п.

Если редко / просто вываливать изменения списком:

основная - idTicket, createdByUser (idUser), ...params..., modfiedByUser (idUser), modifiedStamp.
PK - ( idTicket )

история - idHistory (identity), idTicket, createdByUser (idUser), ...params..., modfiedByUser (idUser), modifiedStamp, action ('I','U','D').
PK - ( idTicket, modifiedStamp ) / idHistory
Если ненулевые шансы, что могут по одному idTicket сабмитить данные чаще раза в секунду - однозначно idHistory.

и триггеры:
after insert/update -> inserted.*, 'I'/'U' -> history
after delete -> inserted.*, 'D' -> history

Почему нужно триггер на DELETE? Да чтоб можно было откатить случайно удаленную запись :)
...
Рейтинг: 0 / 0
Логирование действий
    #39574463
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virtuOS,
Вы же тащите последнее состояние на форму чаще чем все остальное?
Вот и храните его в первой таблице. В таблицу истории, когда юзер жмакает на "сохранить изменения", откидывайте то состояние, которое было, а в первую таблицу записывайте новое.
ИМХО решать такую задачу проще и понятнее для будущих поколений на клиенте, а не триггерами.
...
Рейтинг: 0 / 0
Логирование действий
    #39575239
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buvenИМХО решать такую задачу проще и понятнее для будущих поколений на клиенте, а не триггерами.
Решать серверные задачи на клиенте не проще и не понятнее.
...
Рейтинг: 0 / 0
Логирование действий
    #39575456
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerbuvenИМХО решать такую задачу проще и понятнее для будущих поколений на клиенте, а не триггерами.
Решать серверные задачи на клиенте не проще и не понятнее.

Задача стала серверной только потому, что в формулировке есть слово "логирование"?
...
Рейтинг: 0 / 0
Логирование действий
    #39575465
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buvenЗадача стала серверной только потому, что в формулировке есть слово "логирование"?
Задача стала серверной потому, что хранение данных - задача сервера. Клиенту вообще должно быть наплевать, как именно сервер хранит эти данные - по первому варианту, по второму или по какому-нибудь третьему. В любом случае есть API, а что за ним скрывается - внутреннее дело сервера, до которого клиенту нет никакого дела.
...
Рейтинг: 0 / 0
Логирование действий
    #39575532
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerbuvenЗадача стала серверной только потому, что в формулировке есть слово "логирование"?
Задача стала серверной потому, что хранение данных - задача сервера. Клиенту вообще должно быть наплевать, как именно сервер хранит эти данные - по первому варианту, по второму или по какому-нибудь третьему. В любом случае есть API, а что за ним скрывается - внутреннее дело сервера, до которого клиенту нет никакого дела.

Да согласен. Я некорректно выразился.
...
Рейтинг: 0 / 0
Логирование действий
    #39575539
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Логирование действий
    #39585531
iv_roman_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Руслан ДамировичvirtuOSMS SQL.
Как правильно спланировать БД для фиксации заявок от пользователей? Если рассмотреть самый простой случай, когда каждой заявке присваивается номер и есть некий набор обязательных полей для заполнения. У пользователей будут права на внесение изменений в уже заведенные заявки. Также требуется видеть историю изменений, вносимых пользователем по заявке.

Самый важный вопрос здесь - как это все будет использоваться?
Как часто нужно видеть внесенные изменения , и как именно - нужно ли будет реализовывать откат изменений и т.д. и т.п.

Если редко / просто вываливать изменения списком:

основная - idTicket, createdByUser (idUser), ...params..., modfiedByUser (idUser), modifiedStamp.
PK - ( idTicket )

история - idHistory (identity), idTicket, createdByUser (idUser), ...params..., modfiedByUser (idUser), modifiedStamp, action ('I','U','D').
PK - ( idTicket, modifiedStamp ) / idHistory
Если ненулевые шансы, что могут по одному idTicket сабмитить данные чаще раза в секунду - однозначно idHistory.

и триггеры:
after insert/update -> inserted.*, 'I'/'U' -> history
after delete -> inserted.*, 'D' -> history

Почему нужно триггер на DELETE? Да чтоб можно было откатить случайно удаленную запись :)

Спасибо, очень подробно!!!
и есть три вопроса:
1) PK - ( idTicket, modifiedStamp ) - а зачем modifiedStamp в ключ добавлять?
2) Я так понял, что при удалении Тикета из основной таблицы, Тикет удаляется физически?
3) А у oracle есть аналог?
...
Рейтинг: 0 / 0
Логирование действий
    #39585887
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
virtuOSКак правильно спланировать БД для фиксации заявок от пользователей? Если рассмотреть самый простой случай, когда каждой заявке присваивается номер и есть некий набор обязательных полей для заполнения. У пользователей будут права на внесение изменений в уже заведенные заявки. Также требуется видеть историю изменений, вносимых пользователем по заявке.

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

и ради всего этого такое садо-мазо ?
...
Рейтинг: 0 / 0
Логирование действий
    #39586120
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagvirtuOSКак правильно спланировать БД для фиксации заявок от пользователей? Если рассмотреть самый простой случай, когда каждой заявке присваивается номер и есть некий набор обязательных полей для заполнения. У пользователей будут права на внесение изменений в уже заведенные заявки. Также требуется видеть историю изменений, вносимых пользователем по заявке.

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

и ради всего этого такое садо-мазо ?Не беспокойтесь.

Практика говорит о том, что не надо выдумывать и опасаться.

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

К примеру в Jira у пользователей есть права на внесение изменений в уже заведённые заявки,
но не видел чтобы кого тянуло использовать данный инструмент по той идиотской схеме, что Вы описали.
Вы будете смеяться, но последние лет пятнадцать каждый раз, когда на sql.ru заходит речь о разрешении пользователям редактировать свои посты, именно эта "идиотская схема" упоминается как решающий аргумент против.
...
Рейтинг: 0 / 0
Логирование действий
    #39586359
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerskyANAПрактика говорит о том, что не надо выдумывать и опасаться.

К примеру в Jira у пользователей есть права на внесение изменений в уже заведённые заявки,
но не видел чтобы кого тянуло использовать данный инструмент по той идиотской схеме, что Вы описали.
Вы будете смеяться, но последние лет пятнадцать каждый раз, когда на sql.ru заходит речь о разрешении пользователям редактировать свои посты, именно эта "идиотская схема" упоминается как решающий аргумент против.
Извините, но это "идиотский аргумент"... Причина - лень, а остальное - тлен.
...
Рейтинг: 0 / 0
Логирование действий
    #39586389
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичИзвините, но это "идиотский аргумент"... Причина - лень, а остальное - тлен.

Вы лучше вдумайтесь в то что вы написали....

Руслан ДамировичСамый важный вопрос здесь - как это все будет использоваться?
Как часто нужно видеть внесенные изменения , и как именно - нужно ли будет реализовывать откат изменений и т.д. и т.п.
....
Почему нужно триггер на DELETE? Да чтоб можно было откатить случайно удаленную запись :)


А как делать откат того, что уже сделано физически по заявке ???

Если изначально был пшик... то хоть маслом его намажь, он пшиком и останется...
Самое обидное, что вот вся эта хрень сейчас лезет в гос порталы и т.д. а народ потом не может
разобраться что к чему, где голова где хвост и вообще о чем речь изначально была...
...
Рейтинг: 0 / 0
Логирование действий
    #39586666
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagВы лучше вдумайтесь в то что вы написали....
Давайте по Кэролу.
Я прекрасно вдумываюсь в то, что пишу, потому что если я это написал - оно было измышлено и продумано. Я мог измыслить и написать, но не продумать, но я так не делал. Более того, измышленное, продуманное и написанное мной я прочитал, продумал еще раз и измыслил, что написано вдумчиво.

vmagА как делать откат того, что уже сделано физически по заявке ???
Приводить заявку к факту того, что уже сделано физически - и есть смысл реализации этих заявок в ИС.
Например, статус, какие-то детали, сроки исполнения. А может пользователь создал ее по ошибке и хочет удалить - да пожалуйста. Задача разработчика не сказать, что это идиотизм, а максимально обезопасить такой функционал от случайностей. В том числе если пользователь-таки прострелил себе колено. Вот и придумали максимально простой способ - при внесении изменении сохранять все предыдущие данные, а еще лучше - дублировать. Новыми заменять основную таблицу, и параллельно вносить данные в историчную с меткой времени и другими сервисными параметрами.

Насколько я понимаю, Issues на github реализована по такой схеме - по крайней мере визуально именно так, а под капот я не заглядывал.

vmagЕсли изначально был пшик... то хоть маслом его намажь, он пшиком и останется...
Самое обидное, что вот вся эта хрень сейчас лезет в гос порталы и т.д. а народ потом не может
разобраться что к чему, где голова где хвост и вообще о чем речь изначально была...
В чем проблема изменять данные и хранить историю - кроме религиозных предрассудков? У каждого инструмента есть область применимости - и есть список pro и cons применения. Если кто-то приводит в качестве аргумента фразу "потому что это идиотизм" без реального списка - я буду называть этого кадра "идиотом".

И при чем здесь хранение истории и госпорталы - непонятно.

Мое мнение, проблема госпорталов в том, что они делаются людьми низкой квалификации - начинающими/студентами/индусами. Но я вот смотрю на сайты и вижу, как они прогрессируют, что говорит о том, что те, кто их делал растут в квалификации (ну или их заменили на более квалифицированных).

Дело делается, бабло пилится, народ постепенно получает нужный функционал. А если вам не нравится реализация - дело ваше. Для ретроградов, например, есть МФЦ и режим "одного окна". Мне, отстоявшему сотни очередей, госпорталы нравятся больше.
Считаете, что можете лучше, и прямо брызжете альтруизмом - идите в "прикормленные" конторы работать за бесплатно.
...
Рейтинг: 0 / 0
Логирование действий
    #39586705
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичПриводить заявку к факту того, что уже сделано физически - и есть смысл реализации этих заявок в ИС.

Правильно так:
Делать физически то, что написано в заявке это и есть смысл выполнения заявки....


Руслан ДамировичЕсли кто-то приводит в качестве аргумента фразу "потому что это идиотизм" без реального списка - я буду называть этого кадра "идиотом".

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

vmag- в априори заявка таким образом никогда не может быть исполнена...
- каждому пользователю можно сделать всего одну заявку и хреначить туда всё подряд...

Руслан ДамировичДело делается, бабло пилится, народ постепенно получает нужный функционал.

Вот я и говорю, понаехали и делают любую хрень лишь бы платили бпабло...

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

Еще и тут с пеной у рта...
...
Рейтинг: 0 / 0
Логирование действий
    #39586720
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович,

чтоб дальше пургу ты не нёс, ответь мне только на один вопрос - что ты будешь делать в этой ситуации?
Ты заказал в интернет магазине пароварку на день рождения жены, с доставкой в район метро Багратионовская сегодня в 19.00...
Тебе как положено звонят в 17.00 и говорят - такая фигня, доставка на Багратионовскую будет к сожалению сегодня дороже на 2 000 р. или вы можете забрать свой заказ у нас на складе по цене заказа только в районе Текстильщики...
Ты так прикидываешь, завтра с утра дарить, на метро есть проездной, делать все равно нефиг, взял пивка и поехал...
Приперся, на складе тебе говорят - еще один нюанс, пароварок больше нет, осталась одна сковородка, она хоть и погнутая, но очень даже ничего и скидка обалденная - можете взять вместо пароварки, только вот чтоб привести заявку в соответствие, давайте вычеркнем Багатионовская и пароварка и впишем Текстильщики и сковородка, по рукам и разбежались ?
Твои действия ?
...
Рейтинг: 0 / 0
Логирование действий
    #39586739
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

Вы смешно смотритесь.
Механизм внесения изменений в заявки/заказы/etc. - часто востребован и много где реализован, примеры Вам приводили. Если Вы не понимаете, как его организовать так, чтобы от него была польза, а не вред - либо вежливо спросите, либо подумайте самостоятельно.
А сейчас Вы напоминаете чукчу, который смотрит на фрак и рассуждает "Какая глупая одежда! От ветра не защищает, от холода не защищает, на снегу видно издалека! Идиотизмом попахивает, однако!"
...
Рейтинг: 0 / 0
Логирование действий
    #39586817
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинВы смешно смотритесь.

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


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