SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド

データフォーマット「JSON」とは? リレーショナルとの使い分け、RDBによるJSONのサポートも解説

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド 第8回

  • X ポスト
  • このエントリーをはてなブックマークに追加

JSONの記法と取り扱い

 そもそもJSONとはどういった記法でしょうか。

 例として昔ながらの中華料理屋さんでの注文場面をイメージしてみます。ウェイターさんが注文を受け伝票に記載、記載した注文伝票を厨房に渡します。注文伝票の先頭には伝票番号と日付、テーブル番号、お客さまの人数、その下にオーダーされた品目を書いてあるイメージですね。このときの「注文伝票」がJSONドキュメントに相当します。

 この「注文伝票」をJSONで表現してみましょう。まず括弧{}の中に対象の注文を記載していきます。この外側の括弧{}が一つのトランザクションに相当し、それぞれキーと値がペアになる形で伝票番号・日付・客席情報・明細を記載していきます。

 値は括弧{}でネストしたり、[]を利用し配列にすることもできます。ここでは、客席の値は{}でネストし、テーブル、人数と客席情報を記載し、明細の値は[]でメニューと数量を配列で記載しています。ネストや配列を用いることで複雑なデータ構造も柔軟に表現することができます。

注文伝票を例にしたJSONフォーマット
注文伝票を例にしたJSONフォーマット

 データベースとして多く活用されているリレーショナルでは、通常明細データとマスター・データは分離(=正規化)しますが、JSONの世界ではこれらを同一のドキュメント内に一括りに記載します。1つのドキュメントとして表現される結果、いつ誰が何をどうした、といった情報をすぐに認識できます。あるテーブルで何人の方が何を注文されたのか、その合計金額はいくらなのか等を伝票1枚で確認できることと同じですね。

 このことは実体を模写するアプリケーション開発、特にウェブ画面の実装しやすさにも直結しています。以下はJavaScriptの例ですが、JSONドキュメントから特定のデータを参照するには、ドキュメントをJSON.parse()で解析、変数化した後に、その特定のデータのキーをドットでつないで指定します(ドット記法)。シンプルでコードも読みやすいですね。

JavaScriptでの呼び出し例
JavaScriptでの呼び出し例

 もちろんJSONを扱うデータベースも存在します。スキーマ設計と正規化が基本である従来のリレーショナル・データベースは、JSONの柔軟性に適しているとはいえませんでした。そこで登場したのが、JSONを専門に扱うNoSQLのドキュメント指向データベースです。スキーマ設計が不要で高速なドキュメント指向データベースはデータベースにシンプルなJSONの処理を求めるアプリケーションでよく利用されています。よく知られているドキュメント指向データベースにMongoDBがあります。MongoDBはMongo Shellというシェルを提供しています。以下はMongo ShellでのJSON操作の例です。

mongoshの例
mongoshの例

 ドキュメント指向データベースでは、JSONドキュメントをコレクションに格納して操作します。リレーショナルで言うところの表と行がJSONにおけるコレクションとドキュメントに対応します。コレクションを作成し、その中に複数のドキュメントを格納していくイメージです。

次のページ
JSONもよいがリレーショナルがよいところもある

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド連載記事一覧

もっと読む

この記事の著者

嵐 由香(日本オラクル株式会社)(アラシ ユカ)

 日本オラクル株式会社のエンジニア。最近はAutonomous Database、APEX、OCI Data Integrationを担当。データベース、Webアプリ開発、データ連携の3点セットでお客様のDXをサポートできるよう日々励んでいる。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/15918 2022/05/26 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング