Подтвердить что ты не робот

Насколько классны пользовательские типы данных в SQL Server?

Являются ли определяемые пользователем типы данных в SQL Server тем, что должен знать и использовать промежуточный пользователь SQL?

Каковы плюсы и минусы использования UDT?

4b9b3361

Ответ 1

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

Проверьте этот вопрос для деталей: Как изменить базовый тип UDT в Sql Server 2005?

Ответ 2

Я не использую UDT на основе кода, потому что я не думаю, что дополнительная сложность гарантирует преимущества. Я использую UDT T-SQL, потому что очень мало дополнительной сложности, так что преимущества стоят усилий. (Поблагодарив Marc_s за указание, что мой оригинальный пост был неполным!)

Что касается UDT на основе кода

Подумайте об этом так: если ваш проект имеет компонент управляемого кода (ваше приложение) и компонент базы данных (SQL Server), какое реальное преимущество вы получаете от определения управляемого кода в базе данных? По моему опыту? Отсутствуют.

Развертывание сложнее, потому что вам нужно будет добавлять сборки в развертывание БД и изменять эти сборки, добавлять файлы и т.д. в SQL Server. Вам также придется включить CLR в SQL Server (неважно, но никто не доказал мне, что это не будет иметь штраф производительности/памяти). В конце концов, у вас будет именно то, что у вас было бы, если бы вы просто разработали это в своем коде приложения. Там может быть некоторое повышение производительности, но это действительно поражает меня как преждевременную оптимизацию - тем более, что я не знаю, страдает ли общая производительность из-за того, что CLR работает против.

Примечание. Я предполагаю, что вы используете SQL Server CLR для определения ваших типов. HLGEM говорит о SQL Server 2000, но я не знаком с 2000 и думал, что у него есть только UDF, а не UDT во внешних DLL (но не цитируйте меня... я действительно не знаком с этим!).

Что касается UDT T-SQL

UDT T_SQL могут быть определены только в SQL (перейдите к "Программируемость | Типы | Пользовательские типы данных" в SQL Server Management Studio). Для стандартных UDT я бы рекомендовал вам освоить их. Они довольно просты и могут сделать ваш DDL более самодокументируемым и могут обеспечить ограничение целостности. Например, я определяю "GenderType" (char (1), не допускающий нулевую ошибку, удерживая "M" или "F" ), который гарантирует, что в поле "Пол" разрешены только соответствующие данные.

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

Когда я изначально ответил на этот вопрос, я исходил из идеи сложных, определенных кодом типов (смахивает ладонью на лоб). Итак... спасибо Марку.

Ответ 3

Про пользовательских типов достаточно хорошо рассмотрен Алексом Пападимулисом. Здесь хорошо указаны недостатки.

Я также хотел бы отметить, что функция sp_bindrule устарела, как отмечает сообщение Alex. Я не уверен, когда он устарел, но сейчас. Фактически, правила устаревают в целом.

Если бы я хотел создать тип с ограничением, я бы рассмотрел использование определенного типа таблицы с контрольным ограничением в соответствующих столбцах. Это также дает мне способ создания сложного типа данных.

Ответ 4

Я не могу рекомендовать использование каких-либо специфических функций sql-реализации, которые усложняют работу, когда вы растете из mssql и переходите к другим dbms. Для наших dwh dbs мы начали с mssql, мигрировали в oracle и с прошлого года закончили hp vertica.

Ответ 5

Лично, в мире .NET, SQL Server - это кошачий мяуканье, на мой взгляд. Visual Studio имеет SLEW инструментов, которые интегрируются с SQL Server. Вы можете запускать запросы, строить таблицы и т.д. Прямо из ID2 VS2013. Вы также можете создать проект базы данных SQL Server в VS2013 для управления всей базой данных и настройки публикации, чтобы опубликовать ее на dev/production servers, что является мечтой для базы данных, на которой работают несколько разработчиков, поскольку она позволяет вам проверять базу данных в исходном состоянии контроль.

Я думаю, что быть в С#, на Windows/Windows Server и не использовать SQL Server - это потеря производительности/производительности.

Как таковой, я думаю, что он не использует возможности UDT и UDF. Они в высшей степени удивительны и позволили мне сделать некоторые интересные вещи.

например. У меня есть сервер WebSocket, который поддерживает соединения из HTML 5 от клиентов WebSocket, и у меня есть определенные пользователем функции в sql, так что мои обновления/удаления/вставки таблиц могут уведомлять связанные клиенты об изменениях.

У меня также есть UserDefinedType, который автоматически управляет Grabbing Files из базы данных.

например. у нас есть таблица двоичных файлов с FileID, FileName и т.д. Затем у меня есть UDT, который я могу использовать в других таблицах для ссылки на файлы. UDT имеет методы для извлечения файлов из таблицы SQL и их кеширования.

например. если кешированный файл UDT (на диске) синхронизирован с версией в строке данных, тогда он загружает файл из кеша, в противном случае он выполняет операцию sql для получения файла, а затем кэширует его в следующий раз, когда он запрашивает, Кэш настраивается и будет потреблять X-пространство и хранить последние файлы доступа в кеше. Например. если кеш заполнен, он удаляет самые старые кешированные файлы, чтобы освободить место для новых. Наш кеш также находится на SSD.