我们即将开始一个新项目,我现在打破了这些模型。我正在建模的大多数实体都是不可变的。
虽然我可以通过使用类似django-immutablemodel之类的东西在代码级别控制这一点,但如果我可以在数据库级别强制执行此操作,我会更自在。
我打算使用postgresql
,但如果他们支持,我会愿意考虑替代方案。据我所知,目前主要有两种方法:
如果有人尝试过这些方法并对其进行评论或知道更好的方法,我会感兴趣。
对于某些字段,我希望成为有效的一次写入,因此如果字段为NULL,则允许将其更新为某个值,但绝不允许更新具有值的字段。这表明我需要走下触发路线。
答案 0 :(得分:2)
如果大多数实体(表格?您稍后提及列)是不可变的,则将该信息放在单独的表中并撤消对这些表的所有访问权限。为可修改的数据创建第二个表,同时撤消所有权限,并使用密钥链接这两个表。现在创建一个从两个表构建的视图,并创建一个INSTEAD OF INSERT OR UPDATE OR DELETE
触发器,该触发器限制对可修改表的更新。
还有其他可能的解决方案,例如列权限,但上述解决方案具有良好的副作用,您可以优化只读表访问,并且您只需要备份可修改的几个表。