Sql 具有自引用和不明确列的关系表
我正在为一个系统编写一个关系数据模型,该系统跟踪在浏览器中渲染的一组框,每个框都包含渲染图像 目前,有一个表:Box。每行有x和y坐标、宽度和高度列,以及图像内容类型(例如mime类型)和内容位置(例如文件路径或URL)列 某些框有一层嵌套,即一个框可以包含另一个框。在这些情况下,“内容类型”列具有特殊值“box”,并且该位置是box表的自引用 某些内容类型(少数)具有与内容类型相关的额外值,例如,如果图像文件是更复杂的多页格式(例如PDF),则我需要在框中存储将呈现的页面Sql 具有自引用和不明确列的关系表,sql,relational,check-constraints,Sql,Relational,Check Constraints,我正在为一个系统编写一个关系数据模型,该系统跟踪在浏览器中渲染的一组框,每个框都包含渲染图像 目前,有一个表:Box。每行有x和y坐标、宽度和高度列,以及图像内容类型(例如mime类型)和内容位置(例如文件路径或URL)列 某些框有一层嵌套,即一个框可以包含另一个框。在这些情况下,“内容类型”列具有特殊值“box”,并且该位置是box表的自引用 某些内容类型(少数)具有与内容类型相关的额外值,例如,如果图像文件是更复杂的多页格式(例如PDF),则我需要在框中存储将呈现的页面 我可以/应该在一个
- 我可以/应该在一个表中表示这一点吗?在这种情况下,额外的参数可以(例如)作为查询字符串存储在文件URL(/path/to/PDF.PDF?page=4)中
- 如何处理更新自引用框行?i、 e.如果我删除了一个包含另一个框的框,那么两行都应该删除。我不能对location列使用外键约束,因为它可以是url(对于非嵌套框)或框行id(对于嵌套框)
- 我将尝试提供一些想法-
我可以/应该在一个表中表示这一点吗?在这种情况下,额外的参数可以(例如)作为查询字符串存储在文件URL(/path/to/PDF.PDF?page=4)中
根据您所解释的上述模型,可能存在以下可能性
A.多个框和一个图像(单页格式)-几个框包含相同的图像。
B具有一个图像的多个框(多页格式)-几个框包含同一PDF的相同/不同图像 为了使模型更通用,我们可以假设每个框引用一个
图像
表,该表可以保存任何类型的图像。这有助于对表进行规范化,并且在将来的扩展中可能会很有用(使用向后兼容选项)
假设与图像相关,您希望添加另一个字段(列)-然后更改image
表就足够了,而不是添加到主表中
如果多个框引用同一个图像,仅一个参考计数器就足以将所有信息集存储在image
表中,而无需重复数据
当然,额外的开销(我认为会很小)将参考另一个表
如何处理更新自引用框行?i、 e.如果我删除了一个包含另一个框的框,那么两行都应该删除。我不能对location列使用外键约束,因为它可以是url(对于非嵌套框)或框行id(对于嵌套框)
对于外键约束限制,一个选项是在应用程序逻辑中,您需要遍历所有框,直到找到最派生的子项(框)并首先删除它们。然后为所有的盒子做这些事情。这个想法类似于删除一棵复杂的树。但这将增加您的应用程序逻辑,从而实现对框的删除
嗯