開発者向けコラムの第3回です。
遅ればせながら、本年もどうぞよろしくお願いいたします。
今回は本格的なアプリ開発には欠かせないリレーショナルデータベースの設計機能と、
安全に運用するための機能についてご紹介します。
■第3回 Buddyにおけるリレーショナルデータベースの設計と運用
多くの場合アプリの動作にはデータを保持するためのデータベースが欠かせません。
Buddyでは代表的なリレーショナルデータベースシステムの一つである「PostgreSQL」を使用
しており、アプリを作成すると自動的にそのアプリ用のデータベースがデバッグ用と本番用に
用意されます。
・ビューの活用
リレーショナルデータベースでは、テーブルにデータを格納します。
テーブルは一件ずつのデータと対応するレコード(行)と、データの各項目となるカラム(列)
からなります。Excelのシートのようなものを思い浮かべればわかりやすいでしょう。
単純なアプリ、例えばアドレス帳のようなものであれば一つのテーブルでも作ることができます。
しかし、例えば納品管理アプリであれば、納品、納品詳細、商品、社員、取引先、といったテーブル
を組み合わせて作成する必要があるでしょう。納品詳細にはどの商品コードの商品をいくつ納品したか
があり、それを商品テーブルと結びつけて商品名や単価を得て、単価×数量を計算する、
といった処理が必要となります。
リレーショナルデータベースには、テーブル同士を結合したり、値を計算・加工したりする処理を
データベース側で行ってくれる「ビュー」という仕組みが用意されています。
本格的なアプリを作成する上で欠かせない機能と言えるでしょう。
Buddyにはこのビューを設計するためのGUIを用意しており、より直感的に組み立て、利用すること
ができます。
また設計したビューを元に、複合的な情報を扱えるアプリのスクリーン(UI)を作成することも
できます。こちらについては次回のコラムでご紹介したいと思います。
・安全なSQL操作
リレーショナルデータベースはSQLという言語でデータの読み書きなどの操作を行います。
アプリでデータベースを使用する際には、アプリで使用する言語(Buddyの場合はJavascript)と
SQLとの間でデータの受け渡しを適切におこなう必要があります。
例えばユーザーが入力したデータをデータベースに格納する際には、insertやupdateという
SQLの命令文を組み立ててその中にデータを埋め込むことになりますが、その処理が正しくないと
悪意あるユーザーがデータを壊すような操作ができてしまう(SQLインジェクションという)
セキュリティ上の問題につながります。
Buddyではデータベース操作でSQL言語を直接扱うのでなく、用意されたAPIにJavascriptの
オブジェクトでデータ等を与える方法で行い、SQLの組み立ては内部で適切に行われるように
なっています。SQL言語の関数などを含む式を直接指定する場合もありますが、その場合も
式の内容が適切なものかチェックされます。
これにより、SQL言語の詳細を知らなくても安全にデータベース操作ができるようになっています。
・不整合を防ぐトランザクション
データベースでもっとも重要なのが、データの不整合を起こさないことです。
同時に複数のユーザーが使用し、ブラウザが突然閉じられることも考えられるWebアプリであれば、
操作の競合や中断が起こることを考えておかねばなりません。
例えば在庫処理のアプリであれば、競合や中断があっても在庫数と出荷数は必ず整合性が
保たれる必要があります。リレーショナルデータベースにはそのために、一連の処理の全体が成功するか、
さもなければ全体がなかったことになるかという、トランザクションという仕組みが用意されています。
Buddyではクライアント(ブラウザ)側から一つ一つのデータベース処理を行うことはもちろん、
サーバー側でまとめてデータベース処理を行い、その中でトランザクションを利用することも可能です。
これによって、データの不整合を起こさない堅牢なアプリを作成することができます。
いかがだったでしょうか?
次回は、ビューにも対応したテンプレートや、自由なweb表現が可能なスクリーンテーマ編集機能など
UIに関する開発機能についてお話しします。