mysql - 我如何建模这个数据库来处理这个查询

标签 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?

最佳答案

这个设计对我来说看起来不错,因为它没有违反任何明显的标准化规则。此外,这是为了编写您正在查找的查询而设计的。

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

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

粗略的骨架:

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

如果您遇到任何困难,请随时询问,但我强烈建议您自己尝试一下,因为我已经为您提供了很多入门信息。

关于mysql - 我如何建模这个数据库来处理这个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30575807/

相关文章:

MYSQL - 解析逗号分隔的数字字符串并将每个数字与设置的数字进行比较

mysql - 检查一个表中的单个值,表中的多个值以逗号分隔

php - 使用 PHP 的购物车

java - 从请求体获取params,但不能在mybatis注解连接查询中使用

asp.net-core - 数据库中的本地化实体

mysql - 使用中间表将一张表的值更新为相关表的求和值

java - MongoDB 存储随机数据

mysql - 导入和计数后行数不同

php - 多类别产品市场的数据库设计

database-design - 复合主键还是复合主键?