问题标签 [entity-attribute-value]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
136 浏览

sql-server - 是否有任何建模工具可以帮助可视化 3NF 模型与 EAV 的对比?

想找到低成本的关系建模工具,使我能够将第三范式的逻辑模型映射到基于 EAV 的物理模型。有任何指示吗?

0 投票
4 回答
21210 浏览

relational-database - (数据库设计-产品属性):产品属性数据库设计有什么更好的选择?

我是数据库设计的新手。cms的产品属性数据库设计有什么更好的选择?(也请提出其他选择)。

选项 1:1 表

选项 2:3 张桌子

0 投票
3 回答
1365 浏览

sql-server - DB 设计模式 - 多对多分类/分类标记

我有一个存储职位空缺的现有数据库设计。

“空缺”表在所有客户中都有许多固定字段,例如“职位”、“描述”、“工资范围”。

客户可以自行设置“自定义”字段的 EAV 设计,例如“经理姓名”、“工作时间”。字段名称存储在“ClientText”表中,数据存储在带有 VacancyId、ClientTextId 和 Value 的“VacancyClientText”表中。

最后,有一个多对多的 EAV 设计,用于自定义标记/对空缺进行分类,例如空缺所在的位置/办公室、所需技能列表。这存储为“ClientCategory”表,列出标签的类型、“Locations、Skills”、“ClientCategoryItem”表,列出每个类别的有效值,例如,“London,Paris,New York,Rome”、“C#、 VB、PHP、Python”。最后有一个“VacancyClientCategoryItem”表,其中包含空缺的每个选定项目的 VacancyId 和 ClientCategoryItemId。

客户可以添加的自定义字段或自定义类别的数量没有限制。


我现在正在设计一个与现有系统非常相似的新系统,但是,我有能力限制客户可以拥有的自定义字段的数量,并且它是从头开始构建的,因此我没有要处理的遗留问题。

对于自定义字段,我的解决方案很简单,我在空缺表上有 5 个额外的列,称为 CustomField1-5。这删除了 ​​EAV 设计之一。

我正在努力使用标记/分类设计。如果我将客户限制为 5 个类别/类型的标签。我是否应该创建 5 个表列出可能的值“CustomCategoryItems1-5”,然后再创建 5 个多对多表“VacancyCustomCategoryItem1-5”

这将导致 10 个表执行与现有系统中的三个表相同的存储。

此外,如果(天堂禁止)需求发生变化,我需要 6 个自定义类别而不是 5 个,那么这将导致大量代码更改。


因此,任何人都可以建议任何更适合存储此类数据的数据库设计模式。我很高兴坚持使用 EAV 方法,但是,现有系统遇到了与这种设计相关的所有常见性能问题和复杂查询。

非常感谢任何意见/建议。

使用的 DBMS 系统是 SQL Server 2005,但是,如果任何特定模式需要,2008 是一个选项。

0 投票
2 回答
1292 浏览

sql - 在 sqlite 中模拟变量列名

我想在数据库中存储条目(一组键=> 值对),但键因条目而异。

我想用两个表存储,(1)每个条目的键和(2)每个条目的特定键的值,其中条目在两个表中共享一个公共 id 字段,但我不知道如何拉具有这种配置的 sql 中的 key=>value 对条目。

有没有更好的方法?如果这在 sqlite 中是不可能的,那么在 mysql 中是否可能?谢谢!

0 投票
2 回答
1172 浏览

sql - SQL - 如何选择具有外部(?)条件的所有相关行

我有三张桌子:

每个玩家可以有不同的属性,其中一些没有。现在我需要搜索具有特定属性的球员,例如所有号码为 11 且名字为 John 的球员。此时我也知道这些属性的 id,where我的部分查询可能如下所示:WHERE (attribute.id, attribute.value) in ((5, '11'), (18, 'John'))

我必须让所有符合所有要求属性的玩家。

问题是我不知道整个查询的样子?我尝试了联接、嵌套选择、分组依据,但我无法使其工作。我总是得到太多或没有足够的行。

你能帮我吗?

编辑 感谢 aranid 我找到了解决方案:

所以,关键字having by使用得当:)
有没有办法将上述查询转换为JOIN语句?

0 投票
6 回答
4337 浏览

sql - 另一个表中的 SQL SELECT 条件

我有 2 个相关的表:

我需要从messages使用properties表上的标准中获得。例如:如果我有一个像return unread (read=false) high prio (importance=high) messages它应该返回的标准

我怎么能用 SELECT 子句(MySQL 方言)得到这个?

0 投票
2 回答
890 浏览

