2019-03-24

SQLアンチパターンコピペするアンチパターン

キーレスエントリー(外部キー嫌い)

外部キー嫌いがアンチパターンなのは同意だが、間違った外部キーの使い方するほうがよっぽどアンチパターンじゃないか

外部キー貼らなかったことによって、俺はこんな被害だしたぜっての是非教えてほしい。

すぐに思いついたケースは

とかを思いついたがこんなケースで合ってるのか?こんなケースより間違った外部キーの使い方したほうが家に帰れなくなるケースのほうが多いと思うぞ。間違った使い方をしていて、システムが太ってくるとこんなケースが出てくる。

特に下2つは害悪で、SQLアンチパターンコピペして、「おまえらw外部キー嫌いはアンチパターンだぞwww」ってやるのもいいけど、同じくらい間違った使い方を注意喚起したほうがいいと思うよ。DB識者のなかでは「そんなの常識w」かもしれないが何もしらない初心者が真似をしてお家に帰れなくなるのは辛くないか

そんな経験していると、DB初心者は「せや!ユーザテーブルに退会フラグ論理削除フラグ持ったろwww うはw天才www」とかなって今度は削除フラグ持つなおじさんが出てくるぞ。しまいにはこれですよ。

http://b.hatena.ne.jp/entry/s/qiita.com/ponkotuy/items/6049388d564fb4385f4e

初心者どうしたらいいんでしょうね(*_*) 是非、DB識者には明るい未来を示して欲しいね

俺?俺はAndroidエンジニアSQLiteは使わないか関係いね

RDB初心者の俺が恐れ多くも案を出すと、FK作成する前に、そのテーブル性質予測することが大事なんじゃないかね?大量に発生するログデータなのか、大事トランザクションデータなのか、第2正規化しただけのただの情報テーブルなのか。大事トランザクションデータだったら親が削除された時にどこにどうやって退避するか。大量のログデータだったら、親が削除される時どうアプローチするか。とか恐れ多くも予測するね。

ちなみに外部キーいかER図出せないってのはそれはツールの作りであって、FK制約とは関係ないんじゃないの。バリデーション(外部キー)はセキュリティ対策(ER図を作成する)の為、実装するってのと個人的に同じことだと思っている。

から先ずは外部キー使用していなくて「こんな被害を出した」ってのを聞いてみたい。

  • 削除フラグ持たせてユーザ名を「退会済みユーザ」に上書きしたろ! ↑ ダメなん?

    • 特別な理由があればいいと思うが、基本、nullableカラム持ったり状態をカラムに記録するのはアンチパターンらしいよ。 https://www.slideshare.net/t_wada/ronsakucasual https://qiita.com/Jxck_/items/156d0a231...

      • これDB屋の自己満足だよな 顧客の要望はたいていこの3つで 1.退職などの理由で無効化したIDは処理に含めない(ただしオプションで含める機能を付ける) 2.無効化を解除することもある...

    • そいうのは、削除フラグと言わずに、退会フラグ と言いなさい。

  • 大規模案件ほどシャーディングが前提になるから、 外部キー制約の出る幕なんて無いね

  • SQLアンチパターンではないが、デッドロックについても投げっぱなしのあのSELECT FOR UPDATEの説明はなんなのかね。 1回のトランザクションでupdateを2回発行する場合と1回のSQLで複数行のア...

    • 投げっぱなしの説明ってのは意味不明だけど、一回のクエリで複数行更新や削除するのは確かにデッドロックの温床になりそうだね。 クエリの順番性次第でデッドロックになるって知っ...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん