标签: entity-attribute-value

是否有针对PHP/MySQL的实体属性值(EAV)框架?

是否有针对PHP/MySQL的实体属性值框架?我开始写自己的,但我觉得它已经完成了.有什么建议?

php entity-attribute-value data-structures

22
推荐指数
1
解决办法
7365
查看次数

表模块与域模型

前几天我询问选择一种存储用户配置文件方法,并收到David Thomas Garcia的一个有趣的回复,建议我使用Table Module设计模式.看起来这可能是我想要的方向.我在Google上发现的所有内容似乎都是相当高级别的讨论,所以如果有人能指出我的某些例子,或者让我更好地了解所涉及的基本要素,那将是非常棒的.

database database-design design-patterns entity-attribute-value

22
推荐指数
1
解决办法
1万
查看次数

MySQL在JOIN语法中将子查询相关联

我想通过指定innertable.id = outertable.id为内部查询提供WHERE条件.但是,MySQL(5.0.45)在'where子句'中报告"未知列'outertable.id'".这种查询是否可行?

内部查询使用GROUP BY将行旋转到列.这可以完全在外部查询中执行,但由于额外的连接可能会产生额外的开销.

或者,我可以在内部查询中省略WHERE条件,而是指定一个ON outertable.id = innerquery.id,但它会获取整个内部查询行集再次连接外部,这是低效的.

实际的SQL如下所示:

