【发布时间】:2010-10-25 21:24:15
【问题描述】:
我有一种情况,两个相同类型的对象有不同类型的父对象。 下面的伪代码最能说明这种情况:
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 字节,这似乎太多了。
必须有更好的方法。任何人? 谢谢。
【问题讨论】:
-
出于兴趣,如果您使用这种方法,索引和性能会受到怎样的影响?
-
+1。没有理由不赞成这个问题。正如 marc_s 所说,不要,但问题本身是明确和有效的。我们都在这里学习。
标签: sql sql-server sql-variant