Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
monstrU1. change data capture http://msdn.microsoft.com/en-us/library/cc645937.aspx - если писать правильно 2. разве я собирался что-то куда-то записывать? я просто написал что есть такой пакет. если вас устраивает - можно пользоваться, нет - ну и нет 3. упаси боже кого учить - здоровье дороже. Если надо просто хранить историю изменений «на всякий», то можно и так. Если же это часть бизнеса (например, требуется возможность интенсивной работы с этой истории на фронте), эти погремушки можно выкинуть на помойку. Теперь другой вопрос, сам пользовался этим пакетом? Или как обычно, «услышал звон»? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:22 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
monstrUskyANAпропущено... И чем он лучше? тем что там уже все реализовано и протестировано - можно просто пользоваться. наворочена большая гора всего - и триггеры, и service broker и еще черт знает что. не надо изобретать изобретения, которые уже сделаны до вас и протестированы - минимум напишите что-то похожее, а скорее всего по функционалу будет победнее. хранение истории - задача по объему совсем не мелкая, и поэтому если вы хотите сэкономить время - проще пользоваться сделанным до вас.Какие-то общие слова. А конкретный пример есть? Вот например каждый противник триггеров наверняка может вспомнить ситуацию, когда в первый раз не мог понять, какого фига из плижения ушли одни данные, а в таблице в итоге другие. И как долго искал тот самый, с**а, триггер в куче другого кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:43 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
hVosttmonstrUхранение истории - задача по объему совсем не мелкая, и поэтому если вы хотите сэкономить время - проще пользоваться сделанным до вас. давай-ка отбросим эти бестолковые рассуждения и задумаемся, например, хотя бы о том, как ты в триггере будешь записывать в таблицу истории ID текущего пользователя, сделавшего изменение? ID пользователя приложения естественно, а не пользователя базы данных. как? расскажи неучам, великий гуру. В таблице есть поле ModifyUserID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:44 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
hVostt, Например . сори что вмешался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:45 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
Andrey1306hVosttпропущено... давай-ка отбросим эти бестолковые рассуждения и задумаемся, например, хотя бы о том, как ты в триггере будешь записывать в таблицу истории ID текущего пользователя, сделавшего изменение? ID пользователя приложения естественно, а не пользователя базы данных. как? расскажи неучам, великий гуру. В таблице есть поле ModifyUserIDИ что? Прочитайте внимательно вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:46 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
skyANAКакие-то общие слова. А конкретный пример есть? разница механизма CDC и триггеров только в том, что триггеры - создают нагрузку на рабочую БД (даже если они будут "вставлять" историю во внешнею) cdc - подключается к логу транзакций, и если развернут на отдельном сервере в другой БД, то практически не увеличивает нагрузку на рабочую БД. тем самым CDC лучше использовать в высоконагруженных системах, там где быстродействие критично. есть особеность, если триггер можно сделать синхронным, то cdc всегда асинхронный и работает с небольшой задержкой (более того его можно приостанавливать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:06 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
skyANAкакого фига из плижения ушли одни данные, а в таблице в итоге другие. запись не модифицируется иногда - ну никак а всё просто - текстовое поле расширили, а про историю, куда триггер пишет - позабыли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:07 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
hVosttдавай-ка отбросим эти бестолковые рассуждения и задумаемся, например, хотя бы о том, как ты в триггере будешь записывать в таблицу истории ID текущего пользователя, сделавшего изменение? ID пользователя приложения естественно, а не пользователя базы данных. как? расскажи неучам, великий гуру. Предложу простейший вариант: в аудируемую таблицу добавляется служебная колонка LastModifiedUser (пользователь последний внесший изменение в таблицу) - заполняется на уровне бизнес логики (у вас C#), при ее наличии получить пользователя в триггере или cdc - элементарно. Это плохой вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:12 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
hVosttmonstrU1. change data capture http://msdn.microsoft.com/en-us/library/cc645937.aspx - если писать правильно 2. разве я собирался что-то куда-то записывать? я просто написал что есть такой пакет. если вас устраивает - можно пользоваться, нет - ну и нет 3. упаси боже кого учить - здоровье дороже. Если надо просто хранить историю изменений «на всякий», то можно и так. Если же это часть бизнеса (например, требуется возможность интенсивной работы с этой истории на фронте), эти погремушки можно выкинуть на помойку. Теперь другой вопрос, сам пользовался этим пакетом? Или как обычно, «услышал звон»? Если это часть бизнеса - лучше всего именно CDC и использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:20 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
skyANA, При апдейте в апликейшене, в это поле пишется айди пользователя, таким образом в истории сформированой триггером имеем историю изменений этого поля . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:22 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
Andrey1306skyANA, При апдейте в апликейшене, в это поле пишется айди пользователя, таким образом в истории сформированой триггером имеем историю изменений этого поля . ну и вот тоже самое товарищъhVosttдавай-ка отбросим эти бестолковые рассуждения и задумаемся, например, хотя бы о том, как ты в триггере будешь записывать в таблицу истории ID текущего пользователя, сделавшего изменение? ID пользователя приложения естественно, а не пользователя базы данных. как? расскажи неучам, великий гуру. Предложу простейший вариант: в аудируемую таблицу добавляется служебная колонка LastModifiedUser (пользователь последний внесший изменение в таблицу) - заполняется на уровне бизнес логики (у вас C#), при ее наличии получить пользователя в триггере или cdc - элементарно. Это плохой вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:26 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
МСУТриггеры зло, только второй способ. Ну и вдобавок, хранить предыдущее значение не имеет смысла, мы не него всегда сможем выйти. То есть имеем такую структуру: 1. Documents(DocumentId,Value1,Value2,Value3,...) 2. DocumentsHistory(DocumentId,Date,UserId,Value1,Value2,Value3,...) Соответственно, по DocumentId мы можем поднять всю историю. Надобность хранить предыдущие значения (типа Value1Old,Value2Old,Value3Old) отпадает сама собой.OldValue таки лучше хранить. Из таблицы DocumentsHistory старые записи обычно удаляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:33 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
Изопропила всё просто - текстовое поле расширили, а про историю, куда триггер пишет - позабылиДля хранения лога в общем случае надо использовать EAV с типом данных nvarchar(max). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:37 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
любопытно. почему триггеры зло - можно услышать внятное объяснение? особенно в рамках этой задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:52 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
winsky!любопытно. почему триггеры зло - можно услышать внятное объяснение? особенно в рамках этой задачи?логично этот вопрос задать в ветке SQL-сервер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 13:58 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
Shocker.Prowinsky!любопытно. почему триггеры зло - можно услышать внятное объяснение? особенно в рамках этой задачи?логично этот вопрос задать в ветке SQL-сервер наверное. задайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:02 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
товарищъskyANAКакие-то общие слова. А конкретный пример есть? разница механизма CDC и триггеров только в том, что триггеры - создают нагрузку на рабочую БД (даже если они будут "вставлять" историю во внешнею) cdc - подключается к логу транзакций, и если развернут на отдельном сервере в другой БД, то практически не увеличивает нагрузку на рабочую БД. тем самым CDC лучше использовать в высоконагруженных системах, там где быстродействие критично. есть особеность, если триггер можно сделать синхронным, то cdc всегда асинхронный и работает с небольшой задержкой (более того его можно приостанавливать) оно должно быть ну очень критичным, поскольку триггеры добавляющие что-то во "внешнюю", создают очень небольшую нагрузку. а вот если говорить о стоимости реализации и поддержки - триггеры дешевле как минимум в разы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:05 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
ИзопропилskyANAкакого фига из плижения ушли одни данные, а в таблице в итоге другие. запись не модифицируется иногда - ну никак Чего? Я не писал что приложения выполняет прямой INSERT в таблицу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:05 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
Andrey1306skyANA, При апдейте в апликейшене, в это поле пишется айди пользователя, таким образом в истории сформированой триггером имеем историю изменений этого поля .Вот теперь понятно. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:07 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
winsky!наверное. задайте.А мне не нужно, я уже попрыгал по этим граблям. Я использую триггеры в двух случаях: - заплатки к старой базе (которая вообще на MSSQL перетащена из Аксесса) - временная заплатка, для нормальной работы предыдущей версии клиентского приложения одновременно с новой (пока неспешно идет апгрейд пользователей до новой версии) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:13 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
winsky!товарищъпропущено... разница механизма CDC и триггеров только в том, что триггеры - создают нагрузку на рабочую БД (даже если они будут "вставлять" историю во внешнею) cdc - подключается к логу транзакций, и если развернут на отдельном сервере в другой БД, то практически не увеличивает нагрузку на рабочую БД. тем самым CDC лучше использовать в высоконагруженных системах, там где быстродействие критично. есть особеность, если триггер можно сделать синхронным, то cdc всегда асинхронный и работает с небольшой задержкой (более того его можно приостанавливать) оно должно быть ну очень критичным, поскольку триггеры добавляющие что-то во "внешнюю", создают очень небольшую нагрузку. а вот если говорить о стоимости реализации и поддержки - триггеры дешевле как минимум в разы наоборот. Поддержка тригерров - очень трудоемка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:21 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
skyANAЧего? Я не писал что приложения выполняет прямой INSERT в таблицу :) это я пример эффекта от триггера приводил - запомнил навсегда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:25 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
winsky!любопытно. почему триггеры зло - можно услышать внятное объяснение? особенно в рамках этой задачи?Трёхзвенщикам триггера неудобны, из них нет доступа к прикладной логике сервера приложения. Пример был приведён выше: нет доступа к контексту безопасности пользователя сервера приложений. Это же касается и SP, View, UDF и т. п. Можно извратиться через временную таблицу, но зачем? А если логика в хранимых процедурах, то триггера удобны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:30 |
|
||
|
способы записи в таблицу историю
|
|||
|---|---|---|---|
|
#18+
Алексей КА если логика в хранимых процедурах, то триггера удобны. то они не нужны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 14:32 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38779905&tid=1356925]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 448ms |

| 0 / 0 |
