一昨日の続きです。
トリガーはデータベースリファクタリングによく使われる。
結構闇がある。。。。(これはまた別途まとめたい)
makopi23さんが話してくれたSQLアンチパターンでの忍者屋敷おもしろかった。
SQLアンチパターン・レトロスペクティブ関西にいってきた(Java開発のんびり日記)
■NOT NULL制約の導入
たとえばフォームなどであらかじめNULLが予定され、その数が知れているような場合は、
そのままひとつのテーブルにすることもあるけど、不定や数がわからないような場合は
表分割するね。
NULLについてはOracleのVARCHAR2に長さゼロの文字列をいれるとNULL扱いという方言がある
詳しくは以下のスライドを参照。
NULLとの戦いRDBMS実装編
ちょっとはずれるけど「データのクレンジング」も必要。文字列型に見えない文字(半角スペースや、
タブ、コントロールコード、全角スペース(!)を入れて一致しないとかある。
たしかきたみりゅうじさんの漫画でもあったけど、NULLのかわりに'NULL'という文字列を入れている
人とか。。。。(ちなみに漫画の公開は最新五本だけなので、この話は現在みれません)
http://gihyo.jp/dev/serial/01/funny-play/
NULLは値ではないので、NULL値と呼ぶの禁止。当然↑のようなNULL値も禁止 w
■主キーの定義変更
・主キーが既約ではない場合。
「既約」ってナニ(?)
→読書会の後みつけた。p.79の真ん中あたり。本の索引にないので、ほしい。
MySQLでは主キーは必ずクラスターインデックス(他のRDBMSでは必ずしもそうでない)なので、結構変更には時間がかかる。
■番外: 制約使う? 使わない。
アプリ側ではさまざまなレベルの人がいるので、アプリ側て担保するのは難しい。
使えるならRDBMSの機能の制約を使う。
SQLアンチパターンの和田さんいわく「悩んだら寿命の長い方にあわせる」ということらしい。
DBとミドルで悩んだらDB, ミドルとアプリで悩んだらミドル。ウワモノは頻繁に変わるけれども
バックエンド、特にデータはなかなか変わらない、ので。(人づての伝聞なので詳細違うかも。。。)
■おまけ: トリガーと外部参照制約を使った2テーブルの同期
これは実装にあたりいろいろと考慮点がありそうなので、また別の機会に。
次回は2016-03-02(wed)予定です。
PlanetMySQL Voting: Vote UP / Vote DOWN
トリガーはデータベースリファクタリングによく使われる。
結構闇がある。。。。(これはまた別途まとめたい)
makopi23さんが話してくれたSQLアンチパターンでの忍者屋敷おもしろかった。
SQLアンチパターン・レトロスペクティブ関西にいってきた(Java開発のんびり日記)
■NOT NULL制約の導入
たとえばフォームなどであらかじめNULLが予定され、その数が知れているような場合は、
そのままひとつのテーブルにすることもあるけど、不定や数がわからないような場合は
表分割するね。
NULLについてはOracleのVARCHAR2に長さゼロの文字列をいれるとNULL扱いという方言がある
詳しくは以下のスライドを参照。
NULLとの戦いRDBMS実装編
ちょっとはずれるけど「データのクレンジング」も必要。文字列型に見えない文字(半角スペースや、
タブ、コントロールコード、全角スペース(!)を入れて一致しないとかある。
たしかきたみりゅうじさんの漫画でもあったけど、NULLのかわりに'NULL'という文字列を入れている
人とか。。。。(ちなみに漫画の公開は最新五本だけなので、この話は現在みれません)
http://gihyo.jp/dev/serial/01/funny-play/
NULLは値ではないので、NULL値と呼ぶの禁止。当然↑のようなNULL値も禁止 w
■主キーの定義変更
・主キーが既約ではない場合。
「既約」ってナニ(?)
→読書会の後みつけた。p.79の真ん中あたり。本の索引にないので、ほしい。
MySQLでは主キーは必ずクラスターインデックス(他のRDBMSでは必ずしもそうでない)なので、結構変更には時間がかかる。
■番外: 制約使う? 使わない。
アプリ側ではさまざまなレベルの人がいるので、アプリ側て担保するのは難しい。
使えるならRDBMSの機能の制約を使う。
SQLアンチパターンの和田さんいわく「悩んだら寿命の長い方にあわせる」ということらしい。
DBとミドルで悩んだらDB, ミドルとアプリで悩んだらミドル。ウワモノは頻繁に変わるけれども
バックエンド、特にデータはなかなか変わらない、ので。(人づての伝聞なので詳細違うかも。。。)
■おまけ: トリガーと外部参照制約を使った2テーブルの同期
これは実装にあたりいろいろと考慮点がありそうなので、また別の機会に。
次回は2016-03-02(wed)予定です。
JUGEMテーマ:コンピュータ
PlanetMySQL Voting: Vote UP / Vote DOWN