用于在MySQL数据库中存储多个范围的表设计

时间:2016-05-23 13:57:38

标签: mysql database-design range

我需要将几个类别存储在数据库中并将其呈现给用户。每个至少有三个到最多四个范围。 E.g:

select * from YourTable where Year in (<firstquery>) as aliasname
order by <anydatecolumn>

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

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+

考虑到:

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

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

我在考虑使用类似于此的东西

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

然后在将输出提供给用户之前详细说明输出(如果两个范围相等,则代码设置最后一个&#34;无限广告&#34;,所以第一个将是&#34; 0 - 1500, 1500 - 3000,3000 - 5000,5000 +&#34;)但似乎并且容易出错。

1 个答案:

答案 0 :(得分:0)

您可以使用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     | ...