まず、これはかなり主観的な質問ですが、クライアントを教育するための正式な文書が必要です。SQLベストプラクティス(アイデンティティ値ハードコーディング)
背景 - 何百ものテーブルとSPを持つ大規模エンタープライズアプリケーションで、すべて正規化されたテーブルとIDカラムを使用する外部キーできれいに設計されています。
私たちのクライアントには、当社の生産Dbの複製されたコピーを使用してCrystal Enterpriseに複雑なレポートを作成する従業員がいます。
私は、社内のオフィスの場所や部門、ユーザーの標準的なロールセット、他のオブジェクトのステータス(オープン/クローズなど)など、「システム」ベースの情報として分類するものを格納するテーブルを持っています。 )、基本的には頻繁に変更されないデータです。
レポートデザイナーと財務アナリストは、内部にハードコードされたID値を持つクエリを作成しています。このようなもの
私はここでは非常に簡素化していますが、基本的には、これらのハードコードされたint値をすべての場所で使用しています。
これを見ているSQL開発者にとっては、明らかにこれを行わない組み込みの本能であるため、facepalmが表示されます。
しかし、驚くべきことに、については、ドキュメントやベストプラクティスの記事を見つけることができません。なぜなら、これは実行すべきではありません。
これらの値は決して変更されないため、これらの値が変更されない単一のシステム内では、複数の環境(ステージング/ QA/Dev)間で変化する可能性があると主張します。彼らのレポートデザインのアプローチを非ポータブルにし、1つの独立したサーバー環境でのみ機能することができます。
このアプローチを避けるべき理由について私のクライアントに教育するのに役立つ詳細な情報や記事などは、SQLの専門家にありますか?
良い答え、私はそれにすべて同意しています。実際には、あなたがすでに説明しているものを正確に持っています。一致するペアのId/Name列を使用します。それらに 'SELECT ID from Category WHERE Name =' xxx ''を変数に入れて、代わりにその変数を使用することは理解できませんので、拒否します。そうすれば、忠実な参照ができます大きな権威から私は言うことができるので、これをしないでください:参照。新しいAzure VMを起動して、異なるテーブル値を設定して、それらの報告が分かれているのに対して、私たちのアプリはそうではないでしょう。 – n4esa
この件に関する権威ある記事の欠如については、 *正確にはあなたの質問ではありませんが、この投稿にも良い回答があります:https://stackoverflow.com/questions/2001375/sql-avoiding-hard-coding-or-magic-numbers – Xedni