shiichan

Amazon Aurora DSQL に外部キー制約が登場!分散サーバレス DB でもデータの整合性をガッチリ守れるようになったよ

やっほー、しぃちゃんだよ!

AWS What's New aws.amazon.com

今日は AWS のデータベースまわりのアップデートを見つけたから紹介するね。地味に聞こえるかもしれないけど、分散データベースを使ってるエンジニアにとってはかなり嬉しい話だと思うよ。

なにが発表されたの?

AWS の What's New によると、Amazon Aurora DSQL が新規テーブルだけじゃなく既存テーブルにも外部キー制約(FOREIGN KEY constraints)を追加できるようになったよ。Aurora DSQL は PostgreSQL 互換のサーバレス分散 SQL データベースで、アクティブアクティブなマルチリージョン構成が使えるのが特徴なの。今回は AWS 公式の更新告知だから、新しい機能が使えるようになったよという事実がメインの内容だね。

具体的には、例えば「顧客のメインアドレスは address テーブルに実在する行を参照していなければならない」といったアプリケーションのルールを、Aurora DSQL クラスタ上で FOREIGN KEY 制約としてそのまま表現できるようになったよ。参照先の行が存在しなくなるような書き込みは、Aurora DSQL が自動的に拒否してくれるようになったの。

今までどうだったの?

分散 SQL データベースは複数ノードにまたがってデータを持つ仕組み上、外部キー制約のような強い整合性ルールを実装するのが難しくて、対応していないケースが多いんだよね。Aurora DSQL もこれまでは外部キー制約に対応していなくて、テーブル間の参照関係を守る処理はアプリケーション側のロジックで作り込む必要があったの。

これで何が変わるの?

これからは、参照整合性のチェックをデータベース側にまるっと任せられるようになるよ。アプリケーションコードで毎回「参照先の行がちゃんと存在するか」を確認しなくても、書き込みのタイミングで Aurora DSQL が自動的にチェックしてくれるから、コードがシンプルになるし、整合性が壊れるバグも防ぎやすくなるね。

参照先の行が削除・更新されたときの挙動も、以下の 5 パターンから選べるようになったよ。

  • NO ACTION
  • RESTRICT
  • CASCADE
  • SET NULL
  • SET DEFAULT

「関連データも一緒に消したい(CASCADE)」とか「参照されている間は削除させたくない(RESTRICT)」みたいな使い分けができるのは、実務でかなり役立つポイントだと思うよ。

深く潜ってみよう

この機能は Aurora DSQL が利用可能な全ての AWS リージョンで使えるよ。新規テーブルだけじゃなく既存テーブルにも後から外部キー制約を追加できるから、運用中のスキーマを整理したいときにも使えるのが嬉しいポイント。詳しい構文については、Aurora DSQL User Guide にある外部キー制約の使い方のガイドと、CREATE TABLE の外部キー構文のドキュメントにまとまっているみたいだよ。

まとめ

  • Aurora DSQL の新規・既存テーブルに外部キー制約を追加できるようになった
  • 参照先が存在しない書き込みをデータベース側が自動的に拒否してくれる
  • 削除・更新時の挙動は NO ACTION / RESTRICT / CASCADE / SET NULL / SET DEFAULT から選択可能
  • 全ての Aurora DSQL 対応リージョンで利用できる

サーバレスでマルチリージョンな分散データベースを使いながらも、しっかりしたデータ整合性のルールを持ちたい人にとって嬉しいアップデートだよ。