2020-07-09 18:45:41
概要DBドキュメントを自動生成できるツールの有名所でいうと、MySQL Workbenchが筆頭に上がると思うが、それ以外にも良いOSSがないか漁ってみてちょっと触ってみたので感想を残す。
Schemaspy
schemaspy.org
github.com - schemaspy/schemaspy
DBに接続してhtmlでDBドキュメントを生成してくれるJava製のツール。
Dockerhubにイメージがあるので、それを使って簡単に試してみることができる。
MySQL5.7(多分5.8も大丈夫だと思う・・)は、こんな感じでいけるはず。docker run -v "$PWD/sc...
データベース
Docker
ER
2020-01-05 21:18:26
概要トランザクションについてまとめる。
トランザクションデータを正しく保つための手法。DB固有の概念ではなく、一つの理論として独立している。
多数のクライアントからDBサーバーに対して同時アクセスが発生するような状況や、DBサーバーまたはアプリケーションが更新処理途中にクラッシュするという状況などからデータの整合性を守りたい時に必要とされる。
トランザクションが提供する機能は2点ある。
同時実行制御
同時アクセスによって発生し得るデータ不整合を防ぐこと。
クラッシュリカバリ
DBサーバーやアプリケーションがクラッシュしても自動的にリカバリ処理が行われること。
データ不整合を起こさな...
データベース
トランザクション
2019-07-16 10:33:40
概要MySQLだけでテストデータを生成するSQLについてメモしておく。テストデータをスクリプトで生成する方法は柔軟性が高く、上等手段な気がするが、数万件のレコードを用いてパフォーマンステストをしたい時などはSQLだけでも十分かもしれない。
SQLクエリはこんな感じ。
DROP TABLE IF EXISTS `tests`;
CREATE TABLE `tests` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` int(5) NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
INSERT INTO...
データベース
MySQL
sql
cross join
2018-08-07 11:36:36
概要複数のテーブルに対し、多対1でテーブルが関係付くときのテーブル設計のパターンについてまとめる。
データ設計以下のようなケースのデータ設計を例とする。
issues
id
title
pullrequests
id
title
comments
id
content
commentsがissues、pullrequestsのどちらに対しても多対一で関係付くようなケース。
ポリモーフィック関連
issues
id
title
pullrequests
id
title
comments
id
content
target_table
target_id...
データベース
ポリモーフィック
SQLアンチパターン
2018-08-16 00:50:59
概要ER図のリレーションシップの種類についてまとめる。
ER図のリレーションシップの種類ER図のリレーションシップには3つの種類がある。
リレーションシップの種類
テーブル関係
線の種類
依存リレーションシップ
子テーブルが親テーブルに依存(テーブル間に親子関係がある)
実線(親→子)
非依存リレーションシップ
子テーブルが親テーブルに依存していない(テーブル間に親子関係がない)
点線(親→子)
多対多リレーションシップ
多対多のテーブル関係
実線(親↔子)
依存リレーションシップ
ユーザー
ユーザーNo(PK)
企業No(FK)
名前
メールアドレス
ユーザ...
データベース
ER
2018-07-19 12:56:20
概要MySQLのJOINの種類とUNIONについてまとめる
INNER JOIN指定カラムの値が一致するレコード同士を結合する。指定したカラムの値が一致しない場合は結合しない。(両方のテーブルに一致するデータだけ結合される。)
users+------+--------+------+| id | sex | name |+------+--------+------+| 0 | male | John || 1 | female | Risa || 2 | male | Taro |+------+--------+------+
accounts+---...
データベース
MySQL
join
union
2018-05-12 12:36:36
概要N+1問題の説明と対応についてまとめる。
N+1問題とは
全てのレコードの取得に1個+レコード文だけのN個のSQLを発行してしまう問題
N+1というより1+Nと解釈したほうがわかりやすい
例
一覧表示用のデータを取得するケース
一覧用の全データを取得するSELECTを1回発行(Nレコード返ってくる)
Nレコードの関連データ取得のためにSELECTをN回発行
対応
join
SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."...
データベース
N+1
2018-04-22 13:50:03
インデックスとはテーブルに格納されているレコードを高速に取り出すための仕組み
以下のようなO(n)問題を抱えたクエリがあるとする。
SELECT * FROM users WHERE first_name = ‘Tom’
このクエリのパフォーマンスを上げるためには、以下のようにIndexを貼る。
ALTER TABLE users ADD INDEX (first_name)
メリット・デメリットメリット
データの読み込み・取得の速度向上
デメリット
容量の増加
書き込み速度の低下
データの作成・更新時には、同時にインデックスの追加・更新も行われるため、上記のようなデメリットが生じる。
イ...
データベース
DB
インデックス
MySQL