gpt4 book ai didi

database - 每个数据库表的常见审计列是什么?

转载 作者:太空狗 更新时间:2023-10-30 01:51:00 25 4
gpt4 key购买 nike

我打算将“status”、“date_created”、“date_updated”包含到数据库中的每个表中。'status' 用于软删除行。

然后,我看到很少有人还向每个表添加 'user_created'、'user_updated' 列。

如果我也添加这些列,那么每个表至少有 5 列。这会不会开销太大?

您认为拥有这五个列是个好主意吗?

此外,“user_created”中的“user”是指数据库用户吗?还是应用程序用户?

最佳答案

根据上面的评论,建议只对那些实际需要它的表添加审计。

您通常希望审核应用程序用户 - 在许多情况下,应用程序(例如 Web 或 SOA)可能会使用相同的凭据连接所有用户,因此存储数据库登录信息毫无意义。

恕我直言,date created/last date updated/lastupdateby 模式永远不会给出全貌,因为您只能看到谁进行了最后一次更改,但看不到更改的内容。如果您正在进行审计,我建议您改为使用审计 trigger 等模式进行全面变更审计。 .如果您对表的插入/更新/删除被封装,您也可以避免使用触发器,例如通过 存储过程。的确,审计表会变得非常大,但它们通常不会被查询太多(通常只是在政治迫害中),并且可以存档,很容易按日期分区(并且可以设为只读)。使用单独的审计表,您将不需要 DateCreatedLastDateUpdated 列,因为这可以派生。但是,您通常仍需要上次更改用户,因为 SQL 无法派生应用程序用户。

如果您确实决定逻辑删除,我会避免使用“状态”作为指示逻辑删除的字段,因为您可能有对流程状态(例如付款状态等)进行建模的表使用 bitchar 字段(例如 ActiveYNIsActive)对于逻辑删除很常见。

逻辑删除可能很麻烦,因为您的所有查询都需要过滤掉 Active=N 记录,并且通过在事务表中保留已删除的记录可以使这些表变得比需要的更大,尤其是在 Many : 许多/junction 表。性能也会受到影响,因为 2-state 字段不太可能具有足够的选择性以用于索引。在这种情况下,完整审计的物理删除可能更有意义。

关于database - 每个数据库表的常见审计列是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7299401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com