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

时间:2009-12-08 20:05:07

标签: sql xml database database-design

在数据模型中对以下3种关系进行成像

实体>路径>链路

两种关系都是1对多。因此,实体有多个路径,路径有多个链接。

我应该将这个表格作为表格之间有关系的3个表格

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

这个表(让我们称之为Paths),将存储1个路径/行。所以我们最终得到2个表而不是3个:实体>路径

XML看起来像这样:

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

每种设计有哪些好处?我想使用3桌设计,需要一个很好的解释来说服CTO为什么我应该这样做。他确信XML路由是一种更好的设计,因为它会减少数据库连接,从而提高读取性能。

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

3 个答案:

答案 0 :(得分:5)

一些想法:

  • 解析XML会很昂贵
  • 假设1亿个“行”,那是一个6GB的unicode xml字符串
  • 数据库旨在加入
  • 索引?
  • 这不是一个可以通过CTE遍历的自引用表(SQL Server)
  • 最后,为什么CTO在这个级别工作?

答案 1 :(得分:2)

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

如果是任何商业关系引擎(SQL Server,Oracle,DB2,MySQL),那么最佳性能将来自使用...关系。换句话说,表格。索引,外键约束,这种东西。虽然大多数都支持XML,但它与关系性能不匹配。我可以理解关于将XML分解为表而不是将其保存在XML blob中的讨论。但是为了模拟多对多关系和外键,因为XML就像我在很短的时间内看到的一样糟糕(我每天都看到糟糕的想法......)。

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

答案 2 :(得分:0)

这取决于您的 域模型 是否将Link作为全班实体,或者路径的链接集合是否只是路径的属性。

第一种情况是,您将需要搜索单个链接的数据,查看它们属于哪个路径,或用于任何其他目的。

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