Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome or Safari browser. Firefox 10 (to be released soon) will also handle it.

我々は何故RDBMSを使うのか

2015/02/13
外部キー Night

@kamipo
github/kamipo

About me

Recent state

Recent state

Pull requests

Recent state

Contribution activity

我々は何故RDBMSを使うのか

信頼性のあるトランザクションシステムの持つべき性質

信頼性のある(以下略)を担保するためのRDBMSの機能

トランザクションについての事例

制約(Constraint)

よく使う制約

あまり使われない制約

FOREIGN KEY 制約

ON [ DELETE | UPDATE ]

MySQLとFOREIGN KEY

外部キー制約張るとデータ入れるのがめんどい(FAQ)

制約は(一時的に)無効にできる

# mysqldump
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,
    UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
    FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE,
    SQL_MODE='NO_AUTO_VALUE_ON_ZERO';

制約は(一時的に)無効にできる

システム構成や要件によって制約を使えない場合がある

これが現実

システム構成や要件によって制約を使えない場合がある

遺産

システム構成や要件によって制約を使えない場合がある

将来的には技術的に解決されてほしい

@kamipo said:

現状の cascading delete がWeb屋さんの実用上問題なのは一気に大量の行が消えるってなったときに他のトランザクションが長時間待たされるからだから、この外部キーの参照先が消えたってのをキューイングしといて参照整合性だけ保って裏でゆっくり消える機能があればいいと思う。

将来的には技術的に解決されてほしい

@kamipo said:

ポスグレにはインデックス作成で書き込みをブロックしないCONCURRENTLYオプションとかもあるのだから、大量の行に触るオペレーションには実用上問題があるケースがあることはわかってるってことだし参照整合性を保ってゆっくり消すのをユーザーが実装するのは無駄な労力だと思われる。

将来的には技術的に解決されてほしい

@kamipo said:

SELECT COUNT(*) 貯金とか ORDER BY RAND 貯金とか ON DELETE CASCADE 貯金とかして毎月会社で飲み会したい

制約を使える場合でも万能ではない

ON DELETE CASCADEがヤバいシステムをどうするか

ON DELETE CASCADEがヤバいシステムをどうするか

レビュー重要

レビュー重要

レビューおじさん

我々は何故RDBMSを使うのか

以上

Use a spacebar or arrow keys to navigate