Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Nukutu
176 / 102 / 12
Регистрация: 22.03.2010
Сообщений: 456
1

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

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

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

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

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

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

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

Формирование запроса к базе данных и сохранение в ней внесенных изменений
База данных Access 2003 Таблиц в базе в принципе, но вроде для запроса нужны 3 Таблица Polzovatel...

5
nio
5969 / 3375 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
07.02.2011, 22:03 2
В каждой таблице можно сделать столбец, в котором будет фиксироваться, кто последний вносил изменения
0
Chimera_
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
nio
5969 / 3375 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.02.2011, 11:38 4
Цитата Сообщение от Chimera_ Посмотреть сообщение
Правда, таблицы логов довольно быстро растут
[продолжу]... есть вероятность того, что после длительного исползования, таблицы логов будут занимать больше места чем информация базы. Также следует учитывать, что триггеры затормаживают работу, и при большой информационной нагрузке на БД (много подключенных пользователей, частое изменение данных) это будет критично. К вопросу такого рода контроля нужно подходить серьезно, должно быть убедительное обоснование его необходимости.
1
Chimera_
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
08.02.2011, 11:50 5
nio, вы правы. Я еще не решила вопрос, как и через какой промежуток времени чистить таблицы логов. Если дать пользователям доступ к их редактированию, они теряют всякий смысл...
Но такие логи иногда действительно нужны. Юзеров много, когда накосячат - не признаются, данные терять никак нельзя... Мне эта "история" изменений очень помогает, всегда могу доказать, что это не моя программа "все испортила", а у кого-то руки не из того места, причем могу конкретно сказать, у кого именно И восстановить "как было" тоже могу
0
nio
5969 / 3375 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.02.2011, 11:54 6
Цитата Сообщение от Chimera_ Посмотреть сообщение
дать пользователям доступ к их редактированию, они теряют всякий смысл
... а так это дополнительная нагрузка на админа базы .... можно (и нужно) автоматизировать, хотя тут придется поломать голову на д стратегией
0
08.02.2011, 11:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2011, 11:54

Контроль изменений в документе
Добрый день! На предприятии возникла необходимость контроля документооборота. Сотрудникам разных...

Удаление и редактирование записей в базе данных
Есть бд на acess которая подключается через код(т.е в datagrid я не выбирал). Делал по примеру с...

SQLite. Как из двух записей в базе данных сделать третью, используя только SQL?
Есть Два поля: Индекс и Дата, оба хранятся как varchar(50), оба не равны нулю какой должен быть...


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

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

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