前回まではアンチパターンやバッドノウハウについて学習してきましたが、今回はグレーノウハウについて特集します。グレーノウハウとは読んで字のごとくホワイトともブラックとも言えないという手法ですね。ある程度の効果もあるけれども、堂々と正しいとは言えない設計のことです。ポイントとしては完全に否定はできない使うなら節度をもち、リスクを踏まえてということですね。それでは以下見ていきます。主キーが存在しないときのサロゲートキーデータベースではコードなどのキーによってユニークな組み合わせをつくれることが理想です。いったキーを主キーといい、一つのキーだけで特定できない場合は複数のキーを組み合わせる複合主キーを使用します。はいっても実務では必ずしもユーザーが使用しているキーがユニークになるとは限りません。使いまわしをしているというケースも考えらなくはありません。このようなケースで使われるのがシステム側が発行する代理キー(サロゲートキー)です。ユーザーが使用するものとは別にシステム側で自動採番されるような人工的なキーを生成します。これはかなり一般的によく使われている手法ですが、そもそも論理的に不要なキーであり、論理モデルを分かりにくくするなどのデメリットもあり、無条件で奨励できるものではないようです。できれば使いまわしをしている場合は年度や時間などを列として追加することで複合主キーとして解決できないかを検討するといった解決策を考えるのが良いようです。上記の内容ですが、メリットとデメリットを深く考慮してませんでした・・・いままで何も考えずにオートインクリメント属性のidを作成し、これを主キーとしてました・・・。代理キーちなみに代理キーに関してもシーケンスオブジェクトを使用するパターンとオートインクリメントを使用するパターンの2種類があります。私はMySQLがほとんどだったのでほとんどオートインクリメントでやってきましたが、データベースベンダーにより型が違っているなど、移植性がひくいというデメリットがあり、柔軟性という点ではシーケンスオブジェクトに軍配が上がります。オートナンバリングをアプリ側でつくることもできますが、排他制御を考えたりと開発工数が増えるというデメリットがあります。ちなみに代理キー自体はシーケンスオブジェクトでもオートインクリメントでもアクセスが集中した時に性能遅延するというデメリットがあります。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト関連記事JPAまとめJPAわけわかんねーと思い、触りはじめてから3か月ぐらいたちます。...MySQL.sockファイルに関して朝出社してテストサーバーを見るといきなりサーバーが動いていないという事態が発生。...サロゲートキーに関してテーブル設計に関してのメモ。更新系に関してSQL実践入門、残り2章になりましたが、いやーむずいっす。今回は9章を進めていますがSQLはもともと検索を主な用途として発展したため、SELECT文の使用がメインになります。...JPAでのリレーション(アノテーション使用)JPAでリレーションを管理するとき、最初はアノテーションでやろうとしたんですが、結局やり方がわからずコンストラクタ式をかいて対処してました。