N予備校「プログラミング入門Webアプリ」を受講しています。
今回は第4章11〜15節です。
PostgreSQL
Dockerコンテナにデータベースだけを作る
日本語化も併せて。
FROM --platform=linux/x86_64 postgres:12
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y less
RUN locale-gen ja_JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP
USER postgres
ENV LANG ja_JP.UTF-8
ENV TZ Asia/Tokyo
version: '3'
services:
db:
build: .
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
コマンド
psql
- PostgreSQLに接続。後ろにデータベース名をつけると直接接続できる
CREATE DATABASE
データベース名
- データベース作成
\c
データベース名
- データベースへ接続
CREATE TABLE
テーブル名 (カラム名 データ型)
- データテーブルの作成
\q
- PostgreSQLから抜ける
データモデリング
データベース設計の作業や手法のこと
エンティティ
データベースを使って何を管理したいのか
単体で管理する必要があり、それを親として別のデータが付属するようなもの
エンティティのデータをリレーションともいう。
Visio
で言葉の意味するところがわからずER図書いてた。
インデックス
RDBのパフォーマンスを上げるために使う。
EXPLAIN ANALYZE
SQL文
- 実行にかかった時間等がわかる
CREATE INDEX ON
テーブル名 (カラム名)
- 対象のカラムにインデックスをつける
別のテーブルが作られるイメージ。
PostgreSQLではB-Tree
でのインデックススキャンがデフォルト。
テーブルの更新があった場合、インデックスも作り直す必要がある。
データ量が多いとせっかくインデックスを作ってもシーケンシャルスキャンになった。
集計
WHERE 句は「行」についての条件を書くための句。
WHERE 句の条件は、GROUP BY
によってグループを作るよりも前に使われる。
HAVING 句は、グループを作った後の「グループを対象とする」条件文。
まとめ
データベースは以前、MySQL, SQL Server, Access, DB2と扱ったことがあるので今回はほぼ復習。ただデータモデリングは勉強になった。
データベースの設計をしても、自信が持てないとコードを書いてても不安がつきまとうので精神的にもきつい。
ところでこれまでずっとアーカイブを追う形で進めてましたが、いよいよ追いついてしまった。