blog.toxn

あしあと

SQL

.net, sqlserverで時間を扱う時のTipsとか

時間の計算とか、保存をする際に色々ハマったので。 はじめに 時間を扱うにあたって、実世界ではよくある「25時」とか「40時間」みたいな表記を.net frameworkやSQL Serverなどで用意されている時刻型データではうまく扱うことができず、文字列型で保持する…

T-SQLでカレンダーを作る

SQL

日付をキーとするようなデータを1ヶ月分表示するようなときに使える。 レコードが毎日作られるとは限らない場合、テーブルに保存されているデータだけではどこが欠けているのか分からないが、これを使えば全日分並べることができる。 declare @d as date = '…

SQLアンチパターンその5 EAV(エンティティ・アトリビュート・バリュー)

SQL

EAV(エンティティ・アトリビュート・バリュー)とは Attribute(属性)とValue(値)のペアを1行として登録すること。 CREATE TABLE Products ( product_id BIGINT UNSIGNED NOT NULL, name VARCHAR(100), PRIMARY KEY (product_id) ); CREATE TABLE Produ…

SQLアンチパターンその4 キーレスエントリ(外部キー嫌い)

SQL

SQLアンチパターンは全部で25章あるので、毎日書いても1ヶ月かかる内容だった。 なので、今後はそんなにがっつり書かずにポイントだけ。 キーレスエントリ(外部キー嫌い)とは 外部キー制約を使わない いつ起こるのか テーブル間で参照をするとき 何をして…

SQLアンチパターンその3 IDリクワイアド(とりあえずID)

SQL

IDリクワイアド(とりあえずID)とは 名前のまま、「とりあえずID列作っておこうぜ」ということ いつ起こるのか 主キーを作るルールがあるとき 何をしてはいけないのか(アンチパターン) どんなテーブルに対しても「ID」という名前の列(サロゲートキー)を…

SQLアンチパターンその2 ナイーブツリー(素朴な木)

SQL

ナイーブツリー(素朴な木)とは 「素朴な」という訳がぴんとこなかった… 「単純、未熟な」(思慮から生まれる)ツリー構造。 いつ起こるのか 表の構造で、ツリー(階層)構造を格納しようとするとき 何をしてはいけないのか(アンチパターン) 階層として「…

SQLアンチパターンその1 ジェイウォーク(信号無視)

SQL

ジェイウォーク(信号無視)とは (例えば)カンマ区切りで複数の値を持つ列を作ること。 例:アカウントのテーブル。このアカウントは複数のグループに所属できる。 (account_id, name, group_id) --------------------------- (1, "hoge", "1,2,36,103") (…

SQLアンチパターン読み始めた

SQL

仕事でDBを触る機会が増えました。 転職前はSQLもうろ覚えだったんですけど、割と慣れてきました。 いざ使いはじめると業務が持つデータ量の多さにビビります。 あとは、アプリ開発していく中で既存のテーブルをメンテナンスしたり、自分で必要なテーブル作…