1

首先,如果标题含糊不清,我想道歉,这个问题很难概括 - 请随时进行适当的编辑。

在我正在构建的网站中,我的类别中的产品(并且类别正在不断扩展)具有属性(我想不出更好的词,我很抱歉这与数据库术语交叉,但我的意思是属性,如颜色、大小、重量,而不是数据库表的字段)。这些属性可能会或可能不会根据类别定义,有时具体取决于产品。

现在,使用该网站的个人将希望创建一个查询来搜索与特定属性匹配的项目(认为“是绿色的,重量小于 4 磅,评级为 3 星或更高”),并将该查询作为元组保存在数据库中他们可以参考的表格。请注意,这些将是最终用户,因此他们将无法自己实际编写查询。另请注意,某些类型的查询可能存在大量冗余,并且这些查询的数量将比项目数量多得多。


我的第一个想法:

将所有项目存储在一个表 ( items) 中,并带有id, category id, nameattribute_typesid, name,存储属性类型type(可以是 int、string、enum 等)。item_id使用、attribute_type_id和将属性存储在单独的表中value

然后,根据 HTML 选择创建查询,就好像我实际上是在查询数据库一样,保存确切的查询,并将其作为字符串存储在带有idand的表中query。在存储之前检查查询是否存在。


这似乎可行,但我无法想象这是最好的方法。有没有更有效,或者坦率地说不那么丑陋的解决方案?我什至是否以适当的方式存储这些物品?

谢谢你,詹姆斯

4

1 回答 1

1

如果特定属性和类别的数量足够少,这通常可以使用具体表继承(或它的其他 派生)来解决,如果不是,您需要一个实体-属性-值模型——这很难用和进行复杂的查询,从长远来看,可以很快导致GIGO 。

Magento 数据库架构

另一种替代方法是使用无模式数据存储,例如 MongoDB或序列化 blob。

于 2012-06-21T00:23:11.963 回答