Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

「理論から学ぶ データベース実践入門」読書会(20)覚書-2

$
0
0
一昨日の続きです。

トリガーはデータベースリファクタリングによく使われる。
結構闇がある。。。。(これはまた別途まとめたい)

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

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>