排序页面时的数据库完整性问题

时间:2011-04-19 23:35:05

标签: php mysql yii

我几乎用拖放页面排序和层次编辑来构建我的cms。

这是我的数据库中的页面表。

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个查询。

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

就好像数据库在几个查询中出现问题,很快就会破坏数据库的一致性。

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

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

干杯 汤姆

1 个答案:

答案 0 :(得分:0)

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