在SQL Server中定义可能包含整数或字符串的列的最佳方法是什么?

mar*_*ark 1 sql sql-server sql-variant

我有一种情况,两个相同类型的对象有不同类型的父母.以下伪代码最好地解释了这种情况:

TypeA a1, a2;
TypeB b;
TypeC c;
a1.Parent = b;
a2.Parent = c;
Run Code Online (Sandbox Code Playgroud)

更复杂的是,TypeB和TypeC可能具有不同类型的主键,例如,以下断言可能为真:

Assert(b.Id is string && c.Id is int);
Run Code Online (Sandbox Code Playgroud)

我的问题是在SQL Server中定义这种父子关系的最佳方法是什么?我能想到的唯一解决方案是定义TypeA表有两列 - ParentId和ParentType,其中:

  • ParentId是sql_variant - 能够同时保存数字和字符串
  • ParentType是字符串 - 保留父类型的程序集限定名称.

但是,当我基于sql_variant定义用户数据类型时,它将字段大小指定为固定的8016字节,这似乎很多.

必须有一个更好的方法.任何人?谢谢.

mar*_*c_s 12

一句话:不要

这是非常糟糕的做法 - 列有一个单一数据集是有原因的.不要滥用这个并将一切变成变种.......