树形结构数据表的设计需要用到两种方法:嵌套集(Nested Set)和邻接表(Adjacent List)。以下是两种方法的代码实现:
-- 嵌套集 CREATE TABLE `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `lft` int(11) DEFAULT NULL COMMENT '左值', `rgt` int(11) DEFAULT NULL COMMENT '右值', `level` int(11) DEFAULT NULL COMMENT '层级', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品分类'; -- 邻接表 CREATE TABLE `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `parent_id` int(11) DEFAULT NULL COMMENT '父级ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品分类';
嵌套集法是通过左右值和层级来表示节点之间的关系,优点是查询效率高、无限级分类,缺点是增加、删除、移动节点时比较复杂。
邻接表法是通过父节点ID来表示节点之间的关系,优点是增加、删除、移动节点简单,缺点是查询效率稍低、不适合无限级分类。
对于具体应用情况,大家需要根据需求选择合适的方法,灵活设计数据表结构。