最近のプロジェクトでデータベースを本格的に触る前までは、データベースの知識が深くなかった。実際データベースを動作しながら役に立った最も基本的で重要な議論を整理してみた。
データとデータベースとは?
データとは、単純に集められた値や情報を指します。一方で、情報処理システムの発展に伴い、実世界の膨大なデータを効率的に保存し、操作できるように設計されたものがデータベースです。
テータベースの最も大事な特徴は
- リアルタイムアクセシビリティ:必要なデータにすぐアクセス可能であること
- 継続的な変化:データが常に更新され続けること
- 同時共有:複数のユーザーが同時にデータを利用可能であること
- 内容による参照:データ内容に基づいて情報を検索できること
例:
オンラインショッピングサイトでは、顧客情報や購入履歴などのデータをデータベースに保存し、リアルタイムで商品の在庫や購入履歴を確認できます。
データーベース設計
データベース設計は、以下の3つの段階で行います:
-
概念設計: 現実世界のデータとその関係を抽象化してERモデル(Entity-Relationshipモデル)で表現します。
- 例: 学生と講義の関係を「学生が講義を受講する」といった形で図解。
-
論理設計: ERモデルをリレーションモデル(テーブル形式)に変換します。
- 例: 「学生」テーブルと「講義」テーブルを作成し、それらを「受講」テーブルで結びます。
- 物理設計: 実際のデータベースソフトウェアに基づいて物理的なストレージやインデックスを設定します。
スキーマ(Schema) とは、データベースの構造を定義する青写真や設計図のようなものです。データベースに保存されるデータの論理的な構造や制約条件を説明し、テーブル、ビュー、インデックス、リレーション、トリガー、ストアドプロシージャなどを含みます。簡単に言えば、データベースの「設計とルール」を定義したものです。
-- スキーマの定義:
CREATE SCHEMA company;
-- スキーマを利用したテーブル作成:
CREATE TABLE company.employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
department VARCHAR(50),
salary INT
);
-- スキーマを利用したクエリ:
SELECT * FROM company.employees;
データベース管理システム(DBMS)
データベース管理システム(DBMS) は、データベースを効率的に管理するためのソフトウェアシステムです。以下のような機能を持ちます:
- DDL(データ定義言語): データベースの構造を定義します
CREATE TABLE customer (
id SERIAL PRIMARY KEY, -- idはカラム名、PRIMARY KEYはドメインでidをuniqueに設定
name VARCHAR(100) NOT NULL,
age INT,
address VARCHAR(255),
remarks TEXT
);
- DML (データ操作言語): データの操作(挿入、取得、更新、削除)を行います
-- 1. INSERT: データ挿入
INSERT INTO customer (name, age, address, remarks)
VALUES ('山田太郎', 28, '東京都港区', '常連客');
-- 2. SELECT: データ取得
SELECT * FROM customer;
-- 3. UPDATE: データ更新
UPDATE customer
SET age = 36, remarks = 'リピーター'
WHERE name = '佐藤花子';
-- 4. DELETE: データ削除
DELETE FROM customer
WHERE name = '鈴木一郎';
- DCL(データ制御言語):データベースを適切に共有し、正確性を維持するために使用される言語です。
-- 特定のユーザーにテーブルへのアクセス権限を付与
GRANT SELECT, INSERT ON employee TO user123;
-- ユーザーのアクセス権限を取り消し
REVOKE SELECT, INSERT ON employee FROM user123;
DBMSを使用することで、効率的なデータ管理、データの一貫性維持、アクセス権限管理が可能となります。
データベースモデリング
- 現実世界の情報を二次元テーブル(リレーション)の形式で表現する
- データベースは複数のリレーションで構成される
- リレーション = リレーションスキーマ + リレーションインスタンス
- リレーションの特徴
- 1つのリレーションには重複するタプルが存在しない
- 順序を持たない
- 属性間には順序がない
- すべての属性値は原子的な値である
トランザクション管理
トランザクションとは、データベースにおける一連の操作の単位です。トランザクションの信頼性を確保するためには、ACID特性が必要です:
A: 原子性 :トランザクションの結果は完了か処理していないの結果になる
C: 一貫性 :トランザクション後、データベースは一貫した状態を維持すること
I : 独立性 :複数のトランザクションは互いに影響を与えずに実行されること
D: 永続性 : トランザクションが完了した後、その結果は永続的に保存されること
注意点🐛
カラム名はダブルクォートで囲む必要があり、文字列はシングルクォートで囲みます📝🤷♀️
SELECT "name" FROM customer WHERE "address" = '横浜';