可以肯定地说,EAV/CR数据库模型很糟糕.那说,
问题:应该使用什么数据库模型,技术或模式来处理描述可以在运行时更改的电子商务产品的属性的"类"?
在一个好的电子商务数据库中,您将存储选项类别(如电视分辨率,然后为每个电视分辨率,但下一个产品可能不是电视,没有"电视分辨率").如何存储它们,有效搜索,并允许用户使用描述其产品的可变字段设置产品类型?如果搜索引擎发现客户通常根据控制台深度搜索电视,则可以向字段添加控制台深度,然后在运行时为每种电视产品类型添加单个深度.
良好的电子商务应用程序中有一个很好的共同特征,它们显示一组产品,然后"向下钻取"侧面菜单,您可以看到"电视分辨率"作为标题,以及前五个最常见的电视分辨率发现集.您单击一个,它只显示该分辨率的电视,允许您通过选择侧面菜单上的其他类别进一步向下钻取.这些选项是运行时添加的动态产品属性.
进一步讨论:
长话短说,互联网上是否有任何链接或模型描述可以"学术上"修复以下设置? 我感谢Noel Kennedy建议的类别表,但需要的可能还要大于此.我在下面用不同的方式描述它,试图强调其意义.我可能需要进行视点校正来解决问题,或者我可能需要深入了解EAV/CR.
喜欢对EAV/CR模型的积极响应.我的开发人员都说杰弗里·肯普在下面提到了什么:"新实体必须由专业人士建模和设计"(脱离背景,阅读下面的回复).问题是:
客户希望为产品添加属性有两个原因:
属性必须具有重要性,而不仅仅是关键字搜索.如果他们想要比较所有有"奶油糖霜"的蛋糕,他们可以点击蛋糕,点击生日主题,点击生奶油糖霜,然后检查所有有趣的蛋糕,知道他们都有奶油糖霜.这不仅仅是蛋糕,只是一个例子.
sql database design-patterns key-value entity-attribute-value
数据库存储工程项目的不同对象类型:电机,电缆,泵,传感器等.
我们在讨论是否为每种对象类型都有不同的表格?(当我们想要添加一个新的对象类型时,表会很痛苦 - 这会偶尔发生......)
或者,正如我们目前所做的那样,我们应该有一个存储对象类型(ID,名称)的表和另一个存储每个对象类型的可能属性的表,还有另一个存储每个属性类型的每个属性值的表吗?(真正的PITA,但灵活.)
有人做过类似的事吗?需要考虑的要点?实现?
我开始了一个新的应用程序,现在我正在寻找两条路径,不知道哪种方法可以继续.
我正在构建类似电子商务网站的东西.我有一个类别和子类别.
问题是现场有不同类型的产品,每个产品都有不同的属性.并且网站必须可以通过这些产品属性进行过滤.
这是我最初的数据库设计:
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
sql ×3
database ×2
doctrine-odm ×1
doctrine-orm ×1
key-value ×1
mongodb ×1
mongomapper ×1
nosql ×1
schema ×1