Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Логирование действий / 20 сообщений из 20, страница 1 из 1
20.12.2017, 21:40
    #39573087
virtuOS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование действий
MS SQL.

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

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

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

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

Какое решение в данном случае считается наилучшим? Может быть, есть третий вариант?
...
Рейтинг: 0 / 0
20.12.2017, 23:43
    #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
21.12.2017, 11:44
    #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
22.12.2017, 14:37
    #39574463
buven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование действий
virtuOS,
Вы же тащите последнее состояние на форму чаще чем все остальное?
Вот и храните его в первой таблице. В таблицу истории, когда юзер жмакает на "сохранить изменения", откидывайте то состояние, которое было, а в первую таблицу записывайте новое.
ИМХО решать такую задачу проще и понятнее для будущих поколений на клиенте, а не триггерами.
...
Рейтинг: 0 / 0
25.12.2017, 10:29
    #39575239
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование действий
buvenИМХО решать такую задачу проще и понятнее для будущих поколений на клиенте, а не триггерами.
Решать серверные задачи на клиенте не проще и не понятнее.
...
Рейтинг: 0 / 0
25.12.2017, 14:20
    #39575456
buven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование действий
softwarerbuvenИМХО решать такую задачу проще и понятнее для будущих поколений на клиенте, а не триггерами.
Решать серверные задачи на клиенте не проще и не понятнее.

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

Да согласен. Я некорректно выразился.
...
Рейтинг: 0 / 0
25.12.2017, 15:18
    #39575539
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование действий
...
Рейтинг: 0 / 0
17.01.2018, 09:57
    #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
17.01.2018, 15:20
    #39585887
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование действий
virtuOSКак правильно спланировать БД для фиксации заявок от пользователей? Если рассмотреть самый простой случай, когда каждой заявке присваивается номер и есть некий набор обязательных полей для заполнения. У пользователей будут права на внесение изменений в уже заведенные заявки. Также требуется видеть историю изменений, вносимых пользователем по заявке.

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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