问题:XML数据应该以何种方式保存进数据库。

 

XML数据应该以何种方式保存进数据库。

 

例子,   比如一个论坛的帖子,其XML文档结构如下:

<?xml version=”1.0” eocoding=”gb2312”?>

 

<帖子>

  <提问帖子>

<帖子ID>000001</帖子ID>

<作者ID>某某</作者ID>

<发表时间>某某时间</发表时间>

<帖子主题>某某问题</帖子主题>

<帖子内容>某某内容</帖子内容>

  </提问帖子>

  <答复帖子>

<提问帖子ID>000001</提问帖子ID>

<帖子ID>0001</帖子ID>

<作者ID>某某</作者ID>

<发表时间>某某时间</发表时间>

<帖子内容>某某内容</帖子内容>

  </答复帖子>

  <答复帖子>

<提问帖子ID>000001</提问帖子ID>

<帖子ID>0002</帖子ID>

<作者ID>某某</作者ID>

<发表时间>某某时间</发表时间>

<帖子内容>某某内容</帖子内容>

  </答复帖子>

 

</帖子>

 

那么,我有两种设计方案(本人认为第二种更可行)

 

方案一:

把整个XML文档存入一个数据表作为一条纪录。

该数据表结构:FileID(文档标识),File(文档内容),CreateDate(创建时间)

该方案优点:结构简单

缺点:不能作复杂的查询,比如要查找某个作者的所有帖子

 

方案二:

设计两个数据表,一个存放提问帖子,一个存放答复帖子,用一个ForeignKey联系两表,而且两个表并非用一个字段存放所有XML内容,而是把XML的每个叶子节点设计成一个字段

Topic表数据结构:TopicID(主键),UserIDCreateDateIssueContent

Reply表数据结构:ReplyID(主键),TopicID(外键,与TopicTopicID形成多对一关系),UserIDCreateDateContent

该方案优点:数据分类明确,方便作复杂查找

缺点:结构复杂

 

咋眼一看,我认为第二种设计方案更加合理,但我马上想到了一个问题,上述XML文件结构相对简单,容易把叶子节点设计成为二维数据表。但现实中,可能会出现更加复杂的数据结构,还可能出现属性,如下:

<a>

 <b>

   <c att01=”…” att02=”…”>

     <d>…</d>

   </c>

  

 </b>

 ….

</a>

 

出现这种相对复杂,甚至可能更复杂的结构时候,似乎用第一种方案更加通用。而第二种方案基本无法实现(除非建立多个数据表,形成复杂的关联),那么要从众多数据表把数据重新导出成为XML时肯定相当复杂,。

 

本人刚刚入门XML,了解XML的优点,但当想想具体的XML与数据库应用时候,真的没有任何设计经验。请各位为我指点迷津。

原文地址:https://www.cnblogs.com/johnny/p/97749.html