タグ

ブックマーク / qiita.com/yuba (2)

  • Javaの検査例外は、呼び出し側で「どんなに注意しても防げない」異常系 - Qiita

    注:記事の内容はJavaで公式にドキュメントされているものではなく筆者の見解です。とはいえクラスを設計する上で有用な指針たり得ると思われるので公開したものです。 おさらい - 検査例外と非検査例外 Javaの例外クラスには「catchしないとコンパイルエラーになる」検査例外(チェック例外、checked exception)とそうでない非検査例外(非チェック例外、unchecked exception)があります。 検査例外は最近は嫌われる傾向がありC#では採用されていませんしAltJava言語も軒並み不採用、さらにはJavaの新しめのライブラリにも非検査例外しか投げないものが出てきていますが、適切に使えば安全なプログラミングのための強力な武器であり、検査例外の有意義さについては @irxground さんの Javaの検査例外の存在意義 をご覧ください。 例外クラスを自作する場合、検査

    Javaの検査例外は、呼び出し側で「どんなに注意しても防げない」異常系 - Qiita
  • 論理削除と一意性制約を両立させる方法・DB製品別 - Qiita

    アプリケーション上でなにかエントリ(例えば記事だとかユーザだとか)を削除したとき、DB上の行は削除せず単に【削除済み】フラグを立てるだけという扱い方を 論理削除 と呼びます。 論理削除にはいろいろなメリットがあります。行削除のように関連する他テーブルへ削除が波及しないこと、エントリ復活ができること、障害時にデータ変更の経緯を追いやすくなることなどなど(デメリットもわんさかあるんですが、この記事の主旨からははずれるので別途お調べください)。 ところが論理削除の方針でDBを組んでいて困ったことはありませんか? 「 メールアドレスは一意性(UNIQUE)制約をかけたいのに、それだと削除済みのユーザと同じメールアドレスが使えないことになる 」 論理削除と一意性制約、両立はできないのか? できないと思っている方、多いと思います。実はちゃんとできます。DB製品によって実現方法がちょっと違ってくるだけで

    論理削除と一意性制約を両立させる方法・DB製品別 - Qiita
    suginoy
    suginoy 2015/03/01
    deleted_atをNULLにするgemがある。 “MySQL, Oracleには部分インデックス機能がありません。しかし、一意性制約がNULLを対象外にする性質を利用すればやはり両立が可能です”
  • 1