创建“目录”类型数据库

时间:2011-02-21 22:57:52

标签: php mysql database-design documentation documentation-generation

确定从一开始就开始,我们处于需要为我们的产品创建文档的阶段。由于我们的产品是基于网络的,我打算创建一个在线文档+在每个产品上添加一份。

我计划的文档将使用PHP-HTML front和Database Back-end。

所以这就是我试图构建的内容:

Table of Contents
    1 Getting Started
        1.1 Hello World
        1.2 Installing
            1.2.1 Windows
            1.2.2 Unix
            1.2.3 Mac
        1.3 Configuring
            1.3.1 Windows
            1.3.2 Unix
            1.3.3 Mac
    2 Hal
        2.1 Dave
        2.2 9000
        ....
        ....

所以这是表格。

CREATE TABLE content(
    id VARCHAR(50) NOT NULL,
    parentId VARCHAR(50) DEFAULT NULL,
    title VARCHAR(255) NOT NULL,
    message TEXT NOT NULL,
    dateReg TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY(id)
    FOREIGN KEY (parentId) REFERENCES `content` (id) ON DELETE CASCADE ON UPDATE CASCADE
)

请原谅语法,这只是一个模型

插入内容如下

INSERT INTO content ('1', 'Getting Started', 'Hello', NULL);
INSERT INTO content ('1.1', 'Hello World', 'cout << \"Hello World\";', NULL);
.... and so on

检索必须在php中完成。以下只是制作“结构内容表”

$top_query = "SELECT * FROM content WHERE parentId IS NULL";
while($top_res = mysql_fetch_array($top_query)){

    print $top_res['title'] . "\n";

    $child_query = mysql_query("SELECT * FROM content WHERE parentId={$top_res['id']}");
    while($child_res = mysql_fetch_array()){

        print $child_res['title'] . "\n";
    }
}
  

现在我知道你会说什么,它需要递归,是的,我知道,现在睡眠不足是如此糟糕,我甚至不能拼写递归(它是由谷歌铬自动拼写)。但递归不是我的问题,我可以解决这个问题。

我的问题:我无法帮助它认为这是gona发出的很多查询,并且数据库是每个用户访问此文档的心脏病发作。

问题:我是在正确的轨道上,还是有任何人建议让这项工作充分发挥并降低性能。

提前致谢

3 个答案:

答案 0 :(得分:2)

这是一个典型的树形结构,所以只需谷歌搜索一些不会发送数十个查询的解决方案:google: php tree structure

Nested Set可能是一个完美的选择,因为它允许您轻松检索整个树,指向指定节点的路径( root - &gt; sub - &gt; sub - &gt; node )和元素在树中有固定的位置。

答案 1 :(得分:1)

我认为最好将目录缓存在.html文件中,而不是调用始终返回相同内容的脚本。您只需在每次更改目录时重新创建缓存。

答案 2 :(得分:1)

文档......

说发布之间的文档是否是静态的,这是否公平? 如果是这样,请考虑在HTML中缓存完整文档的静态副本。

您也可以走到一半,并在更新目录时将PHP数组序列化为文件。然后显示页面只包含文件,并自动拥有树结构的变量。