标签: entity-attribute-value

如何为实体的自定义属性建模?

假设我们有一个应该能够存储所有类型产品的应用程序.每个产品至少具有一个ID和一个Name但是所有其他属性可以由用户自己定义.

  1. 例如,他可以创建一个包含属性容量生成的产品组Ipods
  2. 例如,他可以创建一个具有属性大小颜色的产品组TShirts
  3. 我们需要存储产品的定义和具体的产品本身.
  4. 我们希望确保可以通过产品属性轻松聚合(GROUP BY).例如,选择每代ipod的容量总和
  5. 该解决方案不得要求架构更改(由于Bill Karwin的输入而增加了要求 - 请参阅他的答案!)

您如何根据上述要求对模式进行建模?

注意:要求4.很重要!

感谢大家的贡献和讨论方法.我在过去看到过这个问题的一些解决方案,但没有一个能让我轻松分组:(

sql sql-server schema database-design entity-attribute-value

5
推荐指数
2
解决办法
6866
查看次数

SQL Server,其中field是int?

我怎样才能完成:

select * from table where column_value is int
Run Code Online (Sandbox Code Playgroud)

我知道我可能内部加入系统表和类型表但我想知道是否有更优雅的方式.

请注意,column_value是一个"可能"具有int的varchar,但不一定.

也许我可以抛出它并捕获错误?但同样,这似乎是一个黑客.

sql t-sql sql-server-2005 entity-attribute-value

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

EAV与RDF相比如何?

RDF中的一个超集实体属性值模型?

我正在研究EAV框架,似乎许多RDF框架可用于提供EAV框架。

例如,使用RDF存储和诸如LinqToRDF之类的东西,我是否可以使用现成的.NET EAV Framework?

rdf entity-attribute-value

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

在Magento安装脚本中创建属性集

创建属性并将它们分配给现有属性集是一个已解决的问题,但我们遇到了一个问题,即尝试创建属性集并使用默认属性填充它,并且特定属性失败.这是使用中的代码:

$setup->addAttributeSet('catalog_product', 'women_sizing_denim');

$oAttributeSetModel = Mage::getModel("eav/entity_attribute_set")
        ->load($setup->getAttributeSetId('catalog_product', 'women_sizing_denim'))
        ->initFromSkeleton($setup->getAttributeSetId('catalog_product', 'default'))
        ->save();
Run Code Online (Sandbox Code Playgroud)

我可以通过调试验证该initfromSkeleton方法是否按照公布的方式从默认的attribute_set加载属性,但是在之后save(),新的集合为空.

可以在集合中添加新属性,因此它确实存在并且正确创建,但缺少的默认属性使其无法使用,因为SKU,价格,名称等都是必需的.

php attributes magento entity-attribute-value

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

Magento Enterprise是否仍使用url_path产品属性?

我正在比较Magento社区版和企业版。在“社区”下创建新产品时,产品属性url_pathattribute_id= 98)的值将正确保存在表中catalog_product_entity_varchar

但是,当在“企业”下创建同一产品时,该属性值似乎没有被保存。我catalog_product_entity_varcharurl_path属性表中没有看到任何值。

社区和企业如何对待url_path属性之间有什么区别?企业版是否真的在url_path某个地方利用了价值?

magento entity-attribute-value magento-1.9

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

使用多个条件过滤 EAV 表

我有 2 张桌子:

桌子objects

object_id | object_group_id
Run Code Online (Sandbox Code Playgroud)

桌子attributes

attr_id | attr_object_id | attr_property_id | attr_value
Run Code Online (Sandbox Code Playgroud)

现在,我想获取所有object_id位置object_group_id = 1并过滤两个属性:

(attr_property_id = 1 AND attr_value <= '100000')
   AND 
(attr_property_id = 2 AND attr_value > '2000')
Run Code Online (Sandbox Code Playgroud)

我试图构建一些查询,如下所示:

SELECT * FROM objects as o

/* filter1 join */
INNER JOIN 
    attributes AS f1 
        ON 
    o.object_id = f1.attr_object_id 
        AND 
    f1.attr_property_id = 1

/* filter2 join */
INNER JOIN 
    attributes AS f2 
        ON 
    f1.attr_object_id = f2.attr_object_id 
        AND 
    f2.attr_property_id …
Run Code Online (Sandbox Code Playgroud)

mysql sql entity-attribute-value

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

如何在Django中实现EAV

