Форум FAQ О команде
Поиск по сайту:
 
Sybase
Sybase ASA  
Sybase ASE  
Sybase IQ  
Sybase PowerDesigner  
Sybase PowerBuilder  

Продукты
Наши продукты  
Продукты партнеров портала  

Сообщества
Alef community  

Меню
Регистрация  
Почта  

Вход

Рассылка
Рассылка 'РСУБД Sybase ASA 9 - мощность, легкость и надежность'
Почтовая рассылка
"Технологии обработки данных компании Sybase"


Статистика
Яндекс цитирования

Rambler's Top100
Находится в каталоге Апорт

Главная -> Рассылка
Выпуск 3

Выпуск 3

« РСУБД Sybase ASA 9 - мощность, легкость и надежность »

Рассылка N 3

Здравствуйте, уважаемые коллеги. Я продолжаю выпуск рассылки и поздравляю всех с прошедшим праздником - Днем конституции. Начиная с этого выпуска рассылки, я проведу краткий тур по основным различиям между объектами БД ASA и других РСУБД, а также отличий от ANSISQL.

Содержание рассылки:

  • Стандартные и пользовательские типы данных

  • Локальные и глобальный счетчики, код базы данных

  • Глобальные и локальные временные таблицы

Стандартные и пользовательские типы данных

Как и во всех СУБД в ASA существует 2 вида типа данных - встроенные (стандартные) и пользовательские (domain или user-defined data type). Встроенные типы в целом соответствуют стандартам ANSI SQL, поэтому в данной рассылке будут описаны только их отличия от стандарта ANSI и других СУБД.

Текстовые типы данных:

Основное, на что стоит обратить внимание в текстовых типах данных, так это на отсутствие возможности указания разных национальных кодировок в пределах одной БД. Кодировка национальных символов поддерживается на уровне кодировочной таблицы, заданной для всей БД при ее создании (так же ее можно изменить с помощью специальной утилиты, входящей в состав ASA). В BOL есть дополнительные рекомендации, как поддерживать внутри одной БД текстовые поля с различными национальными кодировками, однако в основном все сводится к тому, что клиенты должны в качестве кодовой страницы ставить ANSI. Кроме того, в ASA есть специальные опции управления работой с национальными символами (указание кодовой страницы для сортировки, включение/отключение проверок вхождения текста в установленную кодовую страницу и т.д.). Так же отсутствуют специальные текстовые национальные типы (NCHAR, NVARCHAR, NTEXT) – в ASA их аналогами служат стандартные типы CHAR, VARCHAR и TEXT. Для управления контролем длины текстовых данных так же есть специальные опции, позволяющие указать ASA, как реагировать на попытки занести в поле строку с превышающим размером – обрезать размер строки до размера типа или же генерировать ошибку. Все подобные опции мы рассмотрим позже, в соответствующих выпусках рассылок, посвященных опциям баз данных, или же можно посмотреть в BOL следующие опции: ANSI_BLANKS, ON_CHARSET_CONVERSION_FAILURE, SORT_COLLATION, STRING_RTRUNCATION.

Теперь о самих типах данных:

  • CHAR и CHARACTER: стоит обратить внимание, что в ASA данный тип данных отличается от ANSI-типа, в котором его длина является фиксированной и строки меньшего размера, при приведении к данному типу, заполняются пробелами до соответствующего размера типа. В ASA же тип CHAR аналогичен типу VARCHAR и никакого добавления пробелов не происходит. Максимальный размер данного типа может быть 32767 символов.

  • VARCHAR и CHARACTER VARYING: Абсолютно аналогичен типу CHAR.

  • LONG VARCHAR: тип для хранения текста большого объема. Аналог ANSI-типа TEXT, существующего в других РСУБД, однако, в отличие от него, является вполне самостоятельным типом, а не BINARY. Тип с динамическим размером длины строки, т.е. при описании поля этого типа размер не указывается. Максимальная длина строки, которая может храниться в поле такого типа – 2 гигабайта.

  • TEXT: сделан для совместимости с другими РСУБД и на самом деле является доменом, ссылающимся на LONG VARCHAR.

  • UNIQUEIDENTIFIERSTR: является доменом на основе типа CHAR(36). Сделан для совместимости с типом MSSQL UNIQUEIDENTIFIER при совместной с ним работе (для хранения в ASA уникальных идентификаторов существует собственный тип данных - UNIQUEIDENTIFIER).

  • XML: домен, использующийся для хранения и обработки документов XML, основан на типе LONG VARCHAR.

