引用两个相互关联的表
Reference two tables that are related to each other
假设我有这些实体:Folder
、Group
、Document
。
现在,每个 Folder
有很多 Document
,这些 Document
可以有一个 Group
,也可以没有,在 Folder
里面。
因此,Folder
将同时包含分组和未分组的 Document
。
我将如何构建这样的关系?
我想到了两个办法:
Document
属于 Group
,Group
属于 Folder
。这个
要求我对每个 Folder
总是有一个 "ungrouped" Group
(真的很丑)
Document
属于Folder
和Group
,Group
属于
Folder
。这样我就可以参考 Folder
和
Group
,其中 group_id
可以为 null 以表示 "ungrouped"。
但这为错误打开了大门,通过将 Document
分配给 a
Group
/Folder
其中 Group
不属于 Folder
.
两种解决方案似乎都不对。这可能需要某种复合键,Document
会引用它。
这样做的正确方法是什么?
我希望您的第二种方法在实际应用程序中最不会让您头疼。虽然这可能取决于实际应用程序的细节。
另一种选择是让组 not 属于文件夹(因为这不是明确的要求),因此相同的 group_id
可能跨越各种文件夹。然后,您会将 (folder_id, group_id)
对解释为 Document
table.
中的实际组标识符
假设我有这些实体:Folder
、Group
、Document
。
现在,每个 Folder
有很多 Document
,这些 Document
可以有一个 Group
,也可以没有,在 Folder
里面。
因此,Folder
将同时包含分组和未分组的 Document
。
我将如何构建这样的关系?
我想到了两个办法:
Document
属于Group
,Group
属于Folder
。这个 要求我对每个Folder
总是有一个 "ungrouped"Group
(真的很丑)Document
属于Folder
和Group
,Group
属于Folder
。这样我就可以参考Folder
和Group
,其中group_id
可以为 null 以表示 "ungrouped"。 但这为错误打开了大门,通过将Document
分配给 aGroup
/Folder
其中Group
不属于Folder
.
两种解决方案似乎都不对。这可能需要某种复合键,Document
会引用它。
这样做的正确方法是什么?
我希望您的第二种方法在实际应用程序中最不会让您头疼。虽然这可能取决于实际应用程序的细节。
另一种选择是让组 not 属于文件夹(因为这不是明确的要求),因此相同的 group_id
可能跨越各种文件夹。然后,您会将 (folder_id, group_id)
对解释为 Document
table.