具有多个外键的表 - 只有一个不为空

时间:2016-02-23 05:25:06

标签: sql foreign-key-relationship

我正在尝试设计一个系统,管理员必须批准对数据和其他各种管理任务的更改 - 添加用户,添加管理员等。

我的想法是有一个包含这些通知的通知表,但问题是通知可以是前面提到的任何类型,即它的数据存储在许多表中的一个中。这是描述我当前计划的图片 - 请注意,我确信这不是一个合适的ER图。

enter image description here full_screen

此外,数据会进入pending表格,反映最终会结束的表格,前提是数据已获批准 - 这是各种各样的分期。因此,pending_user是不在user表中的user。正如你所看到的,user表格在这里没有显示,但是可以用他们的想象力。

我担心pending表中的多个空值会产生我不完全清楚的不利影响,例如空间使用量增加以及可能增加查询时间。另外,我不确定如何实现这些通知的检索。我天真的方法是选择第一个X通知,分析行以查找非空列,检索适当的数据,然后加载响应中的所有数据。

这类问题是否有更直接的模式?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为,传统方式是为用户提供各种级别的访问/读/写权限。这些访问权限定义了用户可以执行和不可执行的操作。在这种传统方法中,如果用户可以访问某个功能,他可以在没有进一步批准的情况下完成。

此外,传统上存在某种审计日志,其中包含对数据的所有重要更改的跟踪。有了这样的日志,就有可能知道谁做了改变(以及何时)。

如果你需要构建一个两阶段系统,其中一个变更必须经过批准,我会在每个重要的表中添加一个标志列,表示给定行中的值不是最终的,必须被批准。该表将存储对数据的所有历史更改,并且在此标记的帮助下,系统将知道哪个变体是最新批准的版本以及哪个变体待定并等待批准。

我不会尝试制作一个通用表来保存与许多不同表中的更改相关的数据。每个表都不同,每个表的审批流程可能不同。我怀疑你会有十多个重要的实体经过这个批准过程。