代码之家  ›  专栏  ›  技术社区  ›  Emad

数据库设计问题,使用多个表或XML

  •  1
  • Emad  · 技术社区  · 16 年前

    在数据模型中成像以下3个关系

    实体路径链接

    两种关系都是1对多的。所以实体有多条路径,一条路径有多个链接。

    我应该做3个表,表之间有关系吗

    或者创建一个将路径信息存储为XML的表。

    此表(我们称之为路径)将存储1个路径/行。因此,我们最终得到2个表而不是3个:实体路径

    XML如下所示:

    <path>
       <link entitySource=1 entityTarget=2>
       <link entitySource=2 entityTarget=6>
       <link entitySource=6 entityTarget=9>
    </path>
    

    每种设计的好处是什么?我想使用三表设计,需要一个好的解释来说服CTO我为什么要这样做。他相信XML路由是一个更好的设计,因为它将减少数据库连接,从而提高读取性能。

    读取性能很重要,因为此表将用于存储数百万条记录,需要快速搜索。

    3 回复  |  直到 16 年前
        1
  •  5
  •   gbn    16 年前

    桌子

    一些想法:

    • 解析XML将非常昂贵
    • 假设有1亿个“行”,这是一个6GB的UnicodeXML字符串
    • 数据库设计为连接
    • 标引?
    • 这不是可以用CTE(SQL Server)遍历的单个自引用表吗?
    • 最后,为什么CTO在这个级别工作?
        2
  •  2
  •   Remus Rusanu    16 年前

    我们谈论的是什么数据库引擎?

    如果是商业的 关系式 引擎(SQL Server、Oracle、DB2、MySQL),那么最好的性能将来自于使用…关系。换句话说,就是桌子。索引,外键约束,这类东西。虽然大多数都有一些XML支持,但它将与关系性能不匹配。我可以理解关于将XML分解为表而不是将其保存在XML blob中的讨论。但是,像XML那样建立多对多关系和外键的模型,就像我在几天内看到的那样是个坏主意(我每天都看到坏主意…)。

    另一方面,如果您正在谈论一些深奥的面向XML的数据库,请告诉我们:)

        3
  •  0
  •   Charles Bretana    16 年前

    这取决于 领域模型 具有作为完整类实体的链接,或者路径的链接集合是否只是路径的属性。

    第一种情况是正确的,你将永远需要搜索数据的个别链接,看看他们属于什么路径,或任何其他目的。

    第二个可能是真的,如果您永远不需要访问或处理单个链接或任何单个链接,但将永远只访问路径上作为完整集合的所有链接。