Postgresql 数据库设计问题(触发器与函数)

Postgresql Database Design Questions (Trigger vs Function)

我正在为 CMS 系统构建数据库,现在我不再确定该走哪条路,注意到所有业务逻辑都在数据库层(我们使用 PostgreSQL 13 和该应用程序计划成为 SaaS):

1- 应用程序有与之关联的文件夹和文档,因此如果我们将一个文件夹(或一组文件夹)从其父文件夹移动到另一个文件夹,则该文件夹的权限以及底层文档必须遵循新位置的权限(发送对权限 table 的更新),这是通过 after 语句触发器更好地执行,还是我们需要强制所有代码调用单个方法来移动文件夹、文档并更新它们的权限。

2-在所有情况下都使用 AFTER 语句触发器而不是 AFTER 行触发器更有意义,因为它们做同样的事情,但是使用语句触发器您可以批量处理所有受影响的行(如此完成更有效),所以如果我强制在另一个 table 中插入一条记录,如果发生更新或插入,它对单行会有类似的性能,但如果它们是 1000 会快得多语句级触发器中的行(因为我可以轻松地执行 INSERT INTO .. SELECT * FORM new_table)。

您需要行级触发器或带有 transition tables 的语句级触发器,以便您知道语句影响了哪些行。为了避免重复,后者可能是更好的选择。

您可以在查询 table 时通过递归地遵循包含链来确定权限,而不是在每次移动对象时都修改权限。这里的问题是您是否更愿意在修改数据或查询数据时做额外的工作。