Может ли CLR UDT быть ПК на столе? - PullRequest
0 голосов
/ 15 мая 2019

Можете ли вы иметь свой собственный clr udt в качестве первичного ключа на столе?Кажется, вы не можете - я добавил интерфейсы для двоичной сериализации и сопоставления, но при использовании типа в ограничении PK я получаю сообщение об ошибке: тип не может использоваться в первичном ключе.

Итак, возможно ли это привсе, и если да, то какими атрибутами мне нужно украшать мой тип, чтобы разрешить его?

* редактировать: нашел ключ к моей проблеме: из https://docs.microsoft.com/de-de/sql/t-sql/statements/create-index-transact-sql?view=sql-server-2017 раздел "столбцы": вы можетесоздавать индексы для столбцов пользовательского типа CLR, если тип поддерживает двоичное упорядочение.

Таким образом, двоичное упорядочение должно быть «истинным» (мое было ложным).Теперь стоит вопрос: как сериализовать ваш тип (коллекцию строк), чтобы он стал бинарным или заказываемым?

- Справочная информация

Причина, по которой я хочу это сделать, может быть и хужепродолжение плохой первоначальной идеи: наша текущая реализация БД использует составные бизнес-ключи.Компоненты составного ключа находятся не во «многих» столбцах, а объединены с разделителями в одном столбце.Например, «jeep-red-ny» может быть основным ключом для строки, описывающей джип, окрашенный в красный цвет, который базируется в Нью-Йорке.Колонка, в которой содержится эта конкатенация, - просто varchar (50).

Мне было интересно, если использование «выделенного» типа для размещения этих трех аспектов (тип транспортного средства, цвет, город) делает его немного лучше.

Полагаю, лучшим вариантом было бы отбросить эти сцепленные ключи и использовать вместо них "обычные составные" ключи в отдельных столбцах.Наличие конкатенации хорошо, так как весь ключ представляет собой один столбец, нет сомнений, что принадлежит ему, а что нет.UDT дает и то и другое: содержится в одном столбце, но доступ ко всем компонентам.

...