同じタイプの2つのオブジェクトに異なるタイプの親がある状況があります。次の擬似コードは、状況を最もよく説明しています。
TypeA a1, a2;
TypeB b;
TypeC c;
a1.Parent = b;
a2.Parent = c;
さらに複雑にするために、TypeBとTypeCには異なるタイプの主キーがある場合があります。たとえば、次のアサーションが当てはまる場合があります。
Assert(b.Id is string && c.Id is int);
私の質問は、SQLServerでこの親子関係を定義するための最良の方法は何ですか?私が考えることができる唯一の解決策は、TypeAテーブルにParentIdとParentTypeの2つの列があることを定義することです。
- ParentIdはsql_variantです-数値と文字列の両方を保持できるようにするため
- ParentTypeは文字列です-親タイプのアセンブリ修飾名を保持します。
ただし、sql_variantに基づいてユーザーデータ型を定義すると、フィールドサイズが固定8016バイトとして指定されました。これは、かなりの方法のようです。
より良い方法が必要です。誰?ありがとう。