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

  • 相关阅读:
    yii2框架随笔9
    yii2源码学习笔记(五)
    yii2源码学习笔记(四)
    yii2源码学习笔记(三)
    yii2源码学习笔记(二)
    yii2源码学习笔记
    学习yii2.0框架阅读代码(一)
    (转)OAuth 2.0授权协议详解和流程
    (转)JavaScript 中对变量和函数声明的“提前(hoist)”
    JavaScript 中的算术运算
  • 原文地址:https://www.cnblogs.com/johnny/p/97749.html
Copyright © 2011-2022 走看看