является ли создание пользовательских типов данных db наилучшей практикой?

StackOverflow https://stackoverflow.com/questions/963391

Вопрос

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

Это было полезно?

Решение

В MS SQL Server - идея отличная.Тем не менее, существует БОЛЬШАЯ но к ним:вы не можете изменить их, как только они будут использованы, так как нет ALTER TYPE .... заявление.Это может стать серьезной проблемой.

Подумайте об этом:у вас есть приложение для книжного магазина, которое имеет определяемый пользователем тип ISBN = VARCHAR(10) - работает как шарм.Теперь международный комитет решил увеличить поле ISBN до 13 символов - к сожалению, там нет ALTER TYPE ISBNType..... таким образом, ваш единственный выбор - в основном удалить все столбцы этого типа во всей вашей базе данных, затем воссоздать тип в его новой форме и заново создать все эти столбцы снова.

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

Марк

Другие советы

Немного поздно, но..мои 2 кт.

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

Использование доменов позволяет обнаруживать попытки сохранить почтовый индекс в поле SSN и перехватывать их базой данных во время выполнения (или даже во время компиляции).Это позволит вам применять бизнес-правила в масштабах всей компании там, где они должны применяться:в тот момент, когда данные попадают в хранилище.В любом другом месте это любезность по отношению к пользователю, но именно здесь они абсолютно необходимы для обеспечения того, чтобы их никто не обходил стороной.

Кроме того, UDT, как определено в ANSI SQL: 1999, инкапсулируют методы и могут быть подтипами.Это означает, что определенные изменения в бизнес-правилах, которые касаются ограничений, могут быть изменены в базе данных, даже не касаясь реализации.

Однако...в настоящее время внедренные UDT оставляют желать лучшего.Я даже не уверен, что SQL Server реализует стандарт, как описано, еще меньше уверен в Oracle.И даже если они это сделают, недостатки использования UDT станут очевидны сразу же, как только вы воспользуетесь инструментами BI, ETL или другими довольно простыми инструментами:обычно они не понимают UDT, а даже если и понимают, то не смогут их использовать, потому что большинство основываются на базовых типах (int, char и date / time).

Что касается инструментов отчетности, давайте рассмотрим UDT, который имеет комбинацию полей.Теперь, как ETL-инструмент, не зависящий от базы данных, сможет понять этот тип?Он должен был бы уметь понимать структуру, чтобы отображать ее или использовать для вычислений.И это для каждой поддерживаемой базы данных - сложная задача.И поскольку никто не использует UDTS, они не будут этого делать.Это порочный круг, но нам все равно приходится с этим жить.

Кроме того, поддержка UDT в большинстве баз данных также не так уж хороша.Смена типов может быть довольно сложной задачей.Хотя синтаксис должен быть везде одинаковым, их администрирование не определено в SQL: 1999 и, следовательно, везде разное.Попробуйте изменить владельца UDT в sql server для примера.Раньше это было довольно сложно - не уверен насчет SQL Server 2016, но, учитывая, что UDT не выглядят как основная область, я не ожидаю серьезных улучшений в этой области.

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

Итак:если у вас есть полный контроль над вашей базой данных и все взаимодействие происходит через ваше программное обеспечение, UDTS может быть чрезвычайно полезным.Если нет, то они могут вызвать сильную боль в шее.Какой из них имеет место в вашем сценарии, можете сказать только вы.

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

Лично я ими не пользуюсь, но я их видел.Одна из проблем заключается в том, что клиентский код распознает только базовый тип, IIRC, по крайней мере, для MS SQL Server.И переносимость / поведение в разных версиях.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top