在我们的项目中,我们受益于PostgreSQL数据库的继承特性!
我们为不同的机构实现方案的动态创建。这种结构使我们能够解决大量在批量表(没有分区)的情况下立即发生的安全问题。
我们遇到的唯一问题是保证数据库的完整性,这通常(在没有继承的结构意义上)是通过外键约束来实现的。
由于 PostgreSQL 有一定的限制(参见 inheritance caveats),我们不得不没有限制地维护表结构。
是否有可能通过触发器和/或检查来“模拟”外键约束,甚至假设相对性能下降?
非常感谢任何建议! 谢谢。
最佳答案
唯一有问题的情况是您从一个共享表引用到一个父
表。您可以使用具有一列 id int primary key
的共享表 parent_ids
解决此问题。您必须使用子表上的触发器来维护此表,但这非常简单 — 插入时插入到 parent_ids,删除时从中删除,更新时更新它,这会更改 id
。
然后,您将引用此 parent_ids
表,而不是引用您的 parent
表。这将确保引用完整性,并且您不会在 2 个子表中有冲突的 id
。
它会将使用过的 ID 泄露给任何用户,但不允许访问任何其他数据。
关于database - postgresql 的继承和外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3672899/