【问题标题】:Table design for storing multiple ranges in MySQL databaseMySQL数据库中存储多个范围的表设计
【发布时间】:2016-09-20 10:52:44
【问题描述】:

我有几个类别需要存储在数据库中并将它们呈现给用户。每一个都有最少三个到最多四个范围。例如:

id | category_name | Range A |  Range B  |  Range C  |  Range D  
--------------------------------------------------------------------
 1 | Category1     | 0 - 200 | 200 - 450 | 450 - 750 | 750+
 2 | Category2     | 0 - 300 | 300 - 600 | 600+      |           
 3 | Category3     | 0 - 250 | 250 - 350 | 350 - 550 | 550+

当用户选择一个类别时,他应该选择将保存在数据库中的某个范围。

    name    | category_id | category_range
------------------------------------------
 niceuser30 | 2           | A
 hellouser1 | 1           | B

考虑到:

  • 范围不能有间隙(例如,如果范围 A 从 100 到 200,范围 B 必须从 200 开始)
  • 每个范围必须从 0 开始
  • 每个范围都必须是开放式(或半开放式)

保存这些值的表格的最佳设计是什么?

我正在考虑使用类似的东西

id | category_name | range_a | range_b | range_c | range_d
-------------------------------------------------------------
1  | Category1     | 1500    | 3000    | 5000    | 5000
2  | Category2     | 500     | 1000    | 1000    | 

然后在将其提供给用户之前详细说明输出(如果两个范围相等,则代码将最后一个设置为“ad infinitum”,因此第一个将是“0 - 1500, 1500 - 3000, 3000 - 5000, 5000+") 但它看起来 并且容易出错。

【问题讨论】:

  • 如果不知道哪些查询将应用于表,则无法充分回答此问题。

标签: mysql database-design range


【解决方案1】:

您可以使用 2 个表格,例如 Ranges:

   id  | RangeName| Start |  End |  Range  | 
    --------------------------------------------------------------------
     1 | A        | 0    | 1500 | 1500     |
     2 | B        | 1500 | 3000 | 1500     |           
     3 | C        | 3000 | 4000 | 1000     | 
     ....

RangeCategories:

  id   | CategoryID|RangeId| 
    --------------------------------------------------------------------
     1 | 1         |   1   | 
     2 | 1         |   2   |          
     3 | 2         |   3   | 
     4 | 2         |   1   | 
     .....

当然你也会有你的categories表:

    id | CategoryName|...
   --------------------------------------------------------------------
     1 | Category1     | ...
     2 | Category2     | ...          
     3 | Category3     | ...

【讨论】:

  • 感谢您的回答。但是,范围并不总是固定的(例如,我不能将起点/终点设为 0/1500,范围为 1500,因为下一个范围可能是 1500 到 2500)。
猜你喜欢
  • 1970-01-01
  • 2017-02-02
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
相关资源
最近更新 更多