SQLとJSON JSONデータをRDBに格納する
みなさんご存知のようにJavaScriptが大流行である。
サーバー側でもnodejsでJavaScriptだし。ブラウザでもなんかしようと思ったらJavaScriptだし。jQueryは便利だし。
key&valueのnoSQLならそのまま格納OKだし。RDBにだってJSON型があるし。なくても文字列型に入れることだって可能。
いっときはXMLが流行ったのだが、今はAWSのおかげかJSONをよく見るようになった。SQLポケリではXMLについては少しだけ載せているが、JSONについては「ほとんどない」。これは「いかん」時代に取り残されている感があるぞ、ということで、RDBにおけるJSONについて本ブログに書いて見るのである。
まずはJSON型のあるDBは?というと
1 Oracle
2 SQL Server
3 DB2
4 Postgres
5 MySQL
6 SQLite
なんとメジャーどころは全部JSON対応しているじゃない。
SQLiteについては型があってないようなものなので、厳密にはJSON型とはいえないかも知れないが、JSONデータを扱えるようになっている。
MS Accessについては微妙なところ。Access自身にJSON型は存在しないようだが、SQL Serverや他のDBを参照する場合にはJSON型をちゃんと認識するみたい。
ということで最近のRDBでは「JSONデータ型があるのが当たり前」という感じになっている。一時はnoSQLとか言われてたからねぇ。
そもそもJSONとは?
JSONって何というところから説明し出すと「きりがない」と思われるので、はしょって説明する。「JSONとは」でググってみると...
JSONとは「JavaScript Object Notation」の略で、XMLなどと同様のテキストベースのデータフォーマットです。
とでてきた。
つまりは、JavaScriptでデータを定義する時に使う文法が「JSON」であるわけです。以下はよくみるJSONの例。
{key: 'asai',value: 53}
配列や連想配列を扱うことも可能である。以下は配列の例。
[1,2,3]
配列は[]で囲む。連想配列は{}で囲む。
配列の中に配列や連想配列を入れても良い。いわゆるネストが可能。以下は2次元配列の例。
[ [1,2,3,4,5,6,7,8,9], [2,4,6,8,10,12,14,16,18], [3,6,9,12,15,18,21,24,27], ]
配列の中が連想配列の場合は以下のようになる。
[ {key: 'asai',value: 53}, {key: 'atsushi',value: 20}, ]
こんな感じのデータをRDBに格納することができるのがJSON型ということになる。
しかしパッと見た目、JSONといっても普通のテキストデータとなんら変わりがないように思える。
JSON型にすると何が違うのだろうか、varchar型に突っ込んでもOKな気がするが...
もちろん、JSONデータをvarchar型の列に記録してもOK。けれどもJSON型に記録しておけば便利なことが多くあるのである。そうじゃなければわざわざJSON型なんて作らないわけだし。
データの整合性
JSONデータはただのテキストデータと違って文法がある。ひとつのJSONデータは{}または[]で囲まれている必要がある。以下の文字列データはどれもJSONデータにはなり得ないものである。
朝井 淳
(1,2,3)
{name: 'asai'
このような正しくないデータをデータベース内に持ち込ませないようにすることができる。これはRDBのデータ型について一般的に言われていることでもある。難しく言うとデータ型という制約を列の属性として与えることで、データの整合性、信頼性が高まることになる。簡単に言えば「変なデータが紛れ込まなくなる」ということになる。
SQLでJSONを操作
もうひとつの利点として、データベースの操作言語「SQL」でJSONデータを扱うことが可能になるといったことがある。JavaScriptだけを使っている状況であると、JSONデータから目的のデータを検索したりソートするにはJavaScriptで何かしらのコードを書いてやる必要がある。これって結構大変だったり、面倒だったりする。
まぁ、苦手かどうかは置いておくことにして、とにかくSQLを使って、JSON配列の中からデータを探す、と言うことが可能になるのです。ね便利でしょ?
本日はこの辺まで。
JSONでの末尾カンマ RDB保存時には注意
分析関数percentile_cont 中央値でノイズ除去
SQL分析関数 ROW_NUMBER RANK DENSE_RANK
SQL分析関数 FIRST_VALUE LAST_VALUE NTH_VALUE LAG LEAD
SQL分析関数 PERCENT_RANK パーセンタイル
SQL分析関数 PERCENTILE_CONT PERCENTILE_DISC
SQL分析関数 CUME_DISTとCOUNT OVER SQLポケリ
WITH 再帰クエリ その2
投稿者プロフィール

最新の投稿
コンピューター関係の記事2025年4月26日アイキャッチ画像にSQLアイコンとJSONアイコンが欲しい
コンピューター関係の記事2025年4月23日AdSense審査に無事パス
コンピューター関係の記事2025年4月22日SSブログ復活
コンピューター関係の記事2025年4月22日SSブログが無くなった余波は大きい