select t.ticketid, u.userid, t.fullname, u.loginapi_userid, t.email, tp.subject, tp.contents, a.PhoneNumber, a.Location, a.Extension, a.BusinessUnit, a.Department
from swtickets t
inner join swticketposts tp on t.ticketid = tp.ticketid
inner join swusers u on t.userid = u.userid
left join
  (
  select
  cfv.typeid,
  min(case cfv.customfieldid when 1 then cfv.fieldvalue end) as 'PhoneNumber',
  min(case cfv.customfieldid when 3 then cfv.fieldvalue end) as 'Location',
  min(case cfv.customfieldid when 5 then cfv.fieldvalue end) as 'Extension',
  min(case cfv.customfieldid when 8 then cfv.fieldvalue …
Run Code Online (Sandbox Code Playgroud)

mysql sql join subquery entity-attribute-value

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

是EAV - Hybrid是一个糟糕的数据库设计选择

我们必须重新设计从MySQL到PostgreSQL的传统POI数据库.目前,所有实体都有80-120个属性,代表各个属性.

我们被要求考虑新数据库的灵活性和良好的设计方法.但是新设计应该允许:

  • ñ没有.任何实体的属性/属性,即任何实体的属性都没有固定,可能会定期更改.

  • 允许内容管理员,以新的属性添加到现有实体上飞使用通过管理界面,而不是使在DB模式的改变所有的时间.

有关EAV性能问题的讨论很多,但如果我们不采用混合EAV,我们最终会:

  • 有很多空列(即使99%的数据没有这些属性,我们仍然会添加新列)
  • 花更多时间维护数据库esp.当属性不断变化时.
  • 无法允许内容管理员向现有实体添加新属性

无论如何,我们正在考虑新设计(包括基本ERD):

  • 为每个实体提供单独的表,其中包含一些独有的基本信息,例如id,name,address,contact,created等.

  • 有2个表属性类型和属性来存储属性信息.

  • 使用多对多关系将每个实体链接到属性.

  • 将地址存储在不同的表中,并使用外键链接到实体.

替代文字

我们认为这将使我们在添加,删除或更新属性时更加灵活.

然而,这种设计将在获取数据时导致连接数量增加,例如,为了显示给定体育场的所有"属性",我们可能具有20个以上连接的查询以获取单行中的所有相关属性.

您对此设计有何看法,以及您对改进设计的建议.

谢谢你的阅读.

database postgresql database-design entity-attribute-value

17
推荐指数
3
解决办法
6116
查看次数

您将如何设计数据库以允许用户定义的架构

如果你必须创建一个类似的应用程序 - 比如一个博客应用程序,那么创建数据库模式就相对简单了.你必须创建一些表,tblPosts,tblAttachments,tblCommets,tblBlaBla ......就是这样(好吧,我知道,这有点简化,但你理解我的意思).

如果你有,你要允许用户定义模式的部分应用程序在运行时.假设您要构建一个用户可以记录任何类型数据的应用程序.一个用户想要记录他的工作时间(startTime,endTime,项目ID,描述),下一个想要收集烹饪食谱,其他人可能是股票报价,他们的婴儿每周体重,他们花在食物上的每月费用,他们的结果最喜欢的足球队或你能想到的任何东西.

您如何设计数据库来保存所有非常不同类型的数据?您是否会创建一个可以包含所有类型数据的通用模式,是否可以创建反映用户数据模式的新表,或者您是否有另外一个好主意可以做到这一点?

如果它很重要:我必须使用SQL Server/Entity Framework

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

16
推荐指数
4
解决办法
6085
查看次数

如何设计数据库模式以支持使用类别标记?

我正在尝试像Database Design for Tagging这样的东西,除了我的每个标签都按类别分组.

例如,假设我有一个关于车辆的数据库.假设我们实际上并不太了解车辆,因此我们无法指定所有车辆将具有的列.因此,我们将用信息"标记"车辆.

1. manufacture: Mercedes
   model: SLK32 AMG
   convertible: hardtop

2. manufacture: Ford
   model: GT90
   production phase: prototype

3. manufacture: Mazda
   model: MX-5
   convertible: softtop
Run Code Online (Sandbox Code Playgroud)

现在您可以看到所有汽车都标有其制造和型号,但其他类别并不完全匹配.请注意,汽车只能拥有每个类别中的一个.IE浏览器.一辆汽车只能有一个制造商.

我想设计一个数据库来支持搜索所有梅赛德斯,或者能够列出所有制造商.

我目前的设计是这样的:

vehicles
  int vid
  String vin

vehicleTags
  int vid
  int tid

tags
  int tid
  String tag
  int cid

categories
  int cid
  String category
Run Code Online (Sandbox Code Playgroud)

我有所有正确的主键和外键,除了我无法处理每辆车只能有一个制造商的情况.或者我可以吗?

我可以在vehicleTags中为复合主键添加外键约束吗?IE浏览器.我是否可以添加一个约束,使得复合主键(vid,tid)只能在vehicleTags中没有行时才添加到vehicleTags,这样对于同一个vid,还没有一个tid在同样的cid?

我的猜测是否定的.我认为这个问题的解决方案是向vehicleTags添加一个cid列,并创建新的复合主键(vid,cid).它看起来像:

vehicleTags
  int vid
  int cid
  int tid
Run Code Online (Sandbox Code Playgroud)

这可以防止汽车有两个制造商,但现在我已经复制了tid在cid中的信息.

我的架构应该是什么?

在我之前的问题中,Tom在我的数据库模式中发现了这个问题,你如何做多对多表外连接?

编辑
我知道在示例制造中应该真的是车辆表中的一列,但是假设你不能这样做.这个例子只是一个例子.

sql tags schema foreign-keys entity-attribute-value

15
推荐指数
1
解决办法
1万
查看次数

使用NHibernate和EAV数据模型

我正在尝试利用NH来映射到数据模型,这是对EAV/CR数据模型的宽松解释.

我有大部分工作,但我正在努力映射Entity.Attributes集合.

以下是有问题的表格:

--------------------
| Entities         |
--------------------
| EntityId  PK     |-|
| EntityType       | |
-------------------- |
         -------------
         |
         V
--------------------
| EntityAttributes |    ------------------    ---------------------------
--------------------    | Attributes     |    | StringAttributes        |
| EntityId  PK,FK  |    ------------------    ---------------------------
| AttributeId  FK  | -> | AttributeId PK | -> | StringAttributeId PK,FK |
| AttributeValue   |    | AttributeType  |    | AttributeName           |
--------------------    ------------------    ---------------------------
Run Code Online (Sandbox Code Playgroud)

AttributeValue列实现为sql_variant列,我为它实现了NHibernate.UserTypes.IUserType.

我可以创建一个EntityAttribute实体并直接保存它,以便部分层次结构正常工作.

我只是不确定如何将EntityAttributes集合映射到Entity实体.

请注意,EntityAttributes表可以(并且确实)包含给定EntityId/AttributeId组合的多个行:

EntityId AttributeId AttributeValue
-------- ----------- --------------
1        1           Blue
1 …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping entity-attribute-value

15
推荐指数
1
解决办法
1496
查看次数

如何在Magento中重命名属性代码?

我想将现有属性的代码重命名为其他内容.原因是因为300个产品填写了属性字段,我不想因为我更改了属性的代码而不得不重新导入所有这些产品.

attributes magento entity-attribute-value magento-1.4

15
推荐指数
2
解决办法
2万
查看次数

了解EAV数据库模型的最佳初学者资源?

我正在与Magento做一些定制工作,Magento有一个基于EAV模型的数据库设计,我需要一些很好的资源/教程来解释EAV数据库模型.请不要将维基百科作为资源提供......我正在寻找能够以初学者友好的方式教授EAV的东西.

database database-design magento entity-attribute-value

14
推荐指数
3
解决办法
2万
查看次数

以关系表的形式检索MySQL EAV结果的最佳性能是什么

我想提取从EAV(实体属性值)的表,或更具体实体的元数据表的结果(认为像WordPress wp_postswp_postmeta),为"很好的格式化的关系表",以做一些排序和/或过滤.

我已经找到了一些如何在查询中格式化结果的示例(而不是编写2个查询并在代码中加入结果),但我想知道"最有效"的方法,特别是对于更大的结果集.

当我说"效率最高"时,我的意思是出现以下情况:

获取姓氏为XYZ的所有实体

返回按生日排序的实体列表


转过来:

** ENTITY **
-----------------------
ID  | NAME | whatever
-----------------------
 1  | bob  | etc
 2  | jane | etc
 3  | tom  | etc

** META **
------------------------------------
ID | EntityID | KEY         | VALUE
------------------------------------
 1 |   1      | first name  | Bob
 2 |   1      | last name   | Bobson
 3 |   1      | birthday    | 1983-10-10
 . |   2      | first name  | Jane …

mysql performance database-design pivot entity-attribute-value

14
推荐指数
1
解决办法
5142
查看次数