我有一个带有字段的Postgres表log_actions:
id -操作ID
userId
操作-BAN,ADD_PROCESS等...
action_id
action_id是以下表之一的ID:
user_bans for action = BAN
user_processes for action = ADD_PROCESS
答案 0 :(得分:1)
我建议不要使用这种设计,因为它会阻止使用外键进行完整性控制。 (您可能希望研究实体子类化。)似乎您还有一个规范化问题,因为action_id
似乎在功能上确定了action
而不是超键。
答案 1 :(得分:1)
这是用于处理“一个”关系的可行结构。正如乔恩指出的那样,您不能声明外键关系。真可惜,这不是一个很好的解决方案。
Postgres提供表继承。这可能正是您想要的。 “动作”表都可以从actionid
表继承actions
。这可以用于联接。每个表都可以有其自己的特定列(和外键关系)。
有关继承的更多信息,请参考documentation。