小编wch*_*gin的帖子

通过转发表到多个表的外键

问题陈述

\n

我有一个表,其中有一列的值为外键,但外键的目标表因行而异。相关表可以仅根据键值来确定,并且存在一小组固定的此类表。

\n

我想在此处添加外键约束,以便我的 DBMS 可以确保引用完整性。当然,我不能直接执行此操作,但我有一个建议的解决方案,其中涉及带有传入和传出外键约束的中间“转发表”。我正在寻找评论:

\n
    \n
  • 这个解决方案是否确实解决了问题,或者我是否错过了\n边缘情况;
  • \n
  • 面对数据模型的变化,该解决方案的表现如何(例如,新的参考表);
  • \n
  • GENERATED ALWAYS AS ... STOREDPostgres列的这种使用是否合理或可疑;
  • \n
  • 该解决方案是否可能引入并发问题。
  • \n
\n

建议的解决方案

\n

为了说明该解决方案,请考虑一个存储“用户”和“组”的简单数据库。用户和组均由整数 ID 作为键控,\n并且 ID 的某些位被保留以告知其 ID 类型:

\n
-- User and group IDs are both integers, but are in disjoint subsets of the key\n-- space, distinguished by the low 8 bits.\nCREATE DOMAIN userid AS int8 CHECK ((VALUE & 255) = 1);\nCREATE DOMAIN groupid AS int8 CHECK ((VALUE & 255) = 2);\n\nCREATE TABLE users(\n    user_id userid …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design referential-integrity

7
推荐指数
1
解决办法
1292
查看次数