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的引用。