有没有一种模式可以避免在数据库设计中不断增加链接表



当前正在确定一个新系统的范围。与许多系统一样,它将需要存储文档并将它们链接到其他类型的项目。在这种情况下,Document对象可以属于Job,也可以属于Item(后者又属于作业(。

我们可以通过对Document设置JobId和ItemId来实现这一点,并在必要时将其中一个留空,但这意味着处理代码中的条件逻辑很烦人。因此,两个链接表似乎是一个更好的主意。

然而,在未来的某个时刻,我们可能需要将Documents链接到系统中的其他项目。例如,有CompanyUser对象,我们可能希望根据它们记录Documents。可能还有更多。

这将导致链接表的激增,尽管链接表很有效,但却很混乱,难以遵循。

此解决方案位于SQL Server中,将通过实体框架在代码中进行处理。

是否有任何设计原则可以让我们以更整洁、更灵活的方式将Document对象与各种其他系统对象连接起来?

您可以存储两个值:id和文档所附加的对象类型。它不允许使用外键,但与许多应用程序开发框架兼容。

如果您有分区选项,那么您可以将不同的分区专用于不同的对象类型。

您还可以有多个表,一个表用于作业文档,一个用于项目文档,并通过UNION all将所有表放在一起的视图来获得所有表的概述。如果您需要该结果集中的唯一性,那么您可以使用UUID作为主键,或者在视图中添加一个额外的列来表示从哪个表中读取了行。

最新更新