データベーステーブルを正規化するプロセスの一環として、冗長な列は、上位レベルのテーブルから別の補助テーブルに抽出されます。これは、一部のフィールドが親エンティティと1対多の関係にあるために発生することがよくあります。例えば、Navicat Data Modelerを使用して生成された次のモデルを取り上げてみましょう:
ほとんどのデータベースシステムでは同時実行制御にロックが使用されますが、PostgreSQLは少し異なる方法で動作します。つまり、マルチバージョンモデル(Multi-Version Concurrency Control、略してMVCCとも呼ばれます)を使用してデータの一貫性を維持します。その結果、データベースにクエリを実行すると、基になるデータの現在の状態に関係なく、各トランザクションはしばらく前のデータのスナップショットを参照します。これにより、同じデータに対する他の同時トランザクション更新によって引き起こされる可能性のある不整合なデータをトランザクションが表示することがなくなり、データベースセッションごとにトランザクションが分離されます。このブログ記事では、MVCCプロトコルの仕組みの概要を簡単に説明するとともに、MVCCアプローチの長所と短所についても説明します。
Navicat Monitor 3 のクエリアナライザー画面の上部には、待ち時間が最も長いクエリを示すチャートがあります:
遅延クエリは全てのクラッシュを引き起こしてしまう可能性があるため、遅延クエリを特定することが重要です。
データベース監査の背後にある考え方は、データベーステーブルに誰がいつアクセスしたか、テーブルにどのような変更が加えられたかを把握することです。これは、エンタープライズレベルのアプリケーションの標準的な最小要件とみなされているだけでなく、銀行業務やサイバーセキュリティなどの多くの分野の法的要件でもあります。データベース監査証跡は、不正アクセス、問題のある設定変更など、アプリケーションのあらゆる種類の問題を調査するために不可欠です。
今日のブログでは、rentalテーブルを監査するために、MySQL Sakilaサンプルデータベース にログを追加します。データベースはDVDレンタルストアのビジネスプロセスを表すため、これはキーテーブルです。
ファーストネームを格納するテーブル列など、テーブル列には重複した値が多数含まれる場合があります。様々な(個別の)値をリストすることに興味がある場合は、複雑なSQLステートメントを用いらずにリストする方法が必要です。PostgreSQL、SQL Server、MySQLなどのANSI SQL準拠のデータベースでは、列から個別の値のみを選択する方法は、SQL DISTINCT句を使用することです。SELECTステートメントの結果セットから重複を削除し、一意の値のみを残します。このブログ記事では、その使用方法を学びます。