私は新しいアプリケーションを作成しており、設計段階にあります。InsertedDate
いくつかの db テーブルには、レコードが挿入されたときに表示されるフィールドが必要です。
に設定することを考えていDefault Value
ますGetDate()
データベースでデフォルト値を設定するよりも、アプリケーションでこれを行う利点はありますか?
私は新しいアプリケーションを作成しており、設計段階にあります。InsertedDate
いくつかの db テーブルには、レコードが挿入されたときに表示されるフィールドが必要です。
に設定することを考えていDefault Value
ますGetDate()
データベースでデフォルト値を設定するよりも、アプリケーションでこれを行う利点はありますか?
アプリケーションではなく、SQL Server で既定値を GetDate() に設定する方がよいと思います。これを使用して、挿入に基づいて順序付けされたテーブルを取得できます。アプリから設定しようとするとオーバーヘッドのようです。挿入で特定の日付を指定したくない場合を除き、それはその目的を殺していると私は信じています.
データベースにレコードを手動で挿入する必要がある場合、アプリケーションでデフォルト値を設定してNULL参照を回避する場合は、このフィールドを設定することを忘れないでください。
個人的には、可能な限りデータベースにデフォルト値を設定することを好みますが、他の人はこれについて異なる意見を持っているかもしれません。
設計するとき、私は常に関心の分離を非常に重要視しています。これは、「データベースの機能とアプリケーションの機能」という文脈において、「データの所有者は誰か」という質問に要約されます。私は常に、自分のコードが自分のデータを所有しているという意見を持っていました。決してデータベースではありません。データベースは単なるデータのコンテナです。これは、ドレッサーが私の服を所有しているのではなく、私が自分の服を所有していると言っているのと似ています。私のドレッサーは重要な機能を果たし、私の服を整理して利用できるようにしますが、私は常にドレッサーに服を入れるエージェントであり、その整理に責任を負っています.
現代のデータベースは私のドレッサーよりもはるかに強力であると言って、多くの人がこの類推に問題を抱えていると確信していますが、私の経験では、データベース層に機能を追加すればするほど、プロジェクトが混乱し、境界が曖昧になります。データと機能の間 (例: データベースのストアド プロシージャなど)。確かに、あなたの例はこの概念の単純な例ですが、前例が設定されると、何でも構いません。
もう 1 つ取り上げたいのは、使いやすさです。特定の実装が便利だから (null を回避する、異なるサーバー時間など)、それを選択する必要があるという考えは拒否します。私にとって、そのような実装を選択することは、「私のコードが機能しなくても大丈夫です。コードを修正して堅牢にするよりも、コードを使用しないようにします」と言っているのと同じです。
データベース層の機能が保証されているだけでなく必要な場合、極端な規模または他のビジネス要件のために、多くのケースがあると確信していますが、私の経験では、コード内に機能を保持できるほど、よりクリーンになります。 、よりシンプルで堅牢なアプリケーションになります。
アプリケーションで実行する場合は、単体テストを実行できます。私がこれまで取り組んできたプロジェクトでは、特に ORM を使用する場合、すべてのデフォルト操作をコードで行います。