создание пользовательских типов данных БД передовой опыт? - PullRequest
1 голос
/ 08 июня 2009

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

Ответы [ 3 ]

5 голосов
/ 08 июня 2009

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

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

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

Марк

2 голосов
/ 09 сентября 2015

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

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

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

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

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

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

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

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

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

1 голос
/ 08 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...