# json的应用

## json 
![架构图 idea](./img/json.jpg)

JSON 是一种类似 XML 的语言，是用了存储和交换文本信息的语法,采用完全独立于语言的文本格式。它的全称为 JavaScript Object Notation ( JavaScript 对象表示法) 是一种轻量级的数据交换格式 。
与xml对比，它更小、更快，更易解析。这些特性使 JSON 成为理想的数据交换语言。易于人阅读和编写，同时也易于机器解析和生成。


## 为什么使用 json ？

上面已经介绍了 json 的定义，来分析一下我们的引用场景，数据字典中定义了多个对象，有的对象需要根据类型在区分这种对象是什么类型的对象，例如设备有很多的类型，通常说设备都会说他是什么类型的设备。

例如：低压开关柜（TDLS）、通风风机（VTSF）、供热水泵（CHHP）。他们都有一部分相同的信息点，基本信息、台账参数，这部分是通用的所有他们都有，每中类型都有自己独特的属性。那么问题就暴露出来了。
我们想要创建设备表的时候就要分析一下怎么来建，设备目前有一百多种类型，所以设备表应该怎么建每种类型见一个表还是，还是只建一个表？

* 设备一个类型建一个表，然后把属性横表铺开

上面提到设备有一百多种类型，只是说到了设备，资产也有几十种类型，部件也有几十类型，只是设备的话就要创建一百多个表，而且每个表里面的属性是不完全相同的需要手工创建出来，即使使用自动创建表，
在数据库管理中，你还能直接定位到你要看的设备那，这样要对这一百多个表都要做增删改查即使没有暴露给前端，后端处理的时候方便吗？，需要添加一个类型是就要多创建一个表出来。可见这个是行不通的，
如果要做一个报表查询能很快的高效的完成吗？，查询某一项目下某一楼层下的所有设备，只是这一个简单的查询需要多少的工作量来完成，所以这个方案  X 叉掉。

* 设备创建一个表，意思就是所有的设备类型都要在一个表中，不同类型的属性都要存在这个表中，有两个问题要解决设备类型怎么区分，不同的信息点怎么存
我们一个一个来分析，设备的类型好处理，设置一个属性为设备类型 type  来区分每种设备，基本的共有的属性我们可以在表里面横向创建，那么不同的属性那

横表存储，一般对象（字段固定）的存储采用的是横表；

    * 优点：数据库标准支持，查询速度快；
    * 缺点：动态改字段
    
竖表存储
 
    * 优点：采用字段/值的方式存储，增删字段没任何压力；
    * 缺点：值类型受限，不利于做复杂的查询。对null支持不好；
    
Json存储
 
    * MySQL、PostgreSQL、Oracle、SQLServer都支持Json存储了；
    * 可以使用SQL语句直接对Json字段中的内容进行增删改查；
    * 属性可以分组，做成树型结构。符合数据字典的定义格式；
    * 新增信息点不用做任何改动，可以直接把属性存储到数据表里面；

从上面的分析中我们得出结论，使用 json 是最优解。






 


