powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / одна таблица аудита для всех таблиц
12 сообщений из 12, страница 1 из 1
одна таблица аудита для всех таблиц
    #37669213
javaprog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE audit (
audit_id serial not null primary key,
create_date timestamp,
create_user_id int references users(user_id),
create_ip inet, 
create_server int,
.....
);

create table test(
test_id not null primary key,
audit_id references audit(audit_id),
.....
);

какой минус у такого подхода, кроме того, что эта таблица будет самой юзабельной?
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37669245
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы бы поподробнее расписали подход, что же вы хотите.
Заменить create_user_id, create_date ... одним audit_id?
Не стоит овчинка выделки, эти поля можно использовать для оптимистического блокирования.

И давайте на бережку договоримся - что вы называете аудит.
По поводу смешения в одну таблицу - а где вы видите плюсы? Экономия на числе таблиц?
А вот минусы - truncate не сделать, по дискам не разнести и т.д. divide et impera

Далее к слову. Я на журналы делал первичным ключом пару event_datetime + event_id. Так было удобнее
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37669252
javaprog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Заменить create_user_id, create_date ... одним audit_id?

да
SERG1257И давайте на бережку договоримся - что вы называете аудит.
фиксировать кто/когда/где изменял запись
SERG1257По поводу смешения в одну таблицу - а где вы видите плюсы? Экономия на числе таблиц?на числе столбцов(минимум 7). если таблиц за сотню, может получится какая то экономия. правда придется лишние join делать.
SERG1257А вот минусы - truncate не сделать, по дискам не разнести и т.д. divide et imperatruncate не нужен. можно создать tablespace на другом диске или сделать партиционирование таблицы (postgresql).
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37669349
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javaprog, ещё минусы:
1. большое количество связей с одной таблицей. удалении записей из таблицы аудита - трудоёмкая операция.

2. дополнительный join при поиске пользователем "своих" записей (может быть важным в зависимости от задачи).
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37669440
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javaprog фиксировать кто/когда/где изменял записьНо без ЧТО было изменено
javaprog может получится какая то экономияЭкономии на объеме данных не будет ибо нет разницы в какой таблице хранить эти 7 полей. Может вам стоит завести таблицу Сессия без create_date. Тогда можно говорить о какой-то экономии.
javaprog truncate не нуженТо есть о чистке этих таблицы (с выгрузкой из рабочей базы) вы не задумывались.
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37669508
javaprog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Но без ЧТО было измененособирался кидать изменения в другую таблицу. буду делать по старинке. спасибо.
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37670085
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> CREATE TABLE audit (
> audit_id serialnot null primary key,
> create_datetimestamp,
> create_user_idint references users(user_id),
> create_ip inet,
> create_serverint,
> ....
> );
>
> create table test(
> test_idnot null primary key,
> audit_id references audit(audit_id),
> ....
> );


За точечками-то что скрывается ?
Гюльчатай, личико-то открой ...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37670190
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javaprog,

В схеме которую ты предложил для таблиц у которых включен аудит есть доп. поле audit_id для связи с таблицей аудита? Т.е. получается что все таблицы завязаны на таблице аудита. Можно сделать по другому.
В таблице audit завести поле audit_tabname_id, создать справочник с таблицами для которых включен аудит (id, audit_tabname) для связи с таблицей audit, и не надо будет в каждой таблице для которой включается аудит создавать поле audit_id.
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37671541
javaprog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivами-то что скрывается ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE audit (
audit_id serial not null primary key,
create_date timestamp,
create_user_id int references users(user_id),
create_ip inet, 
update_server int,
update_date timestamp,
update_user_id int references users(user_id),
update_ip inet, 
update_server int
);


Andronтак лучше
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37671955
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> ами-то что скрывается ?
>
> CREATE TABLE audit (
> audit_id serialnot null primary key,
> create_datetimestamp,
> create_user_idint references users(user_id),
> create_ip inet,
> update_serverint,
> update_datetimestamp,
> update_user_idint references users(user_id),
> update_ip inet,
> update_serverint
> );

Т.е. старые или новые данные таблицы ты там хранить не собираешься.
Тогда действительно незачем делать отдельные таблицы.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37672432
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТогда действительно незачем делать отдельные таблицы.

Ну, может у него высоконагруженная система и эта таблица становится бутылочным горлышком,
которое просаживает общую производительность...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
одна таблица аудита для всех таблиц
    #37673315
javaprog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТ.е. старые или новые данные таблицы ты там хранить не собираешься.
Тогда действительно незачем делать отдельные таблицы.

данные хранятся в клонах исходных таблиц.
Dimitry SibiryakovНу, может у него высоконагруженная система и эта таблица становится бутылочным горлышком,
которое просаживает общую производительность...
ничего такого. просто в качестве неудачного эксперимента.

чего не буду делать)
Код: plsql
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.
create table test(
test_id serial not null primary key,
a text
);

create table au_test(
test_id int,
a text
);

CREATE TABLE audit (
audit_id serial not null primary key,
table_oid oid,
oper char(1),
mod_user varchar(50),
mod_date timestamp
);

create or replace function tf_audit() returns trigger 
as
$$
declare 
  sql text;
begin
  if TG_OP='INSERT' then
    insert into audit(table_oid, oper, mod_user, mod_date) 
    select TG_RELID, 'i', current_user, now();

  elseif TG_OP='UPDATE' then
    insert into audit(table_oid, oper, mod_user, mod_date) 
    select TG_RELID, 'u', current_user, now();

   execute 'insert into au_'||TG_TABLE_NAME||' select $1.*' USING  old;  
     
  elseif TG_OP='DELETE' then
    insert into audit(table_oid, oper, mod_user, mod_date) 
    select TG_RELID, 'd', current_user, now();

    execute 'insert into au_'||TG_TABLE_NAME||' select $1.*' USING  old; 
 
  end if; 

  if TG_OP='DELETE' then
    return old;
  else 
    return new;
  end if;    
end;
$$
language 'plpgsql';

CREATE TRIGGER trg_test
  BEFORE INSERT OR UPDATE OR DELETE
  ON test
  FOR EACH ROW
  EXECUTE PROCEDURE tf_audit();

insert into test (a) values ('aaa');
update test set a='bbb' where test_id=1;
delete from test where test_id=1;
select * from audit;
--select * from au_test;
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / одна таблица аудита для всех таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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