一般mysql表设计建议

时间:2017-08-30 11:26:33

标签: mysql

我有一些特定数据集,涉及特定工作的SLA(服务水平协议),如下所示。 这里x表示没有小时数。 一旦任务在给定时间范围内完成,具体级别如下。

Level 1 --- > x>=500

Level 2 --- > 500> x >=400

Level 3 --- > 400> x  >=300

Level 4 --- > 300> x >=200 

Level 5 --- > 100 > x >=200 

我需要达到特定任务的水平,例如: - 如果x为252,则该任务为4级。

我以下面的格式设计了表格,但是我不会给出获得任何x值的级别的能力。请建议我最好/准确的mysql表设计。

enter image description here

2 个答案:

答案 0 :(得分:0)

您的表格设计隐含地假设订单。在关系数据库中,行没有顺序。没有。

因此,更好的设计是这些专栏:

serviceLevel
minimumHours 
maximumHours

然后检索服务级别变得非常容易:

SELECT serviceLevel 
FROM <table> 
WHERE <hours> BETWEEN minimumHours AND maximumHours;

答案 1 :(得分:0)

您可以尝试为每个级别存储下限和上限,例如

Level | lower | upper
L1    | 500   | NULL
L2    | 400   | 500
L3    | 300   | 400
L4    | 200   | 300
L5    | 100   | 200

现在,如果您想运行建议的查询并搜索x = 252,则可以执行以下操作:

SET @x=252;

SELECT *
FROM yourTable
WHERE
    @x >= lower AND
    (@x < upper OR upper IS NULL);