我有一种情况,相同类型的两个对象具有不同类型的父对象。下面的伪代码最好地解释了这种情况:
TypeA a1, a2;
TypeB b;
TypeC c;
a1.Parent = b;
a2.Parent = c;
更复杂的是,TypeB 和 TypeC 可能具有不同类型的主键,例如,以下断言可能为真:
Assert(b.Id is string && c.Id is int);
我的问题是在 SQL Server 中定义这种父子关系的最佳方法是什么?我能想到的唯一解决方案是定义 TypeA 表有两列 - ParentId 和 ParentType,其中:
- ParentId 是 sql_variant - 能够同时保存数字和字符串
- ParentType 是字符串 - 保留父类型的程序集限定名称。
但是,当我基于 sql_variant 定义用户数据类型时,它将字段大小指定为固定的 8016 字节,这似乎是太多了。
必须有更好的方法。任何人?谢谢。