Числовые типы данных:

Особых отличий от стандартов ANSI нет, присутствуют все знакомые типы: TINYINT, SMALLINT, INT, BIGINT, NUMERIC, DECIMAL, REAL, DOUBLE, FLOAT. Для контроля переполнения целых полей посмотрите на опцию ANSI_INTEGER_OVERFLOW.

На что стоит обратить внимание:

  • NUMERIC и DECIMAL: типы для хранения чисел с фиксированным количеством десятичных знаков после целого числа. На самом деле поле этого типа хранится в ASA как целое число, которое автоматически приводится ASA к нужному формату. В опциях БД SCALE и PRECISION можно указать общую и дробную длину числа по умолчанию, которая будет использоваться в типах без указания явной длины и точности или при математических операциях (то есть неявному приведению к данным типам).

  • FLOAT: тип с плавающей точкой и возможностью указания размера точности. В зависимости от указанного размера точности может храниться как REAL или как DOUBLE. Так же в ASA существует опция FLOAT_AS_DOUBLE, позволяющая жестко указать, что FLOAT всегда хранить, как тип DOUBLE.

Денежные типы данных:

Как таковых в ASA денежных типов нет. Для совместимости с другими РСУБД сделано 2 домена: MONEY на основе NUMERIC(19, 4) и SMALLMONEY на основе NUMERIC(10, 4).

Логический тип данных:

Для хранения булевых значений в ASA существует тип данных BIT, который может принимать значения «0», «1» или «NULL».

Типы данных для хранения даты и времени:

Основное отличие от других РСУБД при хранении и обработке этих типов данных в ASA – это расширенное использование типа TIMESTAMP, который по смысловой нагрузке стоит ближе всего к типу DATETIME. Для этих типов данных так же существует множество опций БД, с которыми я рекомендую ознакомиться: AUTOMATIC_TIMESTAMP, DATE_FORMAT, DATE_ORDER, DEFAULT_TIMESTAMP_INCREMENT, FIRST_DAY_OF_WEEK, RETURN_DATE_TIME_AS_STRING, TIME_ZONE_ADJUSTMENT, TIMESTAMP_FORMAT, TRUNCATE_DATE_VALUES, TRUNCATE_TIMESTAMP_VALUES.

Сами типы данных:

  • DATE: тип для хранения даты без времени. Может хранить даты в интервале от 01-01-0001 до 31-12-9999.

  • TIME: тип для хранения времени без даты. Хранит часы, минуты, секунды и миллисекунды в интервале от 00:00:00.00 до 23.59.59.99 .

  • TIMESTAMP: тип для хранения даты и времени. Может хранить дату в интервале от 1600-02-28 23:59:59 до 7911-01-01 00:00:00. Если опция AUTOMATIC_TIMESTAMP выставлена в ON, то полям, добавляемым в таблицы с этим типом, автоматически добавляется в значение по умолчанию функция, возвращающая последнее время изменения записи.

  • SMALLDATETIME и DATETIME: сделаны для совместимости, являются доменами на основе типа TIMESTAMP.

Бинарные типы данных:

  • BINARY и VARBINARY: максимальный размер данных типов до 32767 байт. Храниться как тип CHAR, поэтому в ASA правомерно приведение и сравнение этих типов к типам CHAR даже на основе установленной национальной кодировки БД.

  • LONG BINARY: максимальный размер ограничен только максимальным размером файла БД, т.е. фактически получается, что он ограничен максимальным размером файла в файловой системе ОС.

  • IMAGE: сделан для совместимости с другими РСУБД, является доменом, основанным на типе LONG BINARY.

  • UNIQUEIDENTIFIER: служит для хранения UUID (GUID), является доменом, основанным на типе BINARY(16). Для работы с ним в ASA существуют функции NEWID, UUIDTOSTR и STRTOUUID.

