11.1 データベース

11.1.1 主なリレーショナルデータベース

現在、主に使われているリレーショナルデータベース製品は以下。

(1)Oracle

エンタープライズ領域(基幹系・勘定系システム)で圧倒的なシェアがある有償データベース。高可用性を確保する仕組み(RAC: Real ApplicationCluster)やディザスタリカバリーの仕組みを持ち、安定性・堅牢性に優れている。費用は高め、管理・運用に専門知識が必要になることが多い。

(2)My SQL

GPL(無償)と商用ライセンスのデュアルライセンスで提供され、商用ライセンスでは有償サポート(MySQL Enterprise)を受けることができる。現在ではOracle社によって開発、提供されている。主にWeb系システムで広く採用されている。

(3)Microsoft SQL Server

Microsoftが提供するリレーショナルデータベース。Windows環境との親和性に優れ、Windows Serverの場合ほぼこれが採用される。

(4)PostgresSQL

無償のオープンソースのリレーショナルデータベース。商用利用可能な、PostgreSQL Licenseで提供されている。オープンソースではあるが、堅牢性が高く、高度な機能を提供。さらに、SQL標準準拠度が高い。ただし、無保証(保守サポートサービスを提供する会社はある)

この講座では、オープンソースで無性のPostgreSQLを使うこととし、以降の説明はPostgreSQLを使った場合である。

11.1.2 PostgreSQLのデータベース構造

データベースクラスタ

1つのPostgreSQLインスタンス(サーバープロセス)が管理する、データベース群

データベース

アプリケーションやプロジェクト単位でデータを分割・独立させるための単位。アプリケーションやプロジェクトごとにデータベースを作成してこれを使う。PostgreSQLでは、デフォルトでpostgresという名前のシステム管理用データベースが用意されている。

スキーマ(PostgreSQL独自)
  • データベース内にテーブルや関数などのオブジェクトを分類・整理して格納する「名前空間」
  • テーブルやビューなどのオブジェクトはスキーマに所属。同じデータベース内であれば、スキーマ名を分けて複数のシステムでテーブル名の競合を防いだり、アクセス権限を管理したりできる
  • 初期状態で自動的に「public」スキーマが生成されており、特に明示的にスキーマ名を指定しなかった場合これが使われる
  • 以下のコマンドで切り替えを行う。
       SET search_path = [スキーマ名];

11.1.3 Djangoとの接続準備

(1)インストール

PostgreSQLの公式サイトのダウンロードページに、OSごとのインストール方法がありますので、これに従ってインストールを行います。

PostgreSQLには、標準でマンドラインベースの対話型フロントエンド「psql」が付いてきますので、これを使って準備を行います。

(2)データベースの作成

まず、スーパーユーザー権限でpsqlに入ります。

'\l' コマンドで登録されているデータベースの一覧を表示します。

次に、アプリケーション用のデータベースを作成します。

登録されているデータベースの一覧を表示し、新たにjfootballというデータベースが生成されていることを確認します。

(3)ユーザーの登録

'\du'コマンドで、現在登録されているユーザーを確認します。

次にユーザーを登録します。下はユーザー名'jf_user' パスワード'jfootball'で登録する例です。

ユーザーが登録されていることを確認します。

(4)権限の設定

jf_userにデータベースを作成する権限を与えます。

権限が与えられていることを確認します。

Jfootballデータベースに対し、jf_userが接続、スキーマを作成、一時テーブルの作成することを許可します。

権限が与えられていることを確認します。

さらに、\cコマンドで接続先データベースを新たに作ったjfootballに切替えてから、ユーザー(jf_user)に対し、publicスキーマに対する権限を許可します。

11.1.4 Djangoからの接続

(1)psycopg2のインストール

psycopg2 は PythonからPostgreSQLデータベースを操作するための最も標準的で広く使われているライブラリ(アダプター)です。Mac用にコンパイルされているバイナリモジュールをインストールするには、以下のようにします。

(2)settings.pyのデータベース設定変更

DATABASEの定義を以下のように書き換えます。

ただし、NAME, USER, PASSWORDのところに入る値をここに直接書くのは危険なので、.envなどに記載して呼び出す方が良いでしょう。

(3)マイグレート

すでに、migrationファイルはあるので、単純にdjangoのマネージャでmigrateを実行すれば、モデルがデータベースに反映されます。