相关疑难解决方法(0)

审计日志的数据库设计

每次我需要设计一个新的数据库时,我都会花一些时间考虑如何设置数据库模式来保存更改的审核日志.

这里已经提出了一些问题,但我不同意所有场景都有一个最好的方法:

我还偶然发现了这篇关于维护数据库更改日志的有趣文章,该文章试图列出每种方法的优缺点.它写得很好并且有很多有趣的信息,但它使我的决定更加困难.

我的问题是:是否有一个我可以使用的参考,可能是一本书或类似决策树的东西,我可以参考决定我应该根据一些输入变量去哪种方式,例如:

  • 数据库模式的成熟度
  • 如何查询日志
  • 需要重新创建记录的概率
  • 更重要的是:写或读性能
  • 正在记录的值的性质(字符串,数字,blob)
  • 存储空间可用

我知道的方法是:

1.为创建和修改的日期和用户添加列

表格示例:

  • ID
  • _1
  • _2
  • VALUE_3
  • 创建日期
  • 修改日期
  • 由...制作
  • modified_by

主要缺点:我们失去了修改的历史.提交后无法回滚.

2.仅插入表格

表格示例:

  • ID
  • _1
  • _2
  • VALUE_3
  • 删除(布尔值)
  • 用户

主要缺点:如何保持外键最新?需要巨大的空间

3.为每个表创建单独的历史记录表

历史表示例:

  • ID
  • _1
  • _2
  • VALUE_3
  • VALUE_4
  • 用户
  • 删除(布尔值)
  • 时间戳

主要缺点:需要复制所有审计表.如果架构发生更改,则还需要迁移所有日志.

4.为所有表创建合并历史记录表

历史表示例:

  • TABLE_NAME
  • 领域
  • 用户
  • NEW_VALUE
  • 删除(布尔值)
  • 时间戳

主要缺点:如果需要,我能否轻松重建记录(回滚)?new_value列需要是一个巨大的字符串,因此它可以支持所有不同的列类型.

audit logging database-design

143
推荐指数
4
解决办法
8万
查看次数

为数据库应用程序留下审计跟踪/更改历史记录的有效策略?

人们在相当复杂的数据库中维护数据更改历史记录的成功策略是什么?我经常使用和开发的应用程序之一可以真正受益于更全面的跟踪记录随时间变化的方式.例如,现在记录可以具有多个时间戳和修改的用户字段,但是我们目前没有用于记录多个更改的方案,例如,如果回滚操作.在完美的世界中,可以在每次保存之后重建记录,等等.

关于DB的一些信息:

  • 需要有能力每周增加数千条记录
  • 50-60表
  • 主修订表可能每个都有数百万条记录
  • 合理数量的外键和索引设置
  • 使用PostgreSQL 8.x

database postgresql database-design crud audit-trail

25
推荐指数
3
解决办法
2万
查看次数

历史表的优点,缺点和陷阱 - 使用触发器,sproc或在应用程序级别

我目前正在玩我的数据库中有一些表的历史表.基本上我有主表和该表的副本,其中包含修改日期和操作列,用于存储执行的操作,例如更新,删除和插入.

到目前为止,我可以想到三个不同的地方,你可以做历史表工作.

  • 主表上的触发器用于更新,插入和删除.(数据库)
  • 存储过程.(数据库)
  • 应用层.(应用)

我的主要问题是,在每个层中完成工作的优点,缺点和缺点是什么.

我可以通过使用触发器方式来考虑的一个优点是,无论在数据库之上实现什么程序,都始终保持完整性.

database sql-server audit history

17
推荐指数
4
解决办法
7340
查看次数

允许用户使用SQLAlchemy从db审计跟踪回滚

我开始将SQLAlchemy用于一个新项目,我计划在这个项目中实现类似于此静默提议的审计跟踪:

因为我已经拥有了"有趣"对象的完整历史,所以我在考虑允许用户回滚给定版本,让他们有可能无限制undo.

这可以用SQLAlchemy以干净的方式完成吗?

在内部API(业务逻辑和ORM)中公开此功能的正确方法是什么?

我是一路走来的路user.rollback(ver=42).

python audit sqlalchemy rollback

4
推荐指数
1
解决办法
1134
查看次数