NSEG #96 (お、丸8年では?)
2018/01/27
とみたまさひろ
1カラムに複数の値を格納する
やったやった
「a,b,c」とするのはシロウト
「,a,b,c,」としておくと
LIKE '%,値,%'
で検索できて便利
子が親IDを参照するツリー構造
ふつーにやる
そもそもツリー構造をRDBで表現するのが負け
同じ負けなら単純な方がいい
そういえばMySQLも8から再帰クエリ書けますね
Nested Set はやりすぎ感
すべてのテーブルに「id」列を用いる
よくやった
userテーブルのidカラムは user.id と書けていい感じ
user.user_id はなんか冗長
全体でカラム名を一意にした方がいいような気もする
外部キー制約を使用しない
え? MySQLをdisってんの?
初期のMySQLには外部キーなんてなかったんですよ
消す時に順番に気をつけないとエラーになるし
PostgreSQL だと何か方法あった気もする
名前カラムと値カラムみたいなやつ
ごめんなさい
値の型ごとにテーブルを用意する
くらいはしてもよかった
実はJSONでもいいかも
たぶんやってない…と思う
tag1, tag2, tag3 カラムみたいなやつ
たぶんやってない…と思う
行数の多いテーブルを分割するとか
諸般の事情によりやってました
つらい
残念ながら使う機会がなかった
MySQLでENUM使ったり
CHECK制約で値のリストを指定したり
使ったことはある
そんなに悪くなかったような…
やってる
ふつうやりますよね?
まあつらいこともあるけど
たぶんやってない
ふつうはやらない
SELECT col1 ... GROUP BY col2
とか
やってた
たぶんMySQL以外はエラーになる
意外と便利
自分はやらないけどそういう要求があった場合はむずかしいですね
LIKE '%文字列%'
で全文検索やるやる
お手軽なのでおすすめ 😇
PostgreSQLは何かの仕組みで LIKE '%文字列%'
でも
インデックスを効かせることができたような
SQL力が低くて複雑なクエリは書けません
SELECT *
プログラム中ではふつうは書かない
手作業では使う
昔やりました ごめんなさい
今は平文で格納することはないけど
ハッシュ値じゃなくて復号可能な暗号にすることもある
O/Rマッパー使いましょう
偉い順にIPアドレスを振るみたいな?
人目に触れるものをキーとしては
つかわない方がいいですね
例外機構がない言語でエラーチェックしてない
そんな人いる?
例外を隠蔽するプログラムは見たことある
プログラムを管理するようにはSQLを管理してない
文書化はしてない
ER図は必要になった時にツールで生成すればよくね?
Railsのマイグレーションの仕組みはすばらしい
あるある
サービス継続・運用の話
運用してないからパス
英語 | 日本語 |
---|---|
created_at | 作成日時 |
user_name | 利用者名 |
情報処理試験データベースで日本語テーブル名と日本語カラム名のクエリを手で書かされた記憶が…
SELECT 顧客名, 会社名 FROM 顧客管理台帳
LFET JOIN 会社管理台帳 USING 会社識別番号
WHERE 顧客住所 ...