代码之家  ›  专栏  ›  技术社区  ›  anjanb

设计DB表的最佳实践是什么

  •  1
  • anjanb  · 技术社区  · 14 年前

    我们正在构建数据库设计(使用PostgreSQL),对于(几乎)每个表,我有以下列

    CREATE_TIMESTAMP TIMESTAMP,
    CREATED_BY       VARCHAR(25),
    modified_TIMESTAMP TIMESTAMP,
    modified_BY       VARCHAR(25),
    

    Changelog表:如果我已经为每个需要“审计”的实体表准备了审计表,那么拥有一个Changelog表有什么意义呢?

    有鉴于此,我想知道使用上面的“样板”列是否仍然有意义。

    有什么意见吗?

    2 回复  |  直到 8 年前
        1
  •  4
  •   S.Lott    14 年前

    我尽量避免“样板栏目”。

    如果需要更改日志,请创建 ChangeLog 在日志中包含用户名、时间戳、表名和表行ID的表,而不是在表中。

    唯一接近“样板”的是代理主键(称为ID)。

    在大多数情况下,“样板文件”——改变历史——甚至不是问题,因为我试图在保留历史的地方创建设计。我尽量减少更新的发生率。

    使用“当前”记录和所有以前版本的记录,可以很容易地保存数据的全部内容。现在磁盘很便宜。一个用户更新的历史日志似乎效果更好。由于以前的版本都是可用的,所以撤销用户更改是很简单的。

    我再也看不到“样板列”的任何价值


    如果实际内容(在其他列中)没有保存,那么在日志中存储“表行ID”有什么帮助?

    什么?行的上一个值 可以是 保存的。这就是重点。你有各种各样的方法来保存历史。

    1. 一个“flag”——它创建了一个由两部分组成的键——设置为“current”和“history”。

    2. 可能使用一对日期“active on”和“inactive on”。

    这些技术中的每一种都有独特的需求;它们是设计模式,而不是样板。

        2
  •  0
  •   David Aldridge    8 年前

    如果您需要对查询进行简单的、基于索引的访问,则可以保留其中任何一个查询,例如:

    • 列出在特定日期范围内创建的记录(尽管这仍然可以很容易地从审计表中得到回答)。
    • 列出某个特定人员最近更新的记录(优化此类查询不太容易)。
    • 显示最近更新的100条记录(同样,在审计表上不容易优化)。