1. 程式人生 > >多級父子關係資料庫設計

多級父子關係資料庫設計

像類目,省市區刪除其父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沒值也新增不了(外來鍵的特性)