У меня есть ситуация, когда два объекта одного типа имеют родителей разных типов.
Следующий псевдокод лучше всего объясняет ситуацию:
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 is sql_variant - чтобы иметь возможность хранить как числа, так и строки
- ParentType - строка - чтобы сохранить полное имя сборки родительского типа.
Однако, когда я определил пользовательский тип данных на основе sql_variant, он определил размер поля как фиксированный 8016 байт, что, похоже, слишком много.
Должен быть лучший способ. Кто-нибудь?
Спасибо.