Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
179 / 105 / 13
Регистрация: 22.03.2010
Сообщений: 456
1

Контроль изменений записей в базе данных

07.02.2011, 12:08. Просмотров 2586. Ответов 5
Метки нет (Все метки)

Добрый день.
Тема не столько по программированию, сколько по логике организации базы данных.
Есть база данных, которой, естественно, пользуются не один пользователь. Необходимо иметь возможность просмотреть кто изменил (удалил), а первоначально добавил, запись в таблице базы данных.
Собственно, интересует, как обычно это организуется?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2011, 12:08
Ответы с готовыми решениями:

Контроль изменений данных на форме
Добрый Всем день. Есть форма на которой множество полей и подчиненных таблиц,данные в которых...

фиксация изменений в базе данных
Здравствуйте всем! Только начинаю работать с базами данных, и вот возник интересный вопрос о...

История изменений в базе данных
Всем привет. Разработал отчёт по подключению услуги Интернета. И есть такой момент... "Старый...

Сохранение изменений в Базе Данных
Всем доброго времени суток! Есть проблема, не могу сохранить изменения в базе данных. На форме есть...

5
6006 / 3413 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
07.02.2011, 22:03 2
В каждой таблице можно сделать столбец, в котором будет фиксироваться, кто последний вносил изменения
0
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
08.02.2011, 09:59 3
Nukutu, можно создать таблицы логов и написать триггеры на удаление/изменение данных. У меня на все важные таблицы ведутся логи, всегда вижу, кто, когда и что изменил, могу восстановить прежние значения. Правда, таблицы логов довольно быстро растут

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
CREATE TABLE FunctionOfLines
(FunctionOfLines_ID INT PRIMARY KEY IDENTITY,
FunctionOfLines_Name VARCHAR(50));
 
CREATE TABLE FunctionOfLines_Log
(FunctionOfLines_Log_ID INT PRIMARY KEY IDENTITY,
FunctionOfLines_ID INT,
FunctionOfLines_Name VARCHAR(50),
LogDateTime datetime, 
LogUser VARCHAR(50), 
LogComp VARCHAR(50),
IsDeleted bit);
 
CREATE TRIGGER trg_FunctionOfLines_Edit
ON FunctionOfLines
FOR INSERT, UPDATE
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
    -- Insert statements for trigger here
 
    DECLARE @tmpDate datetime
    DECLARE @UserName VARCHAR(50)
    DECLARE @MashineName VARCHAR(50)
 
    SET  @tmpDate=GetDate() 
    SET  @UserName=system_user 
    SET  @MashineName=host_name()
 
    INSERT INTO FunctionOfLines_Log ( FunctionOfLines_ID, FunctionOfLines_Name,
                            LogDateTime, LogUser, LogComp, IsDeleted )
           SELECT  FunctionOfLines_ID, FunctionOfLines_Name,
                             @tmpDate, @UserName, @MashineName,0
           FROM  inserted
 
END;
 
CREATE TRIGGER trg_FunctionOfLines_Delete
ON FunctionOfLines
FOR DELETE
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
    -- Insert statements for trigger here
 
    DECLARE @tmpDate datetime
    DECLARE @UserName VARCHAR(50)
    DECLARE @MashineName VARCHAR(50)
 
    SET  @tmpDate=GetDate() 
    SET  @UserName=system_user 
    SET  @MashineName=host_name()
 
    INSERT INTO FunctionOfLines_Log ( FunctionOfLines_ID, FunctionOfLines_Name,
                            LogDateTime, LogUser, LogComp, IsDeleted )
           SELECT  FunctionOfLines_ID, FunctionOfLines_Name,
                             @tmpDate, @UserName, @MashineName,1
           FROM  deleted
       
END;
0
6006 / 3413 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.02.2011, 11:38 4
Цитата Сообщение от Chimera_ Посмотреть сообщение
Правда, таблицы логов довольно быстро растут
[продолжу]... есть вероятность того, что после длительного исползования, таблицы логов будут занимать больше места чем информация базы. Также следует учитывать, что триггеры затормаживают работу, и при большой информационной нагрузке на БД (много подключенных пользователей, частое изменение данных) это будет критично. К вопросу такого рода контроля нужно подходить серьезно, должно быть убедительное обоснование его необходимости.
1
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
08.02.2011, 11:50 5
nio, вы правы. Я еще не решила вопрос, как и через какой промежуток времени чистить таблицы логов. Если дать пользователям доступ к их редактированию, они теряют всякий смысл...
Но такие логи иногда действительно нужны. Юзеров много, когда накосячат - не признаются, данные терять никак нельзя... Мне эта "история" изменений очень помогает, всегда могу доказать, что это не моя программа "все испортила", а у кого-то руки не из того места, причем могу конкретно сказать, у кого именно И восстановить "как было" тоже могу
0
6006 / 3413 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.02.2011, 11:54 6
Цитата Сообщение от Chimera_ Посмотреть сообщение
дать пользователям доступ к их редактированию, они теряют всякий смысл
... а так это дополнительная нагрузка на админа базы .... можно (и нужно) автоматизировать, хотя тут придется поломать голову на д стратегией
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2011, 11:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Откат изменений в базе данных
Возможно ли откатить изменения (delete и update) в БД ? На какой период ?

Сохранение изменений из datagridview в базе данных
Привязываю datagridview к таблице в бд вызывая метод Load(); (использую sqlite). Но никак не могу...

Сохранение изменений DataSet в базе данных
Добрый вечер! Работаю в VS Community 2015. Имеется база данных stock.mdf и в ней таблица...

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

Обновление таблиц после изменений в базе данных MySQL
Добрый день, уважаемые знатоки Java. У меня есть база данных MySQL и есть программа, работающая с...

Проверка изменений в базе данных (На примере СУБД Access)
Есть база в которую в течении дня прописывается информация. Как проверить были ли изменения в базе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.