SQL関数AVG、SUM、COUNTなどは単一行ではなく複数行を対象としている
ANSIとISOで規格化されている。
- SQL86
- SQL89
- SQL92
- SQL:2003
- SQL:2008
など。
indexesとindicesどちらも正しいらしい。まじか。
- データ定義言語(DDL:Data Definition Language)
CREATE文とかテーブルを作ったりという、なんというか集合の定義という感じか。
- データ操作言語(DML:Data Manipulation Language)
いわゆるCRUD処理のこと。 DDLはよく聞くけど、DMLって好んでこの用語使う人あんまいないかもなぁ。
- 参照整合性
関係モデルにおいて2つの関連しあった関係変数 (表、テーブル) の間の一貫性 (データ完全性) をいう。
- 外部キー制約
関係モデルの文脈において、2つの関係変数(テーブル)の間の参照整合性制約をいう。
- デカルト積(Cartesian product)
CROSS JOIN構文、、初めて聞いた。
デカルト積は直積とも言うやつ。2レコードのテーブルAと3レコードのテーブルBの直積なら 2 * 3 = 6通りの組み合わせとなる、、、らしい。
- 擬似キー(pseudo key)
シーケンス番号とか、AUTO_INCREMENTとかがそれっぽい
- 代理キー(surrogate key)
エンティティまたはデータベース内のオブジェクトのいずれかの一意の識別子。
- 複合キー(compound key)
複数の列で構成されたキー(A,Bの値でプライマリーになる、とか。)
- 最後の行
MySQL・・・LAST_INSERT_ID SQL Server・・・SCOPE_IDENTITY Oracle・・・シーケンス名.CURRVAL
なんかこんな感じのやつ
WITH CTE_NAME
(column_name...)
AS(
SELECT ... FROM ... WHERE
UNION ALL
SELECT ... FROM ... WHERE
)
SELECT * FROM ... WHERE ...
SQL ServerとかOracle11gとかDB2とかで使えるとのこと(2013年時点)。今はどうなんだろか Oracle9iとかはSTRAT WITHとかCONNECT BY PRIORとかいう独自構文だったぽい。
- 2つのテーブルを参照する外部キーを持つテーブル
親のidと自分のidをもつやつ。
親子関係のSELECTは簡単だが、根こそぎ拾う検索に弱く、UPDATE、INSERTには強い。 親子関係のみで完結する場合ならこれでも良いのかもしれない。
/usr/local/bin的な文字列をテーブルに持たせて階層構造を表現する感じ。
これってジェーウォーク的な印象も初見では受けたのだけどどうなんだろ。 と思ったら、書いてあった。同様の弱点もあると。
便利そうだけどねぇ。
nsleftとnsrightで階層を表現する。
- nsleft
そのノードより下の階層にある全てのノードが持つ値より小さい値
- nsright
そのノードより下の階層にある全てのノードが持つ値より大きな値
nsってなんの略だろ。node startとかかな?
ツリー構造の枝のleftとrightを意識して、数値で順序性を持たせる モデリングのよう。
関係性さえ理解してしまえば、確かに使いやすそうだけど、 パッと見は難しく感じちゃうな。
利点は非葉ノードの削除を行ってもツリー構造が破壊されないこと。
一方で親子関係の特定は隣接リストよりも複雑になってしまう。 あと、ノードの挿入も複雑(ns値の再計算が必要になる) ノードの挿入が頻繁だとキツイと。
入れ子区間モデルなるものがあるらしい
全てのパスの情報を先祖と子孫として持つやつ。 編集が簡単。ノード自体は消さなくて済む。
ただ、親子関係の参照はやや複雑になる。
- 重複回避
- 個別行の参照
- 外部キー参照
- Portland Pattern Repository
- アンチパターン_ソフトウェア危篤患者の救出
例えば。。。
- 黄金のハンマー(Golden Hammer)
- 車輪の再発明(Reinventing the Wheel)
- 委員会による設計(Design by Commiteee)