數(shù)據(jù)庫(kù)中ID/ParentID模式的數(shù)據(jù)如何快速生成樹形結(jié)構(gòu)

在數(shù)據(jù)庫(kù)設(shè)計(jì)中,通常使用ID/PID這樣的模式表示上下級(jí)關(guān)系,最常見的就是category表的設(shè)計(jì),比如


CREATE TABLE IF NOT EXISTS `item`.`item_category` (

? `item_category_id` BIGINT UNSIGNED NOT NULL,

? `store_id` BIGINT UNSIGNED NOT NULL COMMENT '所屬店鋪ID',

? `category_name` VARCHAR(45) NOT NULL COMMENT '分類名稱',

? `parent_id` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '父級(jí)分類ID',

? `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,

? `create_user_id` BIGINT UNSIGNED NOT NULL,

? `last_modify_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

? `last_modify_user_id` BIGINT UNSIGNED NOT NULL,

? `is_deleted` BIGINT UNSIGNED NOT NULL DEFAULT 0,

? PRIMARY KEY (`item_category_id`)

)

COMMENT = '商品分類'


使用parent_id表示上級(jí)分類,這種表示上下級(jí)的方式在數(shù)據(jù)庫(kù)設(shè)計(jì)中很通用,因此,是否有種方式將這種結(jié)構(gòu)快速的生成樹形結(jié)構(gòu)呢?

IdPidEntryTreeBuilder

用于將具有ID/PID這種結(jié)構(gòu)的數(shù)據(jù)生成Tree,比如保存省市縣的數(shù)據(jù)


IntIdPidEntry china = new IntIdPidEntry(1, rootId, "中國(guó)");

IntIdPidEntry hunan_province = new IntIdPidEntry(2, 1, "湖南省");

IntIdPidEntry zhangjj = new IntIdPidEntry(3, 2, "張家界市");

IntIdPidEntry changsha = new IntIdPidEntry(4, 2, "長(zhǎng)沙市");

IntIdPidEntry sangzhi = new IntIdPidEntry(5, 3, "桑植縣");

IntIdPidEntry guangdong_province = new IntIdPidEntry(7, 1, "廣東省");

IntIdPidEntry guangzhou = new IntIdPidEntry(8, 7, "廣州市");

IntIdPidEntry tianhe = new IntIdPidEntry(12, 8, "天河區(qū)");

IntIdPidEntry dongguan = new IntIdPidEntry(9, 7, "東莞市");

IntIdPidEntry hubei_province = new IntIdPidEntry(10, 1, "湖北省");

IntIdPidEntry yunan_province = new IntIdPidEntry(11, 1, "云南省");


我們只需要將這些數(shù)據(jù)使用IdPidEntryTreeBuilder add到給定的Tree中即可


List<IntIdPidEntry> elements = getElements();? // 上面的數(shù)據(jù)列表

Tree<Integer, MyTreeElement> tree = new MappedTree<>();

IdPidEntryTreeBuilder<Integer, IntIdPidEntry, MyTreeElement> builder = new IdPidEntryTreeBuilder<>();

builder.add(tree, elements, mapper); // 將數(shù)據(jù)add到樹中即可生成樹形結(jié)構(gòu)


Github地址

Java中臺(tái)項(xiàng)目

代碼所在程序包

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容