2010-03-19 44 views
0

我想知道我可以如何在持久层中存储xml结构。什么持久层(xml或mysql)应该用于这个XML数据?

事业的关系数据是这样的:

<entity id="1000070"> 
    <name>apple</name> 
    <entities> 
     <entity id="7002870"> 
      <name>mac</name> 
      <entities> 
       <entity id="7002907"> 
        <name>leopard</name> 
        <entities> 
         <entity id="7024080"> 
          <name>safari</name> 
         </entity> 
         <entity id="7024701"> 
          <name>finder</name> 
         </entity> 
        </entities> 
       </entity> 
      </entities> 
     </entity> 
     <entity id="7024080"> 
      <name>iphone</name> 
      <entities> 
       <entity id="7024080"> 
        <name>3g</name> 
       </entity> 
       <entity id="7024701"> 
        <name>3gs</name> 
       </entity> 
      </entities> 
     </entity> 
     <entity id="7024080"> 
      <name>ipad</name> 
     </entity> 
    </entities> 
</entity> 

,你可以看到,它没有静态结构,而是一个动态的。 mac得到2后裔水平,而iphone得到1和ipad得到0.

我想知道如何我可以存储这些数据的最佳途径?我有什么选择。由于这种动态结构,似乎不可能将其存储在mysql数据库中。

是将其作为xml文件存储的唯一方法吗?从xml文件中获取信息(xpath/xquery/simplexml)的速度比mysql更糟还是更高?

有什么优点和缺点?我有其他选择吗?将信息存储在xml文件中,适合许多用户同时访问它?

将是伟大的反馈!谢谢!

编辑:现在我注意到我可以使用一些名为xml数据库来存储XML数据。有人可以解释这个问题吗?显然它不像仅仅将数据存储在xml文件中那么简单?

+0

所以没有一个建议使用XML数据库中存储? – 2010-03-19 01:31:25

回答

1

entity有0..1关系entities,并entities有0 .. *关系entity

这不是确切的SQL,并且极有可能在没有任何DBMS有效的,但应该可以帮助您开始:

CREATE TABLE entity (
    id int(10) AUTOINCREMENT NOT NULL, 
    xid int(10) NOT NULL, 
    name char(30) NOT NULL, 
    entities_id int(10) REFERENCES entities.id NULL, 
    PRIMARY KEY(id) 
) 

CREATE TABLE entities (
    id int(10) AUTOINCREMENT NOT NULL, 
    entityref_id int(10) REFERENCES entityref.id NOT NULL, 
    PRIMARY KEY(id) 
) 

CREATE TABLE entityref (
    id int(10) NOT NULL, 
    entity_id int(10) REFERENCES entity.id NOT NULL, 
    PRIMARY KEY(id,entity_id) 
) 
+0

但这似乎很混乱将xml转换为sql数据库?正如你所说的......它无效?不是最好将它存储为XML,所以你不必有一个中间人?如果例如。一个元素得到了1000个后裔级别......将会非常“杂乱”地在sql数据库中导航以获得关系。 – 2010-03-19 01:16:12

+0

该结构是有效的。 SQL不是。 http://stackoverflow.com/questions/2260303/storing-xml-in-a-database-for-flexible-content/2260323#2260323 – 2010-03-19 01:20:38

+0

我有一个关于实体表的问题。如果你在表'实体'中只有一个'id',那么删除'entityref_id'会更好。因为'id'可以指代'entityref_id'。为什么在'实体'中有两个ID? – 2010-03-19 03:47:55