?關(guān)于無限級分類數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)問題,遍歷某分類下所有產(chǎn)品 效率
數(shù)據(jù)庫表結(jié)構(gòu)是這樣的:
[Category] 類別表
Id(int) 類別IdParentId(int) 父類IdName(nvarchar(50)) 類別名稱
[Product] 產(chǎn)品表
Id(int) 產(chǎn)品名稱Name(nvarchar(50)) 產(chǎn)品名稱CategoryId(int) 類別Id(對應(yīng) [Category].Id)Info(ntext) 介紹信息……
?
?
[Category] 類別表數(shù)據(jù)Id ParentId Name
1 0 服裝2 1 男裝3 2 襯衫4 2 長褲5 2 短褲6 2 T恤7 2 外套8 2 衛(wèi)衣9 2 西裝10 ?4 ?休閑褲11 ?4 ?西褲12 ?4 ?牛仔褲13 ?4 ?運(yùn)動褲
?
?
?
[Product] 產(chǎn)品表數(shù)據(jù) 不再一一舉例Id Name CategoryId Info1 23……
?
這樣設(shè)計(jì)的結(jié)構(gòu),存在很嚴(yán)重的效率問題,假設(shè)我想找出某分類(假設(shè)為男裝)下所有的產(chǎn)品,就需要用遞歸算法,找出(男裝)下的所有子分類,然后對 產(chǎn)品表進(jìn)行 條件 in 查詢,得到產(chǎn)品列表
?
找出所有男裝產(chǎn)品
首先寫程序,遞歸出 男裝分類下的子類列表(2,3,4,5,6,7,8,9,10,11,12,13)
然后用 sql 查詢出來
select * from [Product] where CategoryId in(2,3,4,5,6,7,8,9,10,11,12,13)
這樣做實(shí)在是太糟糕了
?
那么該怎么設(shè)計(jì)呢?
關(guān)于無限級分類數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)問題,遍歷某分類下所有產(chǎn)品 效率
森林海
2018-12-06 19:20:22