2010-03-19 49 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