Sql 具有自引用和不明确列的关系表

Sql 具有自引用和不明确列的关系表,sql,relational,check-constraints,Sql,Relational,Check Constraints,我正在为一个系统编写一个关系数据模型,该系统跟踪在浏览器中渲染的一组框,每个框都包含渲染图像 目前,有一个表:Box。每行有x和y坐标、宽度和高度列,以及图像内容类型(例如mime类型)和内容位置(例如文件路径或URL)列 某些框有一层嵌套,即一个框可以包含另一个框。在这些情况下,“内容类型”列具有特殊值“box”,并且该位置是box表的自引用 某些内容类型(少数)具有与内容类型相关的额外值,例如,如果图像文件是更复杂的多页格式(例如PDF),则我需要在框中存储将呈现的页面 我可以/应该在一个

我正在为一个系统编写一个关系数据模型,该系统跟踪在浏览器中渲染的一组框,每个框都包含渲染图像

目前,有一个表: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(对于嵌套框)

      对于外键约束限制,一个选项是在应用程序逻辑中,您需要遍历所有框,直到找到最派生的子项(框)并首先删除它们。然后为所有的盒子做这些事情。这个想法类似于删除一棵复杂的树。但这将增加您的应用程序逻辑,从而实现对框的删除