mysql - MYSQL查询帮助(EAV表)

我有以下查询来检索对特定问题“”对另一个问题回答“是”的客户。

哪个工作正常。但是,我希望更改查询以检索对特定问题“”对另一个问题回答“否”的客户。

关于如何实现这一目标的任何想法?

PS - 上表的响应是 EAV 格式,即。一行代表一个属性而不是一列。

0 投票
4 回答
1559 浏览

sql - Oracle:当同一查询中更具体的值为空时,如何获取默认值?

这个标题很残酷,但我不知道该怎么说。

我有一个与 user_id 相关联的键值表,该表在整个站点中存储用户首选项。如果用户没有进入并更新他们的任何设置,那么任何时候我要求一个键(比如“FAVORITE_COLOR”它将为空,所以我需要拉出我绑定到默认用户的默认设置,用户 ID = 0。

我正在考虑将 user_id = 0 结果 UNION 到查询的底部,但这只会导致重复。我不确定这是否可能,但我希望能够说些什么:

有什么好方法可以做到这一点?

编辑:感谢您对此的所有帮助。如果您的用例仅获取一个值,这就是这个问题,那么来自 dual 的 NVL 正是您想要的,但如果您计划在同一查询中返回多个对,请查看其他一些答案,因为它们实际上可能对实施更有意义。

我最终采用了 ZeissS 的建议,因为它很简单,仍然是一个查询,适用于多个 k、v 对,并且在执行可能的重复过滤客户端时我没有问题。

0 投票
2 回答
363 浏览

mysql - 在 MySql 中循环,还是替代方案?

我有一个带有 innoDB 表的 MySql 数据库。非常简化,这是两个表的布局方式:

表 A:

  • 控制ID(PK)
  • 控制文本

表 B:

  • 控制选项ID(pk)
  • 控制ID(FK到表A)
  • 控制选项类型
  • 控制选项值

如此多的 controlOptions(table B) 可以引用一个控件(为该控件提供多个选项)。但是对于每个选项,在表 B 中创建了两行:一行带有 controlOptionType = "linkToCreator" 和 controlOptionValue =(创建模板的 ID *)。而另一行类型 = “optionSelected”,值 = “true”(或 false)。

  • = 这是一个相当复杂的设置,但基本上我们不是设置列,而是通过类型是该列的名称来制作动态列。所以我无法使用 FK 链接到模板。

所以现在我需要选择每个控件(将有 2 个 controlOptions 链接到它),其中一个 controlOptionValue 值为真或假(取决于我需要什么),另一个 controlOptionValue 是我指定的文本 ID。

我认为最好的方法是

然后对该结果集进行循环说:

但也许那真的效率低下,无论哪种方式,我都不知道该怎么做。如果我能获得一个我指定 templateID 和 true 或 false 的查询(即不使用存储过程),并且如果它没有找到任何东西,它会给我一个行结果,那就太好了。

顺便说一句,这是为了在我们的应用程序中进行搜索,需要遍历大量行,因此性能至关重要。是的,我知道设置不是最好的......

感谢:D

0 投票
1 回答
92 浏览

c# - 可定制的用户地址实现

我正在为服务提供商开发一个计费系统,我必须实现一个名为 Customizable 首选项模式的东西。主要功能应该是允许管理员定义在各种情况下哪些字段是必需的。例如,如果客户只在网站上注册,他必须输入名字、姓氏和电子邮件地址。如果他订购了可计费的东西,那么他应该输入一些基本地址数据,但如果他想要特定的东西,他应该输入帐单和送货地址。我想让管理员定义每个产品(或类别)地址的哪些字段是强制性的,哪些地址(账单、运输、主要等)是强制性的。如果一种产品/服务需要多个地址,则它们都具有相同的必填字段列表。一件重要的事情是应该允许定义附加字段。选择地址架构的规则将基于产品和/或国家/地区。

我的问题是什么应该是适合这个问题的模型。我想客户对象应该有地址列表。每个地址都应该有它的名称(Billing、Main、Shipping)和对其值的引用。在数据库方面,我的想法是为具有标准属性的地址提供一个表作为列,并为自定义属性(由管理员定义)提供一个 EAV 表。我已经考虑过类表继承,但在这里不合适,因为我没有最终的地址属性集。第二种选择是使用 XML 列来存储自定义属性,但我没有使用过该数据类型,我不确定性能。我知道 EAV 不是标准的关系设计,但在这里看起来不错。但是,就像我说的,我不能 100% 确定这些解决方案中的任何一个,并且想听听一些其他的想法。

提前致谢。