作者mrbigmouth (拒绝崩溃的蒲公英)
看板Database
标题[SQL ] 链式资料的储存方式?
时间Tue Dec 6 09:32:09 2011
现在有一个网路售货系统,内有的商品类别五花八门
毎个类别都可能拥有更细的子类别,分支度无法事先估计
商品拥有多於一种的类别,可能只属於某类别却不属於其子类别
子类别可能拥有多於一种的父类别
最复杂的状态可能出现以下可能:
电脑─┬→桌电→IBM,Apple....etc
├→笔电→...........
└→平板电脑→A厂牌,B厂牌
↗
手机─┼→智慧型手机
└→一般手机
超值优惠┬→八折商品
├→五折商品
└→免费赠品
A商品可能属於"平板电脑"但非A厂牌或B厂牌
所以当使用者点击"平板电脑","手机","电脑"类别时都会出现A商品
但点击A厂牌时不会出现A商品
而A商品除了"平板电脑"类别以外还可能拥有"八折商品"这个类别
所以在点击"八折商品"或者"超值优惠"时也可能会出现
这些类别被要求能从後台随意新增修改,所以不能用写在档案中的方式
过往我在遇到这种超复杂的资料结构时都是把资料变成json或者xml方式存到资料库
但这里会变成"需要把所有资料读出解析才有办法知道某某类别会出现哪些商品"
效率上行不通
目前想到的暂时解法是以两个Table储存类别与类别关系
Table:类别 Table:类别关系
ID Type Parent Child
1 超值优惠 1 2
2 八折商品 3 5
3 手机 4 5
4 电脑 5 6
5 平板电脑 5 7
6 A厂牌
7 B厂牌
要记录商品的类别时则以特殊结构储存(比如按阶层顺序储存的CVS格式)
再透过字串比对的方式去找出哪些类别有哪些商品(LIKE '%(5)%')
但这个方法的缺点是....无论是要秀出"全商品类别一览",或者後台要编辑全类别时
处理起来都会大费周章,要花许多功夫才能转化为能够理解的形式
请问在关联式资料表资料库下遇到这类复杂结构时
有更好的处理方式吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.46.134.109
1F:→ mrbigmouth:最大的缺点应该是..每次改变类别时都要重新建置全类别 12/06 13:36
2F:→ mrbigmouth:暂时想不到办法单纯只改单一一条关系... 12/06 13:37
3F:→ evernever:想问一下是MSSQL吗? 12/06 17:55
4F:→ mrbigmouth:是MySQL... 12/06 17:59
5F:→ chrisQQ:用 tag 的方法来做…? 12/06 18:04
6F:→ mrbigmouth:详细希望? 12/06 20:29
7F:→ mrbigmouth:还没办法的话只好不靠mysql 自建物件导向式储存进档案 12/06 21:24
8F:→ mrbigmouth:反正都是读/写类别时需要耗资源.... 12/06 21:25