Mysql如何设置商品分类?

土货
  • 711

每个商品都有一个父类吧?
假如:
子类:牛仔裤
父类:男装

现在数据库,我新建了2个表 ,一个商品表(Product) 一个分类表(Category)
商品表有个分类字段,记录属于哪个分类

后台发布一个裤子的商品,.选择分类是 男装-牛仔裤

现在问题是 :如果我把子类的 牛仔裤删掉了.
那么,商品现在怎么办?商品的分类字段怎么办?

按正常逻辑来说,应该删掉牛仔裤的同时 ...商品表的分类字段也应该清空吧?

在比如:
删掉父类:男装,那么,以之名下的商品怎么办?

怎么来设计最合理啊?

回复
阅读 3.9k
4 个回答

一般来说这样的删除不会存在,因为他是上一级。举个例子,中国-》河北省-》石家庄市-》定州县、元城县(我不太了解这个,随便举个例子) ,一般不会删除石家庄市这个分类,因为他下面挂着商品呢。
如果你非要删除的话,那么数据库中有这么一条,叫做数据是不能删除的。所以映射出一种叫做假删除的操作。具体是这样的,在你的Category表中加入一个字段,我个人倾向于是is_deleted tinyint(1) default(0) ,如果我要删除这条数据,那么把is_deleted设置为1就可以了,这时候这个cate就被删除了,检索的时候where(['is_deleted'=>0])->select() 就可以了。那么既然删除了,那么在显示某个商品详情,可以根据product_cate_id 去cate表里面查,这时候就不要加is_deleted,原因有2,1是这是id查找,理论上最快,加上其他条件不会更快,2是这条数据可能被删除了。

你好,个人认为应该可以这样,拿你举的例子来说:
商品表(Product):
id name category_id
1 我是牛仔裤商品 2
商品表(Product):
id name pid
1 男装 0
2 牛仔裤 1
当删除Category中牛仔裤时,(这里假定牛仔裤下面已经没有其他分类)应该是是需要将Product表中分类为牛仔裤的都删掉。因此删除商品时应该提示用户该分类下的商品都会被删除掉。
删掉父类男装时,应该先判断男装下面是否还有子分类,若还有子分类则提示将子分类类全部删除之后才能删除父级分类。

两种方式,
1.软删除,就像第一个回答那样,但是如果数据太多的时候会有冗余
2.在你删除子分类的时候同时会将你这个分类下的内容删除掉,就像第二个回答。
一般情况下如果东西没那么多的话完全可以直接删除掉,如果东西多的话并且你不确定这个东西还要不要,这个时候就用软删除,删除分类的时候不删除产品.

我之前做过的一个角色树可能跟这个差不多。我的想法和上面一样,删除可以采用逻辑删除(即设置一个is_deleted字段,默认为false,删除操作之后改为true)。将最高一级的父类的pid设为-1,需要展示商品树的时候从pid=-1开始遍历,再根据查询出的id当作pid一级一级往下递归遍历即可

宣传栏