Пользовательские типы (домены):

Самое главное отличие ASA от других РСУБД – в ней нет пользовательских умолчаний и правил и, следовательно, не поддерживаются DML команды CREATE DEFAULT и CREATE RULE, а также системные процедуры, существующие в Sybase ASE и MSSQL: sp_BindDefault и sp_BindRule. Все, что касается умолчаний и правил, описывается при создании домена. Так же на домены можно указать флаг параметра обязательного значение NOT NULL или NULL, и при необходимости в качестве значения по умолчанию указать системную функцию ASA (например, счетчик, текущее время, код активного пользователя и т.д.). Для работы с доменами в ASA существуют команды CREATE DOMAIN и DROP DOMAIN. Для совместимости с Sybase ASE и MSSQL есть системные хранимые процедуры sp_addtype и sp_droptype. Описания доменов хранятся в системной таблице SYSUSERTYPE, а описания стандартных типов данных в SYSDOMAIN. Так же для совместимости с Sybase ASE и MSSQL существует системный вьювер SYSTYPES, возвращающий все типы данных в БД, однако для MSSQL он полностью совместим только с версией 6.5, в более поздних версиях MSSQL присутствуют поля, которые не поддерживаются в ASA.


Локальные и глобальный счетчики, код базы данных

В ASA существует два типа счетчика для организации полей с автоматической генерацией уникального значения (auto increment field): локальные и глобальные. Счетчики могут описываться на типы данных INT, BIGINT и NUMERIC с точностью знаков, равной нулю.

Локальные счетчики абсолютно ни чем не отличаются от аналогичных identity полей других РСУБД. Поле со счетчиком можно описать несколькими способами:

  • Field INT IDENTITY

  • Field INT DEFAULT AUTOINCREMENT

  • Field INT DEFAULT GET_IDENTITY (‘TableName’)

Для локальных счетчиков ASA гарантирует уникальность значений поля внутри таблицы. На одну таблицу нельзя использовать более одного поля-счетчика. Для сброса или переустановки текущего значения счетчика можно использовать системную процедуру sa_reset_identity. В ASA разрешается заносить в поля-счетчики собственные значения. Если они превышают текущее значение счетчика для изменяемого поля, то ASA автоматически устанавливает его значение на максимальное указанное значения для поля. Для генерации динамических нарастающих значений в запросах можно воспользоваться функциями IDENTITY() и NUMBER(). Для получения последнего значения поля-счетчика вставленной записи можно воспользоваться функцией GET_IDENTITY() или глобальной переменной @@IDENTITY. Функция GET_IDENTITY() возвращает новое значение счетчика для указанной таблицы, поэтому ее можно использовать перед вставкой записи или же в SELECT. Переменная @@IDENTITY возвращает последнее вставленное значение в поле-счетчик. Следовательно, ее можно использовать после оператора INSERT для получения последнего вставленного значения. Для разрешения ситуации, когда в триггерах на добавление используются вставки записей в таблицы, в ASA сделана поддержка области видимости для этой переменной, что гарантирует возврат правильного значения @@IDENTITY для всех команд INSERT в самом скрипте и триггерах.

