当前正在确定一个新系统的范围。与许多系统一样,它将需要存储文档并将它们链接到其他类型的项目。在这种情况下,Document
对象可以属于Job
,也可以属于Item
(后者又属于作业(。
我们可以通过对Document
设置JobId和ItemId来实现这一点,并在必要时将其中一个留空,但这意味着处理代码中的条件逻辑很烦人。因此,两个链接表似乎是一个更好的主意。
然而,在未来的某个时刻,我们可能需要将Documents
链接到系统中的其他项目。例如,有Company
和User
对象,我们可能希望根据它们记录Documents
。可能还有更多。
这将导致链接表的激增,尽管链接表很有效,但却很混乱,难以遵循。
此解决方案位于SQL Server中,将通过实体框架在代码中进行处理。
是否有任何设计原则可以让我们以更整洁、更灵活的方式将Document
对象与各种其他系统对象连接起来?
您可以存储两个值:id和文档所附加的对象类型。它不允许使用外键,但与许多应用程序开发框架兼容。
如果您有分区选项,那么您可以将不同的分区专用于不同的对象类型。
您还可以有多个表,一个表用于作业文档,一个用于项目文档,并通过UNION all将所有表放在一起的视图来获得所有表的概述。如果您需要该结果集中的唯一性,那么您可以使用UUID作为主键,或者在视图中添加一个额外的列来表示从哪个表中读取了行。