2

我举一个数据的例子。(纯粹为了演示,我对汽车了解不多)

顶级类别,

Car, Computer, Shoes, ..

汽车有很多方面。(子类别)

Car - 2 door/4 door  
Car - Audi/Bmw/..

子类别可以有另一个子类别。

Audi - A series/S series/R series  

现在,产品可以有多个父级。

Audi A4 -child of- A series - Audi - Car 
Audi A4 -child of- 4 door  - Car (one shorter depth)

我将如何在数据库中对此建模?

我已经查看了一些仅用于搜索功能的 RDBMS 方法,而且维护起来看起来很糟糕。
我在看 django-haystack,solr 方法。
但我仍然需要在 django 的 models.py 中对此进行建模。

我将如何做到这一点并为干草堆建立搜索索引?

我是整个 django/haystack/solr 的新手。
我查看了 solr 的示例文档。
看起来每个项目都包含所有必要的数据。(我猜人们称之为扁平数据?)

我可以以某种方式将元数据(类别树)与数据库中的数据(实际产品项)分开吗?
我只是觉得这是正确的方法,我错了吗?

  • 编辑

我忘了提到我想使用 solr 的分面搜索功能。
因此,在 DB 中对其进行建模后,我的 search_indexes.py 看起来会如何?

4

1 回答 1

0

这是两个不同的东西。

一个是您想为一个项目存储多个属性。为此,如果您想使用关系数据库,请使用实体属性值模式eav-django为 django提供了这个实现。

然而,一种更灵活(且不那么繁琐)的方法是使用文档数据库(如沙发)或其他 NoSQL 解决方案。这些提供了一个灵活的模式,因此您不必担心必须存储多少关于特定对象/项目的“属性”或“元数据”。

您问题的另一部分是维护具有n深度的关系树。这是使用嵌套集模型(也称为修改的前序树遍历)实现的。像 eav 一样,有django-mptt

于 2012-04-16T06:40:43.843 回答