Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалочки.doc
Скачиваний:
20
Добавлен:
24.09.2019
Размер:
493.06 Кб
Скачать

47. Диалекты базы данных FireBird.

Выбор диалекта БД для СУБД Firebird очень важен. Диалект 1 и Диалект 3 отличаются:

  • Д3 позв-ет исп-ть расширенный набор типов д., (ВigInt – 64 разряда), типы для работы с датой и временем DATE и TIME.

  • Д3 различает регистр идентификаторов, если идентификатор заключён в двойные кавычки. Table1 и TABLE1 в обоих диалектах будут равнозначны, а вот “Table1” и “TABLE1” (TABLE1) сервер будет интерпретировать как разные идентификаторы.

  • Д3 не поддерживает неявное приведение типов данных (как в д1). Например, в Д1 выражение ‘25’+5 корректно, в результате получим 30. В Д3 это выр. вызовет ошибку несоотв-вия типов.

  • В Д3 двойные кавычки применяются только для обозначения идентификаторов (названия таблиц), а одинарные – для строковых констант. В Д1 строковые константы можно заключать как в одиночные, так и в двойные кавычки.

  • В Д3 используются новые ключевые слова (зарезервированные слова): COLUMN, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DAY, EXTRACT, HOUR, MINUTE, MONTH, SECOND, TIME, TIMESTAMP, WEEKDAY, YEAR, YEARDAY.

  • Арифметические операции в д3 взяты из стандарта SQL-92. Например, деление целого на целое в д3 возвращает усечённое целое, в то время как в д1 оно вернёт число с плавающей точкой двойной точности.

  • Генераторы в д3 могут иметь тип bigint (64-битовые целые числа), а в д1 генераторы – 32-битовые целые.

  • Сам сервер не имеет диалекта – диалект БД является атрибутом БД. Он является интерфейсом клиента, который определяет, какой набор возможностей запрашивается у БД.

При выборе диалекта:

  • выбираем Д3, если проектируется БД для приложения, кот. будет использовать только современные библиотеки прямого доступа к InterBase/FireBird, кот. полностью поддерживают Д3.

  • Д1, если важна совместимость с более ранними библиотеками доступа к InterBase/FireBird

  • Диалект 2 существует, но используется в качестве промежуточного этапа при миграции с Д1 на Д3.

48. Типы данных с фиксированной точкой.

В Firebird эти типы: NUMERIC и DECIMAL. Каждый тип объявляется как TYPE (P, S), Р -количество значащих цифр, а S – масштаб (количество цифр справа от символа десятичной точки).

Типы NUMERIC и DECIMAL, являются идентичными, кроме того, когда точность <5. NUMERIC не соответствует стандарту SQL-92.

FIREBIRD хранит масштабированное число как тип SMALLINT (16 бит), INTEGER (32 бита) или BIGINT (64 бита) в соответствии с объявленным масштабом (размером точности). Его объявленная точность сохраняется вместе с объявленным масштабом в виде отрицательного множителя масштаба, в виде степени числа 10. Для вывода или для расчётов, оно получается произведением хранимого целого на 10 множитель масштаба.

Например, для столбца, объявленного как NUMERI (4, 3), FIREBIRD сохраняет число в виде SMALLINT. Если вы вводите число 7.2345, FIREBIRD без сообщения округляет самую правую цифру (4) и сохраняет 16-битовое целое 7235 и множитель масштаба -3. Это число будет найдено как 7.235 (7235*10-3).

Числа в формате NUMERIC с точностью < 5 хранятся как SMALLINT (16 разрядов). Числа в формате DECIMAL с точностью < 5 хранятся как INTEGER (32 разряда).

Числа в Диалекте 1 с точностью 10 – 18 хранятся как DOUBLE PRECISION, а в Д3 –BIGINT.

При выполнении деления типов с фиксированной точкой диалекты 1 и 3 ведут себя по-разному.

В Д3, когда оба операнда при операции деления являются типами с фиксированной точкой, FIREBIRD суммирует масштабы обоих операндов для определения масштаба результата (частного).

В Д1 деление всегда создаёт частное типа DOUBLE PRECISION.

Примеры. В д3 DECIMAL (12.3) / DECIMAL (9,2) = DECIMAL (18,5). (Масштабы суммируются.)

В Д3 точность умножения чисел с фиксированной точкой будет равна 18. В Д1 если точность результата равна > 9, то результатом будет DOUBLE PRECISION.

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

В Д3 результат любого сложения или вычитания имеет тип NUMERIC(18, n). В Д1 он имеет тип (9, n), где n – максимальный масштаб операнда.