mysql - 我的查询模式的模型数据和索引?

标签 mysql sql data-modeling

我应该如何在 MySql 中对这些数据建模?

我有这样的数据:

有很多 ITEMS,其中一些共享一个 ITEMGROUP。每个 ITEM 都有一个 0-10 或 20 个事件的列表。每个 ITEM 可以处于 INPROGRESS 状态或 COMPLETED 状态。

我想通过两种方式查询这些数据:

  1. ITEMGROUP 中的所有 ITEMS。按需查询。
  2. 一个具有唯一标识符的 ITEM,以及所有事件 与之相关。按需查询。
  3. 所有项目都在进行中。至少每小时一次。

每月输入 2,000,000 件商品。因此,一年后数据库将拥有 24,000,000 个 ITEMS。

为这些数据和这些查询模式建模我的数据和索引的最佳方法是什么?对于这些数据和这些查询,我应该注意哪些问题?

最佳答案

我不确定我是否理解你。但它是关系数据库的简单模式。是这样的吗?

Table: Item (Id, ...)
Table: ItemGroup (Id, FK_Item, ...)
Table: ItemEvent (Id, FK_Item, ...)

SELECT Item.* 
FROM Item JOIN ItemGroup ON Item.Id = ItemGroup.FK_Item 
WHERE ItemGroup.Id = ? ...

SELECT ItemEvent.* 
FROM Item JOIN ItemEvent ON Item.Id = ItemEvent.FK_Item 
WHERE Item.Id = ? ...

SELECT Item.* 
FROM Item JOIN ItemEvent ON Item.Id = ItemEvent.FK_Item 
WHERE ItemEvent.state = 'INPROGRESS' ...

Id 上的主键以及所有外键上的索引 (FK_...)。在这种情况下,外键索引 ItemEvent.FK_Item 还应包含列 ItemEvent.state

关于mysql - 我的查询模式的模型数据和索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12337279/

相关文章:

java mysql java.lang.OutOfMemoryError : Java heap space

MySQL 查询返回空集

mysql - 接近sql家谱的想法(mysql)

sql - 在数据建模中,术语 'cardinality' 与 'relation' 有何不同?

database - "entity"指的是一个对象还是一组对象?

database-design - varchar(1) 与 char(1) 之间的性能

php - MySQL 到 PHP 数组分组重复值

PHP PDO 语法错误或访问冲突 : 1064 on insert

mysql - sql:使用 not in 并且不选择任何内容

php - Zend 数据库 fetchAll() : where clause array with IN operator