首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类别嵌套成“字符串链”是个坏主意吗?

类别嵌套成“字符串链”是个坏主意吗?
EN

Stack Overflow用户
提问于 2010-10-21 15:07:05
回答 2查看 184关注 0票数 1

考虑使用“链式字符串”构建一个嵌套的类别“系统”,因为没有更好的术语。计划是这样的:

类别段塞可以是类似于“购物-服装-女人”的东西。这将关联到3个深层次的类别:购物>服装>女性。

数据库中的对象将有一个类别字段,其中包含slug。假设有几个对象,在Shopping >服装类别中有不同的插件,可能是:“购物-服装-男人”,“购物-服装-孩子”和“购物-服装-其他”。

我会有一个集合,或者一本字典,可以将这个插件翻译成对最终用户更有意义的东西(例如,“购物-服装-女性”->“女性服装”)。

如果我想选择Shopping > Clothing类别中的所有对象,我会这样做:

代码语言:javascript
复制
DB.Objects.Where(a => a.Category.Contains("shopping-clothing"));

并将返回Shopping >服装类别的所有女性、男性、儿童和服装子类别。

目标是简单的查询,但保持强大的能力,几乎无休止的子分类,没有疯狂的DB关系和连接。我也倾向于在将来使我的应用程序适应NoSQL数据库,这将有助于实现这一点。

但是,上面的问题让我很担心。会不会很慢?

这个计划是个坏主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-21 15:11:41

这听起来是个好主意。我看到的唯一直接问题是很难重命名类别。解决这个问题的一种方法是链接类别的内部ID,而不是代码。

关于Contains,我可能会选择StartsWith。这将产生一个LIKE 'shopping-clothing%',并且使用正确的索引要快得多。

还有一个提示:如果你给每个类别加上一个破折号,那么如果一个类别和另一个类别有相同的前缀,比如"shopping-clothing-womans-",你就不会遇到问题。然后,您可以随时使用StartsWith("shopping-clothing-")

票数 1
EN

Stack Overflow用户

发布于 2010-10-21 15:14:54

另一种方法是有一个单独的类别表,其中包含类别(没有狗屎夏洛克?)可以嵌套的。如下所示:

代码语言:javascript
复制
| ID | Name | ParentId |

在ParentId为0的情况下,它是主类别。

然后,在products表中,category列将引用category表中的类别。然后,您可以轻松地从categories表中选择slug。

如果您需要搜索购物服中的所有产品,您的查询可能如下所示:

代码语言:javascript
复制
    SELECT * FROM PRODUCT WHERE CategoryId IN 
    (SELECT ID FROM CATEGORY WHERE ParentId = 'shopping_clothing_id')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3985082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档