相关疑难解决方法(0)

实体属性值数据库与严格关系模型电子商务

可以肯定地说,EAV/CR数据库模型很糟糕.那说,

问题:应该使用什么数据库模型,技术或模式来处理描述可以在运行时更改的电子商务产品的属性的"类"?

在一个好的电子商务数据库中,您将存储选项类别(如电视分辨率,然后为每个电视分辨率,但下一个产品可能不是电视,没有"电视分辨率").如何存储它们,有效搜索,并允许用户使用描述其产品的可变字段设置产品类型?如果搜索引擎发现客户通常根据控制台深度搜索电视,则可以向字段添加控制台深度,然后在运行时为每种电视产品类型添加单个深度.

良好的电子商务应用程序中有一个很好的共同特征,它们显示一组产品,然后"向下钻取"侧面菜单,您可以看到"电视分辨率"作为标题,以及前五个最常见的电视分辨率发现集.您单击一个,它只显示该分辨率的电视,允许您通过选择侧面菜单上的其他类别进一步向下钻取.这些选项是运行时添加的动态产品属性.

进一步讨论:

长话短说,互联网上是否有任何链接或模型描述可以"学术上"修复以下设置? 我感谢Noel Kennedy建议的类别表,但需要的可能还要大于此.我在下面用不同的方式描述它,试图强调其意义.我可能需要进行视点校正来解决问题,或者我可能需要深入了解EAV/CR.

喜欢对EAV/CR模型的积极响应.我的开发人员都说杰弗里·肯普在下面提到了什么:"新实体必须由专业人士建模和设计"(脱离背景,阅读下面的回复).问题是:

  • 实体每周添加和删除属性
    (搜索关键字决定未来属性)
  • 新实体每周到达
    (产品由零件组装)
  • 旧实体每周都会消失
    (存档,不太受欢迎,季节性)

客户希望为产品添加属性有两个原因:

  • 相似产品之间的部门/关键字搜索/比较图表
  • 结账前的消费品配置

属性必须具有重要性,而不仅仅是关键字搜索.如果他们想要比较所有有"奶油糖霜"的蛋糕,他们可以点击蛋糕,点击生日主题,点击生奶油糖霜,然后检查所有有趣的蛋糕,知道他们都有奶油糖霜.这不仅仅是蛋糕,只是一个例子.

sql database design-patterns key-value entity-attribute-value

133
推荐指数
5
解决办法
5万
查看次数

Doctrine ODM和无架构设计

继续我关于EAV的问题,我正在考虑使用MongoDB来存储产品属性.

我将使用MongoDB(或其他文档数据库)存储此应用程序的目录部分 - 类别,产品及其所有相关信息.

我的问题是,当使用ODM时,每个实体都有一个模式,它基本上忽略了使用NoSQL数据库的无模式优势,不是吗?

如果这是正确的,为什么有人会使用ODM?

编辑:我发现了一个相关的问题,我可以使用哈希实现产品属性功能吗?

mongodb nosql mongomapper doctrine-orm doctrine-odm

5
推荐指数
1
解决办法
2531
查看次数

我想在SQL数据库中存储许多对象类型.我应该为每种对象类型使用不同的表吗?

数据库存储工程项目的不同对象类型:电机,电缆,泵,传感器等.

我们在讨论是否为每种对象类型都有不同的表格?(当我们想要添加一个新的对象类型时,表会很痛苦 - 这会偶尔发生......)

或者,正如我们目前所做的那样,我们应该有一个存储对象类型(ID,名称)的表和另一个存储每个对象类型的可能属性的表,还有另一个存储每个属性类型的每个属性值的表吗?(真正的PITA,但灵活.)

有人做过类似的事吗?需要考虑的要点?实现?

sql schema

5
推荐指数
1
解决办法
1211
查看次数

我应该使用EAV数据库设计模型还是很多表

我开始了一个新的应用程序,现在我正在寻找两条路径,不知道哪种方法可以继续.
我正在构建类似电子商务网站的东西.我有一个类别子类别.
问题是现场有不同类型的产品,每个产品都有不同的属性.并且网站必须可以通过这些产品属性进行过滤.
这是我最初的数据库设计:

Products{ProductId, Name, ProductCategoryId}
ProductCategories{ProductCategoryId, Name, ParentId}
CategoryProperties{CategoryPropertyId, ProductCategoryId, Name}
ProductPropertyValues{ProductId, CategoryPropertyId, Value}
Run Code Online (Sandbox Code Playgroud)

经过一些分析,我发现这个设计实际上是EAV模型,我读到人们通常不推荐这种设计.
似乎所有东西都需要动态的SQL查询.

这是一种方式,我现在正在看它.

我看到的另一种方式可能被称为很多工作方式,但如果它更好,我想去那里.制作桌子

Product{ProductId, CategoryId, Name, ManufacturerId}
Run Code Online (Sandbox Code Playgroud)

并在数据库中创建表继承,这意味着使表格像

Cpus{ProductId ....}
HardDisks{ProductId ....}
MotherBoards{ProductId ....}
erc. for each product (1 to 1 relation).
Run Code Online (Sandbox Code Playgroud)

我知道这将是一个非常大的数据库和非常大的应用程序域,但它比EAV设计的选项更好,更容易,性能更好.

sql database database-design relational-database entity-attribute-value

4
推荐指数
1
解决办法
3843
查看次数