Программирование баз данных MS SQL Server (1084479), страница 11
Текст из файла (страница 11)
В данном случае следует использовать тип данных лчагсьаг (мах) Двоичные данные фиксированной длины с максимальной длиной 8 000 байтов Двоичные данные переменной длины смак- симальной указанной длиной 8 000 байтов, но для обозначения длины можно испольэовать ключевое слово мах, что фактически позволяет определять столбцы типа СОВ, имеющие очень большой объем (до 2" байтов данных) Этот тип данных является устаревшим и поддерживается в версии ЗОС Зегуег 2005 исключительно дпя обеспечения совмести- мости с предыдущими версиями. В данном случае следует использовать тип данных чагбапагу(иах) Данные типа таблицы, саыв, предназначены прежде всего для использования в работе с результирующими наборами. Как правило, они передаются из пользовательских функций.
Применение данных типа саые в определени- ях таблиц не допускается 48 Глава 1 Окончание табл. Г. 1 размер машинного представления в байтах Обозначение типа данных Класс Описание и (или) пояснение зо1 чагсапС Тип данных зч1 час1апс мажет рассматри- ваться как приближенный аналог типа данных ча 1апс языка ЧВ и некоторых типов данных С++, посуществуданные типа зч1 чагсьпс представляют собой контейнер, который обе- спечивает хранение большинства других типов данных ВОС Зепгес Из этого следует, что тип данных зц1 час1апс может использоваться, если необходимо представить в одном столбце или функции нескольких разных типов дан- ных.
На, в отличие от типа данных уагзап. языка ЧВ, при использовании типа данных зч1 час1апс языка Т-ВОС требуется явно при- водить эти данные к более определенному типу Данные этого типа не подчиняются тай же классификации, что и данные других классов Определяется по особому принципу кп1 Символьные данные Определяется отдельно Определяет символьное поле как содержащее данные ХМс. Тип данных хп1 обеспечивает проверку данных по схеме ХМС и применение специальных функций, предназначенных для обработки кода ХМС Большинство типов данных, представленных в табл. 1.1, имеют эквивалентные им типы данных в других языках программирования. Например, тип данных зпс в СУБД $9). Бегтег является эквивалентным типу данных ьопСт в языке Увша! Ваз!с, а также эквивалентен типу данных хпс в версиях языка С++, применяемых в болыпинстве комбинаций операционных систем и компиляторов.
В С))ЗД ВЕЗ;-"ВЕ(УВТ НЕ П)ЗЕДУСМРТРЕНП'ПРВМЕНЕИ)ЗЕ ЧттбЯОВЫХ ТтВПОВ ДЕННЫХ 6ВЗ аНаКа, Вообще говоря, типы данных ЯЯЕ Яегуег применяются в основном так же, как и в большинстве других современных языков программирования. Использование операции сложения к числам приводит к получению суммы, а после применения операции сложения к строкам происходит их конкатенация. Если в операции используются или присваиваются переменные или поля с разными типами данных, многие операции припедення данных к общему типу яыполняются неявно (или автоматически), а для большинства других типов необходимо предусмотреть применение явно заданных операций преобразования (при этом должно быть конкретно указано, к какому типу данных должно быть приведено преобразуемое значение). Есть и такие типы данных, между которыми вообще невозможно выполнить преобразование.
На рис. 1.3 приведена таблица, в которой показаны все возможные варианты преобразования данных из одного типа в другой. Если читатель не )чтерен в том, что преобразование данных из одного типа в другой действительно требуется на практике, продемонстрируем такую необходимость на следующем простом примере. Основные сведения о базах данных Бб,дЬ Вегтег 49 Ф Явное преобразование й Неявное преобразование О Преобразование не довускается * Урабуш применения Функнии Сабт для вредотвращения потери тонностм или масштаба, которая может возникнута прн неявмтм преобразовании ув неРвные преобразования меаду типами лапник хи с всддераи вартел, топив если искодный тив или резулынруюший тип представляют побои нетипизирова нные данные юп~ В противном слу ае преобразование лолинобытаявным дюкс.
1З. Варианты преабРазованил данных ТВЕ. из одного типа в фугой Предположим, что необходимо вывести фразу "Тобау'5 басе 15 Н/Н/НФ$", в которой вместо подстроки Н/Н/НН должна быть приведена текущая дата. Безусловно, можно попытаться применить следующий оператор: 5ЕЬЕСТ 'Тобау''В баСВ гз ' е ЕЕТПАТЕ П Операторы языка ТгапзосьбО/.
подобные и/зиведенному вьиае, будут рассматрив тася более пофобно в ходе дальнейшего изложения матебиола настоякзей книги, но читателю должно бьпяь вполне очевидно, к каким /усуультатам п~иводит выполнение и/заведенного опе/зато/уа. Проблема заключается в том, что попытка выполнить этот оператор приводит к получению следующего результата: Мгд 241, Сече1 1б, згаге 1, мыле 1 зупСах еггог сопчегггпд баСВСгще Тгощ соагасгег зггупо.
50 Глава 1 Очевидно, что вместо строки с текущей датой получено сообщение об ошибке, поэтому попытаемся преобразовать дату с помощью функции сО)(чеет (); ККЬКСТ "тес(ау'э с)асе Тз " э СОНУКат( Ь (12), аКТОАТК(),101) При этом должны быть получены примерно такие данные: тес)ау'з с)аье 1з 01/01/2000 (1 гса(з) аггессео) Оказывается, что типы данных с обозначением даты и времени, в частности, возвращаемые функцией ОЕТРАТЕ (), не могут быть явно преобразованы в данные строкового типа для конкатенации, например, со строкой "Тооау' з пасе 1з", но на практике подобные преобразования приходится выполнять довольно часто. К счастью, в СУБД БОБ Яеггег предусмотрены функции САЕТ и СО)(ЧЕРТ (), которые позволяют обеспечить взаимное преобразование данных многих разных типов. Функции САЕТ и СО)(ЧЕРТ () будут рассматриваться в одной из следующих глав.
Короче говоря, в СУБД ЬО) Беггег типы данных применяются в основном для той же цели, что и в других вариантах среды программирования. Использование типов данных способствует предотвращению появления программных ошибок, поскольку типы данных помогают добиваться того, чтобы обрабатываемые данные обладали именно теми характеристиками, которые были приняты согласно исходному предположению, применять для их обработки соответствующие методы и обеспечивать получение требуемых результатов. Неопределенные данные Иногда на практике возникают такие обстоятельства, в которых при вводе строки отсутствуют данные, относящиеся к конкретному полю.
Причиной этого может стать, в частности, то, что соответствующее значение просто неизвестно. В качестве примера можно указать такую ситуацию, что в базе данных компании имеется такая таблица, в отдельных строках которой ведется регистрация информации об итоговых результатах производственной деятельности за каждый год. А теперь предположим, что в один из столбцов, а именно, Регсепгбгонг)Ь записываются данные (в процентах) о приросте за текущий год по сравнению с предыдущим. Но при вставке в базе данных самой первой строки данные об итогах за предыдущий год отсутствуют, поэтому невозможно установить, какое значение следует ввести в поле Регсепесгоне?ь В частности, невозможно просто ввести в этом поле нулевое значение, поскольку это означало бы, что итоговый прирост за год был равен нулю, а это может не соответствовать действительности.
Для представления неопределенных данных используются специальное Х1Ш: значение. Следует учитывать, что ХС( 1:значение не имеет какого-то конкретного выражения, поскольку по определению подразумевается, что ХС(.(:значение свидетельствует о том, что данные, вместо которых оно применяется, не определены, или, возможно, не применимы. Основные сведения о базах данных БЯЕ Бегтег 51 Идентификаторы объектов, применяемые в СУБД ЗО~ Зеюег Выше в данной главе уже был приведен значительный объем информации об объектах, применяемых в СУБД КОЕ Яеггег. Кроме того, автор уже высказал свое мнение о том, какими должны быть правильно выбранные имена столбцов.
А в настоящем разделе приведены определенные сведения о способах именования объектов ЗО1. Зеггег. Именуемые объекты ЗО~ Зепгег По существу, в СУБД ЗОБ Яегчег имена приобретают все объекты. Частичный список именуемых объектов Я~1. Яеггег приведен ниже. О Хранимые процедуры. О Таблицы. О Столбцы.
Представления. С3 Правила. ГЗ Ограничения целостности. О Применяемые по умолчанию значения. О Индексы. О Файловые группы. О Триггеры. О Базы данных. О Серверы. О Пользовательские функции. О Учетные записи. О Р О Каталоги полнотекстового поиска. О Файлы. Определяемые пользователем типы. Приведенный список является далеко не полным. Большинство объектов, которые только можно себе представить, кроме строк (которые в действительности не являются объектами), должны иметь имя. Задача разработчика заключается в том, чтобы имя, присвоенное им каждому объекту, было полезным и удобным. Правила именования объектов Как уже отмечалось выше, правила именования объектов ЯОЕ Зеггег являются не слишком строгими; в именах допускается использовать пробелы и даже ключевые слова.
Однако, как и большинство других свобод, свобода выбора имени оборачивается тем, что можно допустить злоупотребление и столкнуться с неприятностями. Основные правила именования объектов приведены ниже. сз Имя объекта должно начинаться с любого символа, определенного в спецификации 13п1соде 2.0 как буква. К ним относятся, в частности, буквы А — ~ и а-з, которые используются в письменных языках западных стран. Должны ли 52 Глава 1 прописные и строчные буквы рассматриваться как различные, зависит от настройки конфигурации сервера, но в качестве начальной буквы имени объекта допускается использовать и те и другие.
Не считая обязательного требования об использовании буквы в первом символе имени объекта, больше нет практически никаких ограничений в части выбора остальных символов имени; допустимыми являются почти любые символы. 11 Имена обычных объектов могут достигать длины 128 символов, а временных объектов — 116 символов. 11 Любые имена, совпадающие с ключевыми словами СУБД БО) Кегъег или содержащие пробелы, должны быть заключены в двойные кавычки ("") или квадратные скобки ( [) ).
Состав слов, рассматриваемых как ключевые, зависит от уровня совместимости, установленного для базы данных. Следует учить~вать, что двойные кавычки допускаетея использовать в качестве разграничителя для имен столбцов, только если была задана соответствующая опция е помошью команды ЕЕт ОООТЕР 10Е1111Е1ЕВ ОЕ. Таким об)зовом, зърименение квадратных скобок позволяет исключить ве)зоятность яаруыения в рабозп», связанного с пмм, что пааъаовазпеъи примтслют неп(завил«кую настройку. Приведенные выше правила известны под общим названием правил определения идентификато)зов и распространяются на любые объекты, для которьлх в программном обеспечении ЯО) 5егчег используются имена.