2011-04-19 46 views
0

我已经几乎完成了拖放页面排序和层次编辑的工作。排序页面时的数据库完整性问题

这是我的分页中的页表。

CREATE TABLE `pages` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`metatitle` varchar(255) DEFAULT NULL, 
`metadesc` text, 
`metakw` varchar(255) DEFAULT NULL, 
`create_time` datetime DEFAULT NULL, 
`update_time` datetime DEFAULT NULL, 
`name` varchar(255) DEFAULT NULL, 
`url` varchar(255) DEFAULT NULL, 
`parent` int(11) DEFAULT NULL, 
`active` tinyint(1) DEFAULT NULL, 
`sort` int(11) DEFAULT NULL, 
`nofollow` tinyint(1) DEFAULT NULL, 
`deletable` tinyint(1) DEFAULT NULL, 
`navshow` tinyint(1) DEFAULT NULL, 
`type` enum('basic','dynamic','virtual') DEFAULT NULL COMMENT 'basic: only contains basic content\ndynamic: contains both dynamic and basic content\nvirtual: redirects to another page', 
`virtual_redirect` int(11) DEFAULT NULL, 
`route` varchar(255) DEFAULT NULL, 
`dynamic_desc` varchar(255) DEFAULT NULL, 
`content1` blob, 
`content2` blob, 
PRIMARY KEY (`id`), 
UNIQUE KEY `url_UNIQUE` (`url`), 
UNIQUE KEY `name_UNIQUE` (`name`) 
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1 

你可以从父场看到,我使用的是邻接表模型创建我的页面层次结构。

说我有这个页面结构...

|-Page 1 
| |-Page 3 
| |-Page 2 
| |-Page 4 
| |-Page 5 
|-Page 6 

如果我搬到3页上一层次结构现在看起来是这样的...

|-Page 1 
| |-Page 2 
| |-Page 4 
| |-Page 5 
|-Page 3 
|-Page 6 

这里是我的问题。

上面的例子涉及相当多的查询(对于这样一个小树)。我必须更改页面2-6的页面排序编号和页面3的父页面。这是7个查询。

我所经历的是每次使用它时移动操作都会产生不同的结果。即:有时它完美地工作,其他时候排序数字不能正确更新。

就好像数据库在某些查询上出现了问题,很快数据库的一致性就被破坏了。

我不确定是否因为查询太多或其他因素太多​​。但我发现很难诊断。

任何想法可能是什么问题?

干杯 汤姆

回答

0

我建议你阅读如何manage hierarchical data in database

+0

谢谢,我已经读了,你认为嵌套集模型将用于管理页面更好的办法? – Tom 2011-04-19 23:45:33

+0

我目前使用这种方法来管理我管理的主要网站上的容器(和无限的子容器)。实现可能需要一定的时间,但在找到有关树结构或项目路径的数据后,实现起来非常简单快捷。 – Bil 2011-04-19 23:52:30

+0

没有理由暗示我不会像现在那样得到同样的问题,尽管在那里? – Tom 2011-04-20 00:02:16