Mysql 如何对此数据库建模以处理此查询

Mysql 如何对此数据库建模以处理此查询,mysql,database,database-design,normalization,Mysql,Database,Database Design,Normalization,有一个提供以下格式数据的源,我必须基于此格式设计表。我应该保留它们现有的结构还是将它们分成几个表 第一个表: ItemId PropertyId Value A1 10 Black A1 20 16gb A1 30 Iphone6 A1 1000 Apple 属性参考表: PropetyID Value

有一个提供以下格式数据的源,我必须基于此格式设计表。我应该保留它们现有的结构还是将它们分成几个表

第一个表:

ItemId     PropertyId      Value

A1           10            Black
A1           20            16gb
A1           30            Iphone6
A1           1000          Apple
属性参考表:

PropetyID     Value

10            Color
20            Memory Size
30            Item Name
100           Product Group
可以有2000多个不同的属性。最后设计的桌子应能回答以下问题:

How many white iPhones of 16gb were sold?

这个设计看起来不错,因为它没有打破任何明显的规范化规则。此外,这是为了编写您要查找的查询而设计的

因为我怀疑这是一个家庭作业问题,所以我不会为您编写整个查询,但我会给您一个粗略的指导,您必须将其转换为SQL。要查找16 gb白色iPhone:

  • 选择ItemId,其中值10等于白色,值20等于16gb,值30等于iPhone
  • 由于这些条件不能在每一行上都为true,因此需要查询与这些条件之一匹配的行(提示:
    运算符)
  • 也就是说,您将需要找出哪些itemid匹配这三个条件(提示:
    HAVING
    子句)
粗略的骨架:

SELECT items
FROM myTable
WHERE itemIsWhite OR itemIs16gp OR itemIsIphone
GROUP BY item
HAVING threeRowsReturned

如果你在任何问题上遇到困难,请随意提问,但我强烈建议你自己尝试一下,因为我已经给了你很多开始的机会。

这看起来像是一个家庭作业问题。StackOverflow社区不应该做你的家庭作业。通常,将此标记为家庭作业,或者提供你所做的一些尝试。使用EAV模型可能会很痛苦,但它有它的位置。我认为基本规则是根据数据类型将数据分离出来,因此日期保存在日期数据类型中,整数保存在整数中,等等。这可以通过根据数据类型将数据分成不同的表来实现。这是一个与数据建模相关的亚马逊采访问题……我很想知道这个问题的答案……答案是表中的雪花剥落……我只需要知道我们是如何做到的,因为我没有花时间做数据建模modeller@HussainAliMirza这很难说100%,但如果这些都是列,我觉得很好。如果您为每个产品制作一行,在一个表中包含列
product、color、size、name、group
,可能会更容易。真的,我想这完全取决于上下文。事实上,我告诉过他们,如果我们可以为一个属性指定一列……但是他们说他们有2000个属性……如果将一个属性单独列在一行中,将很难回答这样的问题:“我卖了多少台16gb黑色Wifi苹果Ipad Mini”……一个产品将有5个属性