Database design 用于处理动态分类法的专用分面搜索引擎-有助于提高性能还是灵活性?
我一直在考虑用类似ebay的分类法和依赖于特定产品类别的属性对典型的电子商务网站进行建模 第一次尝试是在EAV和表每类db继承建模之间进行选择。我之所以选择后者是因为性能,但这意味着为每个特定(类别树中的叶子)产品类别创建专用表,并将特定类别属性(如电视分辨率)建模为单独的列 如果需要向现有类别添加属性或添加新类别,则此设置不灵活。对于每项此类变更,需要以下内容:Database design 用于处理动态分类法的专用分面搜索引擎-有助于提高性能还是灵活性?,database-design,solr,nosql,faceted-search,Database Design,Solr,Nosql,Faceted Search,我一直在考虑用类似ebay的分类法和依赖于特定产品类别的属性对典型的电子商务网站进行建模 第一次尝试是在EAV和表每类db继承建模之间进行选择。我之所以选择后者是因为性能,但这意味着为每个特定(类别树中的叶子)产品类别创建专用表,并将特定类别属性(如电视分辨率)建模为单独的列 如果需要向现有类别添加属性或添加新类别,则此设置不灵活。对于每项此类变更,需要以下内容: 更改/创建表 用于按特定属性筛选此类类别的新表单 用于生成用于搜索和筛选的db查询的新代码 一些新的viewmodels/DTO和
- 更改/创建表
- 用于按特定属性筛选此类类别的新表单
- 用于生成用于搜索和筛选的db查询的新代码
- 一些新的viewmodels/DTO和视图,用于展示新类别的产品
这里有很多问题,但我不想把它分解成更小的问题,因为我对处理更大类别的此类问题时的通用设计方法感兴趣。我并不声称对所有这些问题都有明确的答案(这是一个相当开放的问题,你应该试着把它分成更小的部分,这取决于你的实际需求,事实上,我很想投票来结束它)但我会评论几件事:
如果不同类型的产品有不同类型的类别会怎样 以eBay为例,我们的产品可以是书籍或电视/显示器 书籍有书名和ISBN,可能属于科幻类、情色类、非小说类或自传体类,也可能属于非小说类、自传体性类 显示器具有屏幕分辨率和功耗(?),可以是平板显示器、CRT显示器或HD显示器 从纯关系的角度来看,您可以这样建模:
[Product]-(1)------(1)-[ Book ]-(n)------(m)-[ book_category ]
| id | | title | | name |
| price | | ISBN |
| ... |
| ... |-(1)---(1)-[ display ]-(n)------(m)-[ display_category ]
| resolution | | name |
| watts |
您可以根据产品的类型/类别拥有不同的属性和类别,而不是根据特定产品类别对属性进行建模
参见Ad 1:分面搜索/导航本身不是我的优先事项,我可能会使用常规的“高级搜索”形式,并使用不同的输入数据类型(字符串、价格、范围等)Ad 2:什么是数据,什么是模式取决于一种观点。在EAV中,一切都是数据,如果我选择使用“分辨率”作为列,它将成为模式。如果我想向TVs类别添加新的属性类型(例如USB端口数)它也可以被描述为模式改变。ad 4。有趣的是,你知道这方面的例子吗?1。如果你想有层次分类,那么不,不会