我需要实现一个相当标准的实体-属性-值层次结构。有多种类型的设备,每种类型都有一堆可以设置的设置,每个单独的设备都有针对每个设置的一组特定值。看来django-eav和eav-django软件包都不再维护了,所以我想我需要自己动手。但是,我该如何设计呢?到目前为止,我在想这样的事情(跳过很多细节)

DeviceType(Model)类:
    名称= CharField()

类Device(Model):
    名称= CharField()
    类型= ForeignKey(DeviceType)

类设置(模型):
    名称= CharField()
    类型= CharField(choices =((('Number','int'),('String','str'),('Boolean','bool')))
    device_type = ForeignKey(设备类型)

类Value(Model):
    设备= ForeignKey(设备)
    设置= ForeignKey(设置)
    值= CharField()

    def __setattr __(自身,名称,值):
        如果名称=='值':
            ...根据设置类型进行验证...

    def __getattr __(自己,名字):
        如果名称=='值':
            ...将字符串转换为该类型的正确值...

我想念什么吗?有更好的方法吗?这样行吗?

python django entity-attribute-value

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

Magento:为什么使用 EAV 而不是 MongoDB?

我正在学习 magento,我刚刚阅读了有关 EAV 的内容。如果我理解正确的话,它就像在 SQL 数据库上模拟 noSQL 数据库。因此,例如,像铅笔这样的产品在其描述中可以具有与计算机或球不同的属性。

但是我在一本书中读到了这个系统,比如:

所有这些灵活性和权力都不是免费的,需要付出代价;实施 EAV 模型会导致我们的实体数据分布在大量表上,例如,只有产品模型分布在大约 40 个不同的表上。

[...]

EAV 的另一个主要缺点是在检索大型 EAV 对象集合时会损失性能并增加数据库查询的复杂性。由于数据更加碎片化(存储在更多表中),选择单个记录涉及多个连接。

我是全新的,所以也许我失去了一些东西,但我的问题是:

为什么使用这种复杂的方式而不是使用基于文档的数据库作为 mongoDB?

magento mongodb entity-attribute-value

5
推荐指数
0
解决办法
2040
查看次数

具有动态列名称和多个输入列的 PostgreSQL 交叉表

问题

我有一个 PostgreSQL 9.6 数据库,其中有一个根据 EAV 模型设计的表,其中包含不同类型的值。示例摘录如下所示:

 name |arrivalTime | boolValue | intValue | floatValue | stringValue
------+------------+-----------+----------+------------+------------
 a1   |  10:00:00  |   true    |          |            |
 c3   |  10:00:00  |           |   12     |            |
 d4   |  10:00:00  |           |          |            | hello
 e5   |  15:00:00  |           |          |    45.67   |
 c3   |  15:00:00  |           |   45     |            |
 b2   |  20:00:00  |           |          |    4.567   |
 a1   |  20:00:00  |   false   |          |            |
 d4   |  22:00:00  |           |          | …
Run Code Online (Sandbox Code Playgroud)

postgresql crosstab entity-attribute-value

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

寻找基于jsonb的正确的EAV结构

我想知道在jsonb上构建EAV的正确方法是什么。我有Attribute-> Values表格,就像在标准EAV中一样。

CREATE TABLE attribute_values
(
  id           INTEGER,
  attribute_id INTEGER,
  value        VARCHAR(255)
);

CREATE TABLE attributes
(
  id   INTEGER,
  name VARCHAR(255)
);
Run Code Online (Sandbox Code Playgroud)

值将保存在attributes提起Entity

 CREATE TABLE entity
    (
      id   INTEGER,
      title TEXT,
      attributes JSONB
    );
Run Code Online (Sandbox Code Playgroud)

Attribute创建用于控制重复属性的表的类型,并更好地确定它是什么属性。例如,避免:{weight: 100}{Weight: 100}{weigh: 100}Values适用于使用唯一值并包含可用值列表,例如颜色(绿色,红色,白色等)。可以预加载值并将其用于常用搜索。

我看到几个选择:

1.存储格式如

[{"attribute_id":1, "value":5},{"attribute_id":1, value:"text"}] 
Run Code Online (Sandbox Code Playgroud)

这里value_id将是custom value像文字或idValues表。但我不明白如何建立索引的格式,例如,如果Attribute 10integer

2.仅保留Attribute表(用于控制attribute name)并存储数据,例如:

{"price": …
Run Code Online (Sandbox Code Playgroud)

postgresql entity-attribute-value jsonb

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