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

时间:2015-06-01 14:12:56

标签: mysql database database-design normalization

有一个来源以下列格式提供数据,我必须根据这种格式设计表格。我应该保留现有结构还是将它们分成几个表?

第一张表:

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?

1 个答案:

答案 0 :(得分:0)

这个设计看起来不错,因为它不会破坏任何明显的规范化规则。此外,它的设计方式是编写您要查找的查询。

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

  • 选择itemIDs,其中值10等于white,值20等于16gb,值30等于iPhone。
  • 由于这些条件在每一行都不能成立,因此您需要查询与其中一个条件匹配的行(提示:OR运算符)。
  • 话虽如此,您需要找出哪些itemID匹配所有这三个条件(提示:HAVING子句)。

粗糙的骨架:

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

如果你遇到任何问题,我会强烈建议你自己尝试一下,因为我已经给你很多开始了。