sql - MySQL 搜索查询

标签 sql mysql database-design

我正在创建一个系统来存储用户统计数据,如下所示:

Table Stats
===========
id    name
-----------
1     height
2     weight
3     eye_colour
4     etc...
Table Stat_Options
==================
id    stat_id    name
1     1          170cm
2     1          172cm
3     1          174cm
4     2          60kg
5     2          65kg

然后我将 stat_options 的 ID 存储在用户表中,如下所示:

Table User_Stats
================
id    user_id    height    weight    eye_colour    etc...
---------------------------------------------------------
1     10         3         5         7

存储 ID 背后的原因是 stat_option 的“名称”始终可以更改,用户记录不需要更改。

但是看着这个,我认为它可能会出现问题,尤其是在搜索时。例如,如果我想搜索两个特定高度之间的所有用户?我想到的一种解决方案是在 Stat_Options 表中插入一个“值”字段,但我仍然不确定这是否可行。有什么建议吗?

最佳答案

此类设计的问题在于您在 Stat_Options 表中混合了定量值(高度、体重)和定性值(eye_colour)。如果您绝对想要这样做,请将定量值和定性值分解为 2 列。

Table Stat_Options
==================================
id   stat_id   name   value  unit
===  =======   =====  =====  =====
  1        1   170cm    170     cm
  2        1   172cm    172     cm
  3        1   174cm    174     cm
  4        2    60kg     60     kg
  5        2    65kg     65     kg
  6        3   black   NULL  black

然后按照其他人的建议,JOIN 表以获取值 BETWEEN x AND y

关于sql - MySQL 搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4403639/

相关文章:

sql - Azure 表单识别对 Microsoft SQL 表的 JSON 响应

java - 分块加载 SELECT 查询的实际数据(无需再次执行相同的查询)

sql - 执行存储过程 NewId() 时语法不正确

sql - scope_identity 返回 null

php - 如何在 MySQL 中忽略表和更改 ID?

mysql - 将大量数据从 XML 文件转换为数据库

java - 如何我离散arraylist元素

database-design - 在Web应用程序中存储和显示大量基于时间的计划信息

mysql - 如何在一张表中保存多种不同的数据类型

mysql - 如果记录尚不存在,则插入记录的有效方法是,如果存在则获取 ID 并将其用作外键?