在PostgreSQL中删除相关记录的最佳方法是什么,而不是通过直接外键连接?

时间:2014-12-18 15:43:22

标签: postgresql

为了减少“愚蠢”表(几个相关的父实体相同的表),我们制作了一些通用表。

以下是一个例子:

tbl_settings

  • ID
  • owner_type(例如“帐户”,“用户”等)
  • owner_id(外部表记录的实际ID)
  • SETTING_NAME
  • setting_value

现在问题是删除,很容易忘记删除,例如删除用户时的用户设置。

在PostgreSQL中处理这种表的删除的正确方法是什么?

  1. 在应用程序中执行此操作(例如,在删除用户时,手动删除相关设置)?
  2. 在tbl_user(以及所有其他父表)中的数据库触发器中执行此操作吗?
  3. 别的什么?

1 个答案:

答案 0 :(得分:1)

如果表关系仅在应用程序中具有意义且向上 - 即它与数据库中数据的引用完整性无关 - 您可以在应用程序层中执行此操作。

如果"孤儿"记录违反数据(而不是业务逻辑)关系,然后在数据库中执行此操作:最安全的方法可能是通过触发器,尽管它也有缺点(例如,混淆DML错误的可能性是如果涉及触发动作,则更高。)

我对你的问题的印象是,由于某些业务逻辑,这些表主要存在,在这种情况下,我会在ORM层中处理数据库之外的删除。