多級父子關係資料庫設計
阿新 • • 發佈:2019-01-08
像類目,省市區刪除其父ID,其子類目或者省下面的市區都刪除,只需設定資料庫的父ID為外來鍵即可
如:
CREATE TABLE `shop_goods_kinds` (
`c_kindid` varchar(35) NOT NULL,
`c_kindname` varchar(35) NOT NULL,
`c_parentid` varchar(35) DEFAULT NULL,
`i_disabled` int(1) unsigned zerofill DEFAULT '0',
`c_userid` varchar(35) DEFAULT NULL,
`c_platformtype` char(2) DEFAULT NULL COMMENT '0商城;1積分館;2抽獎商品;4企業服務超市;5諾諾服務; 6=雲記賬 7=政採雲',
`c_kindstype` char(2) NOT NULL DEFAULT '0' COMMENT '第一層類目型別(0預設 1虛擬商品類目)',
PRIMARY KEY (`c_kindid`) USING BTREE,
KEY `shop_goods_kinds_fk1` (`c_parentid`),
CONSTRAINT `shop_goods_kinds_fk1` FOREIGN KEY (`c_parentid`) REFERENCES `shop_goods_kinds` (`c_kindid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品類別表';
將本表的c_parentid設為本表的外來鍵,在查詢的時候進行外連線查詢,可獲取本類目下是否還有子類目
如:
SELECT DISTINCT a.c_kindid, a.c_parentid, a.c_kindname,a.c_kindstype, CASE WHEN b.c_parentid IS NULL OR b.c_parentid = '' THEN 'N' ELSE 'Y' END AS hasChild FROM shop_goods_kinds a LEFT JOIN shop_goods_kinds b ON a.c_kindid = b.c_parentid WHERE a.i_disabled = '0'
也可以在刪除某一級類目時將其子類目刪除
也要注意新增某一類目時如果其外來鍵–父ID沒值也新增不了(外來鍵的特性)