SQLAP

そろそろ履歴データについて真面目に考えてみていいんじゃないの

WEB+DB PRESS Vol.75の「理論で学ぶSQL再入門/履歴データとの上手なつきあい方」が面白かったと感想を書こうと思っていたらもうVol.76が出そうなのでいい加減慌てて書きます。 さてこの記事では、リレーショナルモデルが苦手とするデータ構造の1つとして履歴…

SQLの制約エラーの詳細を取得する方法

1つ前のエントリで、SQLの制約はエラーの詳細拾えなくて使えないわーといったのが聞こえたわけではないのだろうが、Bruce Momijan(PostgreSQLのCore Developer)がこんなエントリを書いていた。 Matching Server and Client Constraints チェック制約を使うと…

外部キー制約は重荷になるか

SQLアンチパターン 4章 キーレスエントリ(外部キー嫌い)より 外部キー制約によって、多少のオーバーヘッドが生じるのは事実です。しかし、以下にあげるように、他の選択肢と比べると、外部キーの方がより効率的であることがわかります。 本書では、外部キー…

特定の2つのタグが付けられたバグ検索

7章 マルチカラムアトリビュート(複数列属性) より 特定の2つのタグが付けられたバグ検索といった少し複雑な処理も、簡単に記述できます。 BugsテーブルとTagsテーブルが1対多の関係のとき、"printing"と"performance"という2つのタグが付いたバグの検索をど…

交差テーブルを参照するテーブルの外部キー

3章 IDリクワイヤド - 3.5.3 自然キーと複合キーの活用 より 現実問題として、複合主キーがどのようにフレームワークでサポートされているか等については良く知りません。 1つ注意すべき点は、複合主キーを参照する外部キーもまた、列の組み合わせでなければ…

参照テーブルとアプリケーションの値リスト

10章 サーティーワンフレーバー(31のフレーバー) より ENUMのかわりに参照テーブルを使うという話。基本的にはやってみたいと思うアイディアだった。 すると、多くのプログラマーは、アプリケーションコードの側にも値のリストを定義し、手でメンテナンスす…

SQLでfloat型を使うということ

9章 ラウンディングエラー(丸め誤差)より floatを使う場合に精度に注意すべきという点については同意です。 SELECT * FROM Accounts WHERE hourly_rate = 59.95; このため、account_idが123の行hourly_rate列にサイド59.95を割り当てても、リテラル値59.95と…

カスケード更新のパターン

4章 キーレスエントリ(外部キー嫌い)より カスケード更新について考えてみる。 ON UPDATE、ON DELETE句には、RESTRICT, CASCADE, SET NULL, SET DEFAULT, NO ACTIONが指定できる。ただしMySQLにはSET DEFAULTは無い。 CREATE TABLE Bugs ( ... FOREIGN KEY (…

SQLアンチパターンメモ

SQLアンチパターンを読んだのですこしずつ思ったことをメモしていこうと思います。 この本は読んで納得するというよりは、考えるきっかけを与えてくれる本だと思います。長い歴史の中で今になってこういった本が出てきたというのがSQLの不思議な運命を象徴し…