我正在创建一个系统来存储用户统计数据,如下所示:
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/