私は次の問題に直面しています。
私は(たとえば)人間の情報のためのデータベースを作成しています。すべての人間は、成人女性、成人男性、子供という3つのカテゴリのいずれかに分類できます。「身長」や「体重」などのパラメータがすべてのカテゴリに適用できることは明らかです。パラメータ「子供の数」は大人にのみ適用され、パラメータ「妊娠の数」は女性にのみ適用されます。また、各パラメーターは、カテゴリーに応じて必須またはオプションに分類される場合があります(たとえば、成人の場合、パラメーター「元パートナーの数」はオプションです)。
「height」と「weight」をロードするとき(たとえば)、これら2つのフィールドの情報に一貫性があるかどうかを確認します。つまり、高さ= 6'4''、重量= 10ポンドのレコードを間違いとしてマークします(明らかに、これは物理的に不可能です)。同様の検証ルールがいくつかあります。
人間に関するレコードを挿入するときは、情報の次の特性を反映する必要があります。
- この特定の人間のカテゴリについて可能な最大の情報(すべてのオプションのパラメータを含む)。
- カテゴリに必要な最小限の情報(つまり、必須フィールドのみ)
- この特定の人間のために実際に挿入されたもの(つまり、必要な最小限の情報の量よりも少ないかどうかに関係なく、この人のために私が持っているものは何でも挿入できます)。ここでの重要な問題は、フィールド「XXX」に何も挿入したことがないため、または意図的に正確にNULL値を挿入したために、フィールド「XXX」にNULL値が含まれる可能性があることです。デフォルト値を持つフィールドと同じロジック。したがって、私がこの特定のフィールドを処理したことをどこかに反映する必要があります。
- 挿入された情報の量が検証されました(つまり、5つのフィールドをロードしても、残りの2つを無視して、3つのフィールドのみの自己整合性をチェックできます)。
だから私の質問は、それを技術的に整理する方法です。現在、これらの必要な機能はすべて、統合ロジックなしでハードコーディングされているか、完全に独立したブロックに分割されています。統一されたアプローチを作成する必要があります。
この点に関して、私は頭の中にいくつかの素朴な考えを持っています。たとえば、人間のカテゴリごとに、可能なフィールドのリストを作成して保存できます(これを「テンプレート」と呼びます)。Aは、必須のフィールドにマークを付けることができます。
人間に関するレコードを挿入するときは、テンプレートをコピーして、このテンプレートのどのフィールドが実際に処理されたかをマークします。次の段階で、このテンプレートのコピーに、現在検証されるフィールドをマークできます。
検証モジュールは、次のように特別に修正されます。検証手順ごとに、この特定の検証手順で使用されているフィールドのリストを作成します。次に、検証対象の特定の人間のテンプレートのコピーで実際に「検証対象」とマークされているフィールドを持つ検証手順のみを呼び出します(前の節を参照)。
ご覧のとおり、これはこの問題を解決するための最も簡単な方法です。しかし、私の推測では、私が気付いていない非常に標準化されたアプローチがたくさんあります。私がこのような問題を解決したのは世界で初めてだとは本当に思えません。レコードで発生するすべての「更新」をこのコピーされたテンプレートに正しく反映するコードを記述するのは非常に苦痛なので、私のソリューションは好きではありません。
ですから、この問題をどのように解決していくのか、ご意見をお聞かせください。