考虑使用“链式字符串”构建一个嵌套的类别“系统”,因为没有更好的术语。计划是这样的:
类别段塞可以是类似于“购物-服装-女人”的东西。这将关联到3个深层次的类别:购物>服装>女性。
数据库中的对象将有一个类别字段,其中包含slug。假设有几个对象,在Shopping >服装类别中有不同的插件,可能是:“购物-服装-男人”,“购物-服装-孩子”和“购物-服装-其他”。
我会有一个集合,或者一本字典,可以将这个插件翻译成对最终用户更有意义的东西(例如,“购物-服装-女性”->“女性服装”)。
如果我想选择Shopping > Clothing类别中的所有对象,我会这样做:
DB.Objects.Where(a => a.Category.Contains("shopping-clothing"));并将返回Shopping >服装类别的所有女性、男性、儿童和服装子类别。
目标是简单的查询,但保持强大的能力,几乎无休止的子分类,没有疯狂的DB关系和连接。我也倾向于在将来使我的应用程序适应NoSQL数据库,这将有助于实现这一点。
但是,上面的问题让我很担心。会不会很慢?
这个计划是个坏主意吗?
发布于 2010-10-21 15:11:41
这听起来是个好主意。我看到的唯一直接问题是很难重命名类别。解决这个问题的一种方法是链接类别的内部ID,而不是代码。
关于Contains,我可能会选择StartsWith。这将产生一个LIKE 'shopping-clothing%',并且使用正确的索引要快得多。
还有一个提示:如果你给每个类别加上一个破折号,那么如果一个类别和另一个类别有相同的前缀,比如"shopping-clothing-womans-",你就不会遇到问题。然后,您可以随时使用StartsWith("shopping-clothing-")。
发布于 2010-10-21 15:14:54
另一种方法是有一个单独的类别表,其中包含类别(没有狗屎夏洛克?)可以嵌套的。如下所示:
| ID | Name | ParentId |在ParentId为0的情况下,它是主类别。
然后,在products表中,category列将引用category表中的类别。然后,您可以轻松地从categories表中选择slug。
如果您需要搜索购物服中的所有产品,您的查询可能如下所示:
SELECT * FROM PRODUCT WHERE CategoryId IN
(SELECT ID FROM CATEGORY WHERE ParentId = 'shopping_clothing_id')https://stackoverflow.com/questions/3985082
复制相似问题