SQL表如何存储Map Legends?

时间:2017-06-16 07:39:42

标签: sql legend

我不是要问选择哪个地图图例分类。但假设我选择了一个,我将如何在SQL表中正确存储它?问的原因是,最后,我需要存储比预期更多的信息.​​..希望有人可以验证。

考虑以下3个案例:

  1. 数字,范围
  2. enter image description here

    1. 数字,单值

    2. enter image description here

      1. 字母,单值
      2. enter image description here

        为了能够正确存储它,所以我能够实时进行逻辑分类(做着色),这意味着,我还需要存储运算符(小于[lt],更大比[gt],等于[eq]等)

        结束,说我有2张桌子:

        LegendSetup

        专栏:

        1. LegendKey (int)
        2. Type (varchar)
        3. Min (decimal)
        4. Max (decimal)
        

        LegendValueSetup

        柱:

        1. ValueKey (int) //AutoIncrement PK
        2. LegendKey (int) //FK
        3. RangeNumeric (decimal) //numeric
        4. RangeAlpha (varchar) //alphabet
        5. RangeOperator (varchar) //eq, lt, gt
        6. RangeShow (varchar) //for display purpose
        7. HexColor (varchar) 
        

        这是正常的吗?

1 个答案:

答案 0 :(得分:2)

由于您只需要范围和等值,我建议您不要使用显式运算符,但范围如下:

CREATE TABLE LegendValueSetup (
  ValueAlpha varchar,
  ValueNumeric decimal,
  LowerNumeric decimal,
  UpperNumeric decimal,
  ... -- other columns
)

对于示例2和3,您只需将显式值存储在ValueAlphaValueNumeric列中。 例如1,您必须考虑LowerNumeric是否为包容性,UpperNumeric为独占界限,反之亦然。然后你可以像这样存储图例:

LowerNumeric | UpperNumeric | Color
NULL         |   100        |  Black
100          |   200        |  Red
200          |   400        |  Orange
400          |   600        |  Yellow
600          |   NULL       |  Green

如果您现在有一个值并希望获得颜色,则只需查询

SELECT color FROM LegendValueSetup WHERE LowerNumeric <= $value AND UpperNumeric > $value

您当然可以进一步将表格拆分为三个不同的表格,每个图例类型一个。