Для организации уникального счетчика в пределах целой базы данных, в ASA существует глобальный счетчик, описываемый как GLOBAL AUTOINCREMENT. На его основе можно легко организовать репликацию данных без использования GUID. Алгоритм работы такого счетчика организован просто и элегантно: каждая база данных ASA имеет опцию GLOBAL_DATABASE_ID с числовым значением, которая фактически является уникальным идентификатором БД и может назначаться по усмотрению проектировщиком БД. Для полей таблиц, описанных как глобальный счетчик БД, ASA определяет ранг значения счетчика по формулам: от (DBID * PartitionSize + 1) по ((DBID + 1) * PartitionSize). Размер интервала (PartitionSize) может указываться как вручную, так и определятся автоматически ASA на основе выбранного типа данных поля для счетчика. Например, если мы укажем размером интервала 1000, то для БД с кодом 3 диапазон допустимых значений для глобального счетчика будет от 3001 до 4000. В итоге мы получаем гарантию уникальности ID каждой записи для каждой таблицы в пределах одной БД в интервале, гарантирующем непересечение значений с другими БД. Для получения последнего вставленного значения следует так же использовать глобальную переменную @@IDENTITY. Если код БД равен значению 2147483647, то ASA выключает глобальный счетчик и при добавлении записи в поля с таким типом записывает NULL. В случае записи в глобальное поле-счетчик значения, превышающего допустимый интервал счетчика для БД, ASA вставить его разрешает, однако значение самого счетчика не переустанавливает – это позволяет нормально проводить двусторонние репликации между различными БД. При переустановке опции GLOBAL_DATABASE_ID в другое значение, счетчик сбрасывается на первое значение в интервале для указанного кода БД.


Глобальные и локальные временные таблицы

Основное отличие ASA от многих других РСУБД – в ней нет понятия временной базы данных TempDB. Однако, как и у других РСУБД, есть возможность создавать локальные и глобальные временные таблицы. Временным таблицам можно назначить определенное поведение при успешном завершении транзакций – полностью очищаться или же сохранять записи далее. Так же для них можно указать опцию NON TRANSACTION, что выключит для них поддержку транзакционной модели работы (т.е. на них не будут действовать команды BEGIN TRAN, COMMIT и ROLLBACK). Операции с темповыми таблицами не логируются, что гарантирует высокую скорость работы с ними. Для ускорения очистки временных таблиц ASA использует команду TRUNCATE TABLE.

Локальные таблицы существуют только в области видимости создавшей их сессии или в пределах блока, в котором было их описание. Особых отличий от локальных временных таблиц других РСУБД нет. Описать локальную временную таблицу можно в WatcomSQL командой DECLARE LOCAL TEMPORARY TABLE, или же в TSQL как CREATE TABLE #ИмяТаблицы.

Глобальные временные таблицы в ASA так же аналогичны глобальным временным таблицам других РСУБД, однако имеют ряд отличий. Например, в отличие от MSSQL, данные в таких таблицах разделены сессиями, т.е. для каждой сессии в такой таблице будут свои данные, невидимые для других сессий. Плюс глобальная временная таблица в ASA не удаляется при отсоединении создавшей ее сессии или при перезагрузке сервера. Фактически, описание ее структуры хранится в самой БД и для каждой подключаемой сессии неявно создается своя временная таблица по этому описанию.

Для получения информации об эффективном применении глобальных и локальных временных таблиц в БД, для тех, кто не знаком с принципами их работы и использования, я рекомендую обратиться к BOL.


В следующей рассылке N 4

  • Особенности уникальных ограничений таблиц

  • Правила на таблицы и поля

  • Связи таблиц и каскадные операции

  • Индексы, уникальные и кластерные индексы


Большое спасибо всем тем, кто принял участие в подготовке рассылки:

  • Наталья Алешина (менеджер московского представительства Sybase)

  • Федор Корюгин (программист)

  • Алексей Орлов (программист)


До встречи в следующей рассылке, с уважением, ASCRUS.

Материалы данной рассылки является собственностью ее автора. При использовании информации из рассылки ссылка на автора обязательна.




Дата публикации: Monday 27 March 2006 16:00:20
Материал прочитан: 28424 раз(а)
[ Назад ]



Продвижение сайтов
Биржа ссылок

Copyright©2005 phpMS. Все права защищены.
hosted on pets-tree

Warning: Unknown: write failed: Disk quota exceeded (122) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/www/rusug-ru/data/bin-tmp) in Unknown on line 0