Database 如何在CSV中表示EAV?

Database 如何在CSV中表示EAV?,database,csv,entity-attribute-value,Database,Csv,Entity Attribute Value,假设我有一个支持实体属性值的DB模型。如果我有两个记录,每个记录都有多个EAV条目,例如: 苹果 尺寸:小,大 颜色:绿色,红色 汽车 类型:轿跑车、轿车 燃料:柴油、汽油 我可以轻松为苹果制作CSV: product, size, color apple, small, green apple, small, red apple, large, green apple, large, red 我也可以为汽车做同样的事情 问题是,如果我想让苹果和汽车在同一个CSV中呢?我的CSV标题应

假设我有一个支持实体属性值的DB模型。如果我有两个记录,每个记录都有多个EAV条目,例如:

苹果

  • 尺寸:小,大
  • 颜色:绿色,红色
汽车

  • 类型:轿跑车、轿车
  • 燃料:柴油、汽油
我可以轻松为苹果制作CSV:

product, size, color
apple, small, green
apple, small, red
apple, large, green
apple, large, red
我也可以为汽车做同样的事情

问题是,如果我想让苹果和汽车在同一个CSV中呢?我的CSV标题应如下所示:

product, size, color, type, fuel
product
apple, size:small, color:green
apple, size:small, color:red
apple, size:large, color:green
apple, size:large, color:red
car, type:coupe, fuel:diesel
car, type:coupe, fuel:gas
car, type:sedan, fuel:diesel
car, type:sedan, fuel:gas
不过,这没有道理。苹果没有汽车类型或燃料。而且汽车没有尺寸和颜色(根据我给出的例子)

我是否应该采用这样的方式:

product, size, color, type, fuel
product
apple, size:small, color:green
apple, size:small, color:red
apple, size:large, color:green
apple, size:large, color:red
car, type:coupe, fuel:diesel
car, type:coupe, fuel:gas
car, type:sedan, fuel:diesel
car, type:sedan, fuel:gas
CSV的使用者只需要知道,在第一列之后是表示EAV的名称-值对


什么是好方法?建议?

这是我将要实施的解决方案:

product, name_1, value_1, name_2, value_2
apple, size, small, color, green
apple, size, small, color, red
apple, size, large, color, green
apple, size, large, color, red
car, type, coupe, fuel, diesel
car, type, coupe, fuel, gas
car, type, sedan, fuel, diesel
car, type, sedan, fuel, gas

它可能足够优雅了。CVS的使用者只需要知道名称-值对遵循模式“name_x”和“value_x”。NVP列表在到达第一个空的“name_x”和“value_x”时结束。

组织EAV的标准方法是:

entity,attribute,value
apple,size,small
apple,size,large
apple,color,green
apple,color,red
car,type,coupe
car,type,sedan
car,fuel,gas
car,fuel,diesel
实体是apple或car,每行描述该行上实体的一个属性值

这不是一种组织数据的特别好的方法。它有一些表面上的优势,但最终会导致复杂的查询。然而,报告中提出的替代设计使生活变得更糟



假设这是标准电子商务系统中的价格调整器。我怎么说一个小红苹果是2美元,而一个小绿苹果是1美元


您有两个不同的实体,因此必须有两个不同的实体标识符:

small-red-apple,price,2
small-green-apple,price,1
或者,通常情况下,您会:

entity,attribute,value
1112,name,small-red-apple
1112,type,apple
1112,size,small
1112,color,red
1112,price,2
2223,name,small-green-apple,
2223,type,apple
2223,size,small
2223,color,green
2223,price,1
也就是说,实体1112描述(或是)一个售价2美元的小红苹果,而2223描述(或是)一个售价1美元的小绿苹果


验证EAV数据变得非常困难。如何确保当实体的“类型”为“苹果”时,“大小”为“小”或“大”,颜色为“红”或“绿”(但“汽车”也可以有“黑”、“白”和“蓝”三种颜色)?您必须非常小心地识别EAV表每一行中的“实体”,然后识别适用的属性以及属性的适当值范围。您可以使用一个(单个)EAV表来完成所有这些,但它会变得很混乱。

为什么不使用不同的格式?例如,您可以使用xls并将不同实体的信息放在不同的表中。这是用于API输出。在本机上,它将输出JSON,但我还想提供一个CSV输出选项。如果有一个标准,我想用它。假设这是一个标准电子商务系统中的价格修正。我怎么说一个小红苹果是2美元,而一个小绿苹果是1美元?你有两个不同的实体,所以你必须有两个不同的实体标识符:
小红苹果,price,2
小绿苹果,price,1
。或者,更常见的情况是:
1112,name,小红苹果
1112,type,apple
1112,size,small
1112,color,red
1112,price,2
-对于
2223,name,小绿苹果
,…对不起,我不理解您针对这种价格调整方案的解决方案。你能编辑你的答案吗?这样我就可以在一个格式正确的例子中看到你的新方法了?