• 问题: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与数据库应用时候,真的没有任何设计经验。请各位为我指点迷津。

  • 相关阅读:
    第三章 Selenide测试框架
    第二章 自动化测试的本质理解
    第一章 软件自动化测试的基础知识
    【算法学习】03---算法分析学习
    【算法学习】03---算法分析
    【算法学习】02---二分算法总结
    【算法学习】01---java基础以及算法基础常用类库
    前端自动化测试一些学习记录
    Ubuntu下安装Sublime3的Markdown插件
    octopress搭建记录
  • 原文地址:https://www.cnblogs.com/johnny/p/97749.html
Copyright © 2020-2023  润新知