SQL
時間の計算とか、保存をする際に色々ハマったので。 はじめに 時間を扱うにあたって、実世界ではよくある「25時」とか「40時間」みたいな表記を.net frameworkやSQL Serverなどで用意されている時刻型データではうまく扱うことができず、文字列型で保持する…
日付をキーとするようなデータを1ヶ月分表示するようなときに使える。 レコードが毎日作られるとは限らない場合、テーブルに保存されているデータだけではどこが欠けているのか分からないが、これを使えば全日分並べることができる。 declare @d as date = '…
EAV(エンティティ・アトリビュート・バリュー)とは Attribute(属性)とValue(値)のペアを1行として登録すること。 CREATE TABLE Products ( product_id BIGINT UNSIGNED NOT NULL, name VARCHAR(100), PRIMARY KEY (product_id) ); CREATE TABLE Produ…
SQLアンチパターンは全部で25章あるので、毎日書いても1ヶ月かかる内容だった。 なので、今後はそんなにがっつり書かずにポイントだけ。 キーレスエントリ(外部キー嫌い)とは 外部キー制約を使わない いつ起こるのか テーブル間で参照をするとき 何をして…
IDリクワイアド(とりあえずID)とは 名前のまま、「とりあえずID列作っておこうぜ」ということ いつ起こるのか 主キーを作るルールがあるとき 何をしてはいけないのか(アンチパターン) どんなテーブルに対しても「ID」という名前の列(サロゲートキー)を…
ナイーブツリー(素朴な木)とは 「素朴な」という訳がぴんとこなかった… 「単純、未熟な」(思慮から生まれる)ツリー構造。 いつ起こるのか 表の構造で、ツリー(階層)構造を格納しようとするとき 何をしてはいけないのか(アンチパターン) 階層として「…
ジェイウォーク(信号無視)とは (例えば)カンマ区切りで複数の値を持つ列を作ること。 例:アカウントのテーブル。このアカウントは複数のグループに所属できる。 (account_id, name, group_id) --------------------------- (1, "hoge", "1,2,36,103") (…
仕事でDBを触る機会が増えました。 転職前はSQLもうろ覚えだったんですけど、割と慣れてきました。 いざ使いはじめると業務が持つデータ量の多さにビビります。 あとは、アプリ開発していく中で既存のテーブルをメンテナンスしたり、自分で必要なテーブル作…