产品属性的数据库架构

2024-01-06

我想在类别中实现产品过滤,并且对正确的数据库架构有疑问。 现在我有下表:

类别:

1. id
2. category
3. description

Products:

1. id
2. category_id
3. product
4. image
5. price

属性:

1. id
2. attribute

类别_属性:

1. category_id
2. attribute_id

我的问题是我应该创建哪些表以及哪些列必须存储不同类型的值、属性值、产品属性值等。

多创建3张表是否正常:

Values:

1. id
2. value

属性_值:

1. attribute_id
2. value_id

产品_属性_值:

1. product_id
2. attribute_id
3. value_id

我把最后几张桌子搞砸了。什么会更好地存储和过滤?


你想要实现的是实体-属性-值(EAV)或可能是行建模解决方案。请注意,由于各种很好的理由,这种类型的结构在很大程度上不受欢迎。

然而,我已经争论过(例如here https://stackoverflow.com/questions/17231834/if-eav-is-evil-what-to-use-for-dynamic-values/17233204#17233204, here https://stackoverflow.com/questions/10010992/database-design-for-ecommerce-project-should-i-use-eav-approach/10027905#10027905, here https://stackoverflow.com/questions/11779252/entity-attribute-value-table-design/11972029#11972029, and here https://dba.stackexchange.com/questions/15199/inventory-database-structure-when-inventory-items-have-varying-attributes/15211#15211)EAV 是邪恶的,除非它不是。这些罕见的例外之一是在产品目录的情况下,您正在跟踪产品的属性,而这些属性并不是那么有趣(到您的系统!)除非您需要检索这些内容并将其打印在产品网页或比较网格等上。

考虑这样的设计:

您在这样的模型中所做的就是描述给定类别中的产品应该具有哪些属性、这些属性可能具有哪些值,以及每个特定产品的每个属性具有哪些值。

这种设计确实具有 EAV 所施加的所有常见限制。然而,如果你想问这样的问题:“哪颗珠子的直径是8毫米?”这非常简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

产品属性的数据库架构 的相关文章

  • SQL:比较不同表中的两个计数

    我有 3 张桌子 一张桌子上有世界上每个国家及其代币 NAME CODE Afghanistan AFG Albania AL Algeria DZ American Samoa AMSA Andorra AND Angola ANG An
  • 不唯一的表/别名

    因此 我尝试使用多个联接来运行此查询 以获得我想要的精确行 但我不断收到此错误 不唯一的表 别名 ss prices 我正在运行的查询 select ss accounts id ss accounts bot acc id ss acco
  • ASP.NET API:尚未为此 DbContext 配置数据库提供程序

    我正在尝试从我的 Net Core API 项目连接到 MySql 数据库 这是我的上下文类 public class MyContext DbContext public MyContext public MyContext DbCont
  • 如何在 Windows 上安装 PHP 的 PDO 驱动程序?

    我在 Windows 服务器上安装了 Apache PHP 5 6 和 MySQL 5 7 在 php ini 中 我启用了以下内容 extension php mysql dll extension php mysqli dll exte
  • PDO::commit 之后使用 PDOStatement::rowCount 结果?

    在 MySQL 文档中 有一个关于使用的注释mysql affected rows事务提交后 http php net manual en function mysql affected rows php http php net manu
  • PHP 中的异步数据库/服务调用:Gearman 与 pthreads

    在我们的 LAMP 站点上 我们遇到一些服务必须多次调用数据库才能提取数据的问题 通常在 PHP 中完成此操作的方式 至少我的经验 是串行的 这显然是低效的 我们可以通过使用缓存和聚合一些查询来缓解一些低效率的问题 但在某些情况下我们仍然需
  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • 执行许多插入重复键更新错误:未使用所有参数

    所以我一直在尝试使用 python 2 7 15 使用 mysql connector 执行此查询 但由于某种原因 它似乎不起作用并且总是返回错误 并非所有参数都被使用 表更新有一个主键 即 ID 这是我尝试运行此 SQL 的查询 sql
  • 在mysql中搜索“SanF”时获取旧金山的记录

    当我搜索 SanF 时获得 San Francisco 记录 SELECT FROM table WHERE col LIKE san Works SELECT FROM table WHERE col LIKE san F Works S
  • MySQL 触发器和 SUM()

    我有两张桌子 学生桌和家庭桌 在学生中 我有列 st venue 和total venue 家里我有收入 Total Revenue 是学生 st 收入与家庭收入之和 其中 family id student student id stud
  • Spark SQL/Hive 查询通过 Join 永远持续下去

    所以我正在做一些应该很简单的事情 但显然它不在 Spark SQL 中 如果我在 MySQL 中运行以下查询 查询将在不到一秒的时间内完成 SELECT ua address id FROM user u inner join user a
  • 更改Docker容器中的mysql密码

    我如何更改 docker 容器中的 root 密码 因为一旦我停止 mysql 服务 容器就会自动停止 我应该停止 mysql 容器并部署一个新容器吗 您可以使用正在运行的容器更改它docker exec session https doc
  • php 崩溃后 mysql 表被锁定

    我有一个 MySQL DB 和一个 innoDB 表 我有一个 php 页面 用于连接 锁定表 进行一些更新 然后解锁表 PHP 页面通过 wamp 与 apache 一起提供 php页面将文件上传到数据库 我决定通过上传一个大小大于分配给
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • 使用MySQL计算单个表中借方和贷方的余额

    下面的 MySQL 表包含带有关联金额的借方或贷方 操作 如何选择具有非零 余额 的所有 CLIENT ID 我尝试将表连接到自身以计算所有借方和贷方总额 但有些东西无法正常工作 CLIENT ID ACTION TYPE ACTION A
  • Laravel Sum 列数据库 Eloquent

    尝试获取我的一个表中 int 字段的总和应该非常容易 不幸的是 事实并非如此 因为无论我使用 Laravel MySQL 还是 Excel 我都会得到不同的结果 Laravel 5 4 给了我20506 Table sum field na
  • Laravel Group By 和 Order By 不起作用

    我尝试制作一个Laravel 5 8项目 项目中的数据是这样的 id purch name prcvalue 1 10234 Nabila 100 2 10234 Nadeera 450 3 10234 Nabila 540 4 10234
  • 非规范化如何提高数据库性能?

    我听说过很多关于非规范化的内容 它是为了提高某些应用程序的性能而进行的 但我从来没有尝试过做任何相关的事情 所以 我只是好奇 规范化数据库中的哪些地方会使性能变差 或者换句话说 非规范化原则是什么 如果我需要提高性能 如何使用此技术 非规范
  • #1045 - 用户“root”@“localhost”的访问被拒绝(使用密码:YES)

    这可能看起来多余 但我无法找到正确的解决方案 我无法使用 mysql 控制台登录 mysql 它要求输入密码 但我不知道我实际输入的内容 有办法获取密码或更改密码吗 这就是我的 config inc 的样子 当我尝试打开 phpmyadmi
  • 哪个是识别关系或非识别关系中的子表?

    在表之间的识别和非识别关系的上下文中 MySQL 文档大量将表称为父表和子表 如何判断哪个表是父表 哪个表是子表 子表 A K A 弱实体 http en wikipedia org wiki Weak entity 是一个表 其主键属性d

随机推荐

  • 在 OCaml 中模拟 try-with-finally

    OCaml s try with不提供finally像Java这样的子句 不过 它会很有用 尤其是在处理副作用时 例如 我喜欢打开一个文件 将打开的文件传递给一个函数 然后关闭它 如果函数引发异常 我必须捕获它才能有机会关闭文件 当打开多个
  • 三.js。应用 EdgesHelper 后更改网格位置

    我尝试在应用 EdgesHelper 后旋转或更改网格的位置 但它不起作用 网格保持在同一位置 没有 EdgesHelper 它工作正常 我究竟做错了什么 var mesh new THREE Mesh geometry material
  • 从元组中获取元素[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 ADL 找不到函数模板 https stackoverflow com questions 2953684 why doesnt adl find function templates Cal
  • 不允许设置设备所有者

    我知道有人提出了问题 但我无法获得设备所有权 我使用的是三星 xcover 4 安卓 7 0 我启动这个命令 C Users xxx AppData Local Android Sdk platform tools gt adb shell
  • 如何为所有 NDB 数据存储条目分配默认值?

    我必须向现有的 NDB 类添加一个新属性 class AppList ndb Model ignore ndb BooleanProperty default False new property 然后我将像下面这样使用它 entries
  • 按住鼠标左键时不会生成 WM_MOUSELEAVE

    在我的 Win32 应用程序中 当我按住鼠标左键并快速将鼠标指针移出窗口时 我没有收到 WM MOUSELEAVE 消息 但是如果我按住鼠标左键 从窗口内部开始并缓慢移动经过窗口边缘 它将生成一个 WM MOUSELEAVE 如果我不按住鼠
  • 从 UUID 版本 1 获取 UNIX 时间戳

    在我们的 Java 应用程序中 我们尝试从 UUID 获取 UNIX 时间版本1 https en wikipedia org wiki Universally unique identifier Version 1 date time a
  • 将 List 传递给 String... 参数

    我正在努力将字符串列表传递到需要参数的方法中 细绳 有人可以帮我吗 How to put names into dummyMethod List
  • Netbeans 新建项目向导不显示 Maven Web 应用程序

    我已经阅读了与此相关的其他问题 所以这不是另一个重复 在 Netbeans 8 0 中使用 新建项目向导 时 我选择Maven但我无法选择Web应用程序 它根本不显示 所以我问谷歌 它告诉我安装JAVA EE And I did但 Mave
  • 在 Google Colab Notebook 中提供 Iframe:本地主机拒绝连接

    我正在尝试使用以下内容从 Google Colab 笔记本提供一些 HTML from IPython display import IFrame IFrame src output index html width 700 height
  • 如何在相关实体中搜索(Hibernate 搜索)

    我没有尝试这个东西 我的要求是按名称搜索记录 以下是我的相关课程 记录文件夹分析 java Indexed public class RecordFolderAnalysis extends AuditableEntity implemen
  • 继承最佳实践:*args、**kwargs 或显式指定参数 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常发现自己覆盖了父类的方法 并且永远无法决定是否应该显式列出给定的参数或仅使用毯子 args kwargs构造 一个版本比另一个版本更好吗
  • XAML / cs - 更新包后成员名称不能与其封闭类型 (CS0542) 相同

    我刚刚更新了应用程序中的软件包 并且收到了许多我不理解的此类新错误 Users alan Downloads Japanese 31 Japanese obj Debug Views Help GettingStarted xaml g c
  • SQL在删除子表行时锁定父表

    TLDR 当尝试通过 子 表上的主键删除包含另一个 父 表的外键的行时 它会在子事务的持续时间内锁定父表 如何使用外键 子删除来防止发生锁定 示例场景 Setup IF SELECT OBJECT ID dbo Child IS NOT N
  • 处理序列化框架的不兼容版本更改

    问题描述 我们有一个 Hadoop 集群 在该集群上存储使用以下命令序列化为字节的数据Kryo http code google com p kryo 序列化框架 我们用来执行此操作的 Kryo 版本是从官方版本 2 21 分叉出来的 以便
  • Kotlin 和 Android 中“没有足够的信息来推断参数 T”

    我正在尝试使用 Kotlin 在我的 Android 应用程序中复制以下 ListView https github com bidrohi KotlinListView https github com bidrohi KotlinLis
  • 准确确定 Python 多处理期间腌制的内容

    正如线程中所解释的当我调用 multiprocessing Process 时正在腌制什么 https stackoverflow com questions 26025878 what is being pickled when i ca
  • 将数据分组为模糊间隙和孤岛

    这本质上是一个间隙和岛屿问题 但它是非典型的 我确实将示例缩减到最低限度 我需要识别超过特定阈值的间隙 并且重复不会成为问题 尽管此示例删除了它们 在任何情况下 使用 ROW NUMBER 的常见解决方案都没有帮助 因为即使是 1 的间隙也
  • 构建应用程序后,Electron index.html 未加载

    我有一个电子应用程序 在与它捆绑之前运行得非常好electron builder 捆绑并打开应用程序后 出现以下错误 Not allowed to load local resource file tmp mount displa4VwuQ
  • 产品属性的数据库架构

    我想在类别中实现产品过滤 并且对正确的数据库架构有疑问 现在我有下表 类别 1 id 2 category 3 description Products 1 id 2 category id 3 product 4 image 5 pric