我应该为这个xml数据使用什么持久层(xml或mysql)?

时间:2010-03-19 01:01:25

标签: php mysql xml database

我想知道如何将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文件中存储数据那么简单吗?

1 个答案:

答案 0 :(得分:1)

entityentities的关系为0..1,而entitiesentity的关系为0 .. *。

这不是确切的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)
)