|
Логирование действий
|
|||
---|---|---|---|
#18+
MS SQL. Как правильно спланировать БД для фиксации заявок от пользователей? Если рассмотреть самый простой случай, когда каждой заявке присваивается номер и есть некий набор обязательных полей для заполнения. У пользователей будут права на внесение изменений в уже заведенные заявки. Также требуется видеть историю изменений, вносимых пользователем по заявке. Вариант 1: первая таблица с полями: idTicket (primary key), idUser, stamp (время создания) вторая таблица содержит idTicket (FK) и набор необходимых параметров. В таблицу осуществляется только операция вставки (insert), последняя вставленная запись соответствует актуальному состоянию. Вариант 2: плоская таблица с idTicket и набором параметров. Пользователи имеют права на вставку и обновление записей. Логирование осуществляется через вставку новых значений во вторую таблицу (например, через конструкцию output) В первом варианте минусом считаю то, что для получения информации по заявке надо выбирать последнюю запись из второй таблицы (select top(1) ) и джойнить с первой таблицей. Может быть медленно. Во втором варианте может быть сложно получить данные на определенный момент времени. Какое решение в данном случае считается наилучшим? Может быть, есть третий вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 21:40 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
Ну так объедините оба варианта 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 23:43 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
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? Да чтоб можно было откатить случайно удаленную запись :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2017, 11:44 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
virtuOS, Вы же тащите последнее состояние на форму чаще чем все остальное? Вот и храните его в первой таблице. В таблицу истории, когда юзер жмакает на "сохранить изменения", откидывайте то состояние, которое было, а в первую таблицу записывайте новое. ИМХО решать такую задачу проще и понятнее для будущих поколений на клиенте, а не триггерами. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2017, 14:37 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
buvenИМХО решать такую задачу проще и понятнее для будущих поколений на клиенте, а не триггерами. Решать серверные задачи на клиенте не проще и не понятнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 10:29 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
softwarerbuvenИМХО решать такую задачу проще и понятнее для будущих поколений на клиенте, а не триггерами. Решать серверные задачи на клиенте не проще и не понятнее. Задача стала серверной только потому, что в формулировке есть слово "логирование"? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 14:20 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
buvenЗадача стала серверной только потому, что в формулировке есть слово "логирование"? Задача стала серверной потому, что хранение данных - задача сервера. Клиенту вообще должно быть наплевать, как именно сервер хранит эти данные - по первому варианту, по второму или по какому-нибудь третьему. В любом случае есть API, а что за ним скрывается - внутреннее дело сервера, до которого клиенту нет никакого дела. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 14:24 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
softwarerbuvenЗадача стала серверной только потому, что в формулировке есть слово "логирование"? Задача стала серверной потому, что хранение данных - задача сервера. Клиенту вообще должно быть наплевать, как именно сервер хранит эти данные - по первому варианту, по второму или по какому-нибудь третьему. В любом случае есть API, а что за ним скрывается - внутреннее дело сервера, до которого клиенту нет никакого дела. Да согласен. Я некорректно выразился. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 15:12 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
Руслан Дамирович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 есть аналог? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 09:57 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
virtuOSКак правильно спланировать БД для фиксации заявок от пользователей? Если рассмотреть самый простой случай, когда каждой заявке присваивается номер и есть некий набор обязательных полей для заполнения. У пользователей будут права на внесение изменений в уже заведенные заявки. Также требуется видеть историю изменений, вносимых пользователем по заявке. попахивает идиотизмом... Попросили покрасить здание, покрасили, потом вносят изменения - не мля не белой краской, нужно зеленой... - в априори заявка таким образом никогда не может быть исполнена... - каждому пользователю можно сделать всего одну заявку и хреначить туда всё подряд... и ради всего этого такое садо-мазо ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 15:20 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
vmagvirtuOSКак правильно спланировать БД для фиксации заявок от пользователей? Если рассмотреть самый простой случай, когда каждой заявке присваивается номер и есть некий набор обязательных полей для заполнения. У пользователей будут права на внесение изменений в уже заведенные заявки. Также требуется видеть историю изменений, вносимых пользователем по заявке. попахивает идиотизмом... Попросили покрасить здание, покрасили, потом вносят изменения - не мля не белой краской, нужно зеленой... - в априори заявка таким образом никогда не может быть исполнена... - каждому пользователю можно сделать всего одну заявку и хреначить туда всё подряд... и ради всего этого такое садо-мазо ?Не беспокойтесь. Практика говорит о том, что не надо выдумывать и опасаться. К примеру в Jira у пользователей есть права на внесение изменений в уже заведённые заявки, но не видел чтобы кого тянуло использовать данный инструмент по той идиотской схеме, что Вы описали. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2018, 23:48 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
skyANAПрактика говорит о том, что не надо выдумывать и опасаться. К примеру в Jira у пользователей есть права на внесение изменений в уже заведённые заявки, но не видел чтобы кого тянуло использовать данный инструмент по той идиотской схеме, что Вы описали. Вы будете смеяться, но последние лет пятнадцать каждый раз, когда на sql.ru заходит речь о разрешении пользователям редактировать свои посты, именно эта "идиотская схема" упоминается как решающий аргумент против. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 01:50 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
softwarerskyANAПрактика говорит о том, что не надо выдумывать и опасаться. К примеру в Jira у пользователей есть права на внесение изменений в уже заведённые заявки, но не видел чтобы кого тянуло использовать данный инструмент по той идиотской схеме, что Вы описали. Вы будете смеяться, но последние лет пятнадцать каждый раз, когда на sql.ru заходит речь о разрешении пользователям редактировать свои посты, именно эта "идиотская схема" упоминается как решающий аргумент против. Извините, но это "идиотский аргумент"... Причина - лень, а остальное - тлен. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 12:39 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
Руслан ДамировичИзвините, но это "идиотский аргумент"... Причина - лень, а остальное - тлен. Вы лучше вдумайтесь в то что вы написали.... Руслан ДамировичСамый важный вопрос здесь - как это все будет использоваться? Как часто нужно видеть внесенные изменения , и как именно - нужно ли будет реализовывать откат изменений и т.д. и т.п. .... Почему нужно триггер на DELETE? Да чтоб можно было откатить случайно удаленную запись :) А как делать откат того, что уже сделано физически по заявке ??? Если изначально был пшик... то хоть маслом его намажь, он пшиком и останется... Самое обидное, что вот вся эта хрень сейчас лезет в гос порталы и т.д. а народ потом не может разобраться что к чему, где голова где хвост и вообще о чем речь изначально была... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 13:19 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
vmagВы лучше вдумайтесь в то что вы написали.... Давайте по Кэролу. Я прекрасно вдумываюсь в то, что пишу, потому что если я это написал - оно было измышлено и продумано. Я мог измыслить и написать, но не продумать, но я так не делал. Более того, измышленное, продуманное и написанное мной я прочитал, продумал еще раз и измыслил, что написано вдумчиво. vmagА как делать откат того, что уже сделано физически по заявке ??? Приводить заявку к факту того, что уже сделано физически - и есть смысл реализации этих заявок в ИС. Например, статус, какие-то детали, сроки исполнения. А может пользователь создал ее по ошибке и хочет удалить - да пожалуйста. Задача разработчика не сказать, что это идиотизм, а максимально обезопасить такой функционал от случайностей. В том числе если пользователь-таки прострелил себе колено. Вот и придумали максимально простой способ - при внесении изменении сохранять все предыдущие данные, а еще лучше - дублировать. Новыми заменять основную таблицу, и параллельно вносить данные в историчную с меткой времени и другими сервисными параметрами. Насколько я понимаю, Issues на github реализована по такой схеме - по крайней мере визуально именно так, а под капот я не заглядывал. vmagЕсли изначально был пшик... то хоть маслом его намажь, он пшиком и останется... Самое обидное, что вот вся эта хрень сейчас лезет в гос порталы и т.д. а народ потом не может разобраться что к чему, где голова где хвост и вообще о чем речь изначально была... В чем проблема изменять данные и хранить историю - кроме религиозных предрассудков? У каждого инструмента есть область применимости - и есть список pro и cons применения. Если кто-то приводит в качестве аргумента фразу "потому что это идиотизм" без реального списка - я буду называть этого кадра "идиотом". И при чем здесь хранение истории и госпорталы - непонятно. Мое мнение, проблема госпорталов в том, что они делаются людьми низкой квалификации - начинающими/студентами/индусами. Но я вот смотрю на сайты и вижу, как они прогрессируют, что говорит о том, что те, кто их делал растут в квалификации (ну или их заменили на более квалифицированных). Дело делается, бабло пилится, народ постепенно получает нужный функционал. А если вам не нравится реализация - дело ваше. Для ретроградов, например, есть МФЦ и режим "одного окна". Мне, отстоявшему сотни очередей, госпорталы нравятся больше. Считаете, что можете лучше, и прямо брызжете альтруизмом - идите в "прикормленные" конторы работать за бесплатно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 18:57 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
Руслан ДамировичПриводить заявку к факту того, что уже сделано физически - и есть смысл реализации этих заявок в ИС. Правильно так: Делать физически то, что написано в заявке это и есть смысл выполнения заявки.... Руслан ДамировичЕсли кто-то приводит в качестве аргумента фразу "потому что это идиотизм" без реального списка - я буду называть этого кадра "идиотом". У меня реальный список из двух тире, бьющих наповал, у вас ни одного, - кто из нас идиот? vmag- в априори заявка таким образом никогда не может быть исполнена... - каждому пользователю можно сделать всего одну заявку и хреначить туда всё подряд... Руслан ДамировичДело делается, бабло пилится, народ постепенно получает нужный функционал. Вот я и говорю, понаехали и делают любую хрень лишь бы платили бпабло... vmagСамое обидное, что вот вся эта хрень сейчас лезет в гос порталы и т.д. а народ потом не может разобраться что к чему, где голова где хвост и вообще о чем речь изначально была... Еще и тут с пеной у рта... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 20:21 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
Руслан Дамирович, чтоб дальше пургу ты не нёс, ответь мне только на один вопрос - что ты будешь делать в этой ситуации? Ты заказал в интернет магазине пароварку на день рождения жены, с доставкой в район метро Багратионовская сегодня в 19.00... Тебе как положено звонят в 17.00 и говорят - такая фигня, доставка на Багратионовскую будет к сожалению сегодня дороже на 2 000 р. или вы можете забрать свой заказ у нас на складе по цене заказа только в районе Текстильщики... Ты так прикидываешь, завтра с утра дарить, на метро есть проездной, делать все равно нефиг, взял пивка и поехал... Приперся, на складе тебе говорят - еще один нюанс, пароварок больше нет, осталась одна сковородка, она хоть и погнутая, но очень даже ничего и скидка обалденная - можете взять вместо пароварки, только вот чтоб привести заявку в соответствие, давайте вычеркнем Багатионовская и пароварка и впишем Текстильщики и сковородка, по рукам и разбежались ? Твои действия ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 21:10 |
|
Логирование действий
|
|||
---|---|---|---|
#18+
vmag, Вы смешно смотритесь. Механизм внесения изменений в заявки/заказы/etc. - часто востребован и много где реализован, примеры Вам приводили. Если Вы не понимаете, как его организовать так, чтобы от него была польза, а не вред - либо вежливо спросите, либо подумайте самостоятельно. А сейчас Вы напоминаете чукчу, который смотрит на фрак и рассуждает "Какая глупая одежда! От ветра не защищает, от холода не защищает, на снегу видно издалека! Идиотизмом попахивает, однако!" ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2018, 22:33 |
|
|
start [/forum/topic.php?fid=32&gotonew=1&tid=1540087]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
178ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 240ms |
total: | 544ms |
0 / 0 |