Mysql 内容系统中的硬编码URL与嵌套集与组合

Mysql 内容系统中的硬编码URL与嵌套集与组合,mysql,database,database-design,url-routing,content-management-system,Mysql,Database,Database Design,Url Routing,Content Management System,我已经建立了一个数据库来处理为网站制作的内容,但是,考虑到长期的发展,我不确定我是否有最好的系统 目前,我正在使用通过index.php传递所有内容的路由方法,它.htaccess路由如下index.php?route=example/url(用户看到http://www.domain.com/example/url) 目前数据库的设置如下: uid | title | content | category --------------------------

我已经建立了一个数据库来处理为网站制作的内容,但是,考虑到长期的发展,我不确定我是否有最好的系统

目前,我正在使用通过
index.php
传递所有内容的路由方法,它
.htaccess
路由如下
index.php?route=example/url
(用户看到
http://www.domain.com/example/url

目前数据库的设置如下:

uid            | title        | content | category
--------------------------------------------------
/              | Home         | aaa     | 1
/example       | Example      | bbb     | 2
/example/url   | Example: URL | ccc     | 2
虽然我不确定这是否是最好的方法,特别是如果我想将
示例
重命名为
某物
-我必须重命名每个URL

因此,我也考虑了嵌套集方法(例如),尽管它只会在数据库中显示许多不同的数字,我可以通过它的节点访问所有内容。下面的例子

node | left | right | name
--------------------------
1    | 1    | 6     | Home
2    | 2    | 5     | Example
3    | 3    | 4     | URL
那么我可以使用节点作为uid吗?但我不确定如何翻译
http://www.domain.com/example/url
uid
等于3

目前,我的数据库中已经有一个分类列,用于对内容进行分类,尽管我可能会对此进行修改

我基本上是在寻找关于如何继续的建议,因为随着网站内容的增加,改变设置将变得更加困难,所以我希望从第一天开始就做好这件事

  • 这两种方法中哪一种更适合扩展性

  • 如果是第二个,如何将URL翻译到节点

  • 我是否可以以某种方式将两者结合起来,以便原始数据库将uid存储为节点号,然后进行某种连接,使uid成为url(如1所示)-然后]

    ^我想我更喜欢这个(第三个),但不确定在MySQL中到底该怎么做,还有其他一些好处:

    • 我可以用父节点替换我的分类系统-这可能更好
    • 理论上,我也可以将节点ID存储在统计系统中,而不是URL中

如果有人能给我一些帮助/建议,我将不胜感激

如果您使用
index.php?route=example/url
,您总是可以这样做:

$args = explode( '/', $_GET['route'] );
$args = filter_var_array( $_GET['route'], FILTER_SANITIZE_STRING );
那么$args的值将是:

0 -> example
1 -> url
然后,您可以使用这些值来确定要加载的模板,以及要从数据库中获取的内容,或者您已经在做的任何事情


HTH.

好吧,如果您使用
index.php?route=example/url
,您总是可以这样做:

$args = explode( '/', $_GET['route'] );
$args = filter_var_array( $_GET['route'], FILTER_SANITIZE_STRING );
那么$args的值将是:

0 -> example
1 -> url
然后,您可以使用这些值来确定要加载的模板,以及要从数据库中获取的内容,或者您已经在做的任何事情


HTH.

嵌套集模型可能是一个很好的选择。这将导致表格布局,如(
id,left,right
是嵌套集模型所需的字段,其他字段包含各自的内容):

可以找到有关如何执行特定查询的更多详细信息

但是,我不会在数据库上执行查找,而是执行一个简单的数组缓存:

new array('/' => array('content' => 'aaa', 'category' => 'bbbb'),
          '/example/' => array(),
          .....
);
这个缓存可以很容易地建立(虽然很昂贵),也可以很容易地查询


另一方面:我怀疑您试图在这里为页面内容建模。也许你应该重构你的数据库结构,因为这个表有两个职责(url->内容映射和内容)。

嵌套的集合模型可能是一个很好的选择。这将导致表格布局,如(
id,left,right
是嵌套集模型所需的字段,其他字段包含各自的内容):

可以找到有关如何执行特定查询的更多详细信息

但是,我不会在数据库上执行查找,而是执行一个简单的数组缓存:

new array('/' => array('content' => 'aaa', 'category' => 'bbbb'),
          '/example/' => array(),
          .....
);
这个缓存可以很容易地建立(虽然很昂贵),也可以很容易地查询


另一方面:我怀疑您试图在这里为页面内容建模。也许你应该重构你的数据库结构,因为这个表将有两个职责(url->内容映射和内容)。

在某种程度上,似乎与我目前的做法没有什么不同-尽管我现在的做法会更快,因为我只需要在uid列中找到示例/url,与我目前的做法似乎没有什么不同-尽管我现在的做法会更快,因为我只需要在uid列中查找示例/url是-如果使用第二种方法,我会使映射远离内容。。。数组缓存听起来很有趣,尽管正如您所说的昂贵(我想象最终的大小),即使映射表中有
id、left、right、name、uid
,也会很好,尽管我希望尽可能使
uid
保持最新。。。然后在内容表中有
id
(叶的节点/id)?这就是映射的
id、左、右、名称、内容
(如果希望链接具有除内容本身以外的其他名称,否则请在此处删除名称!)<代码>内容是对其他表上内容id的引用。是-如果使用第二种方法,我会使映射远离内容。。。数组缓存听起来很有趣,尽管正如您所说的昂贵(我想象最终的大小),即使映射表中有
id、left、right、name、uid
,也会很好,尽管我希望尽可能使
uid
保持最新。。。然后在内容表中有
id
(叶的节点/id)?这就是映射的
id、左、右、名称、内容
(如果希望链接具有除内容本身以外的其他名称,否则请在此处删除名称!)<代码>内容是对其他表上内容id的引用。