Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Важность применения стандартов SQL при разработке прикладных системСодержание книги
Поиск на нашем сайте
При разработке прикладных систем (программ) взаимодействующих с реляционной базой данных необходимо придерживаться максимальной мобильности в части баз данных Под мобильностью прикладной системы мы понимаем не столько возможность её сравнительно легкого переноса на другую аппаратную платформу, но возможность сравнительно её легкого приспособления к использованию другой СУБД. Когда мы говорим о возможности приспособления прикладной системы к использованию различных СУБД, то, конечно, имеем в виду не произвольные СУБД, а системы, поддерживающие международный стандарт языка SQL. Другими словами, мы предполагаем прямое использование языка SQL при разработке прикладной системы, а также то, что все взаимодействия с системой БД производятся только с использованием этого языка. На самом деле, это несущественно ограничивает возможный набор СУБД. Реализация стандарта SQL вообще говоря означает, что для работы с БД не требуется привлечение никакого другого языка. К сожалению, на практике дела обстоят так, что в разных СУБД, производители которых объявляют их соответствующими стандарту SQL, достаточно часто реализуются немного разные языки (диалекты SQL). Частично это объясняется недостатками самого стандарта, частично - историческими и конъюнктурными обстоятельствами. Принятый в 1992 г. международный стандарт языка SQL был тоже не лишен недостатков, но в то же время являлся существенно более точным и полным, чем SQL/89. SQL/92 не только восполнял недостатки SQL/89, но содержал также много новых свойств. SQL:1999 является техническим определением следующего поколения SQL - стандартного метода общения с ведущими базами данных. Приближающаяся совместная публикация Американским национальным институтом стандартов (ANSI) и Международной организацией по стандартизации (ISO) этого стандарта вводит в употребление новые технологии в области интеграции объектной ориентации и Java. Oracle внес существенный вклад в процесс формулирования стандарта, исполняя обязанности председателя технического комитета ANSI и редактора стандарта ANSI/ISO. Компания Oracle, с самого момента ее создания, около семи лет тому назад, является активным участником группы по созданию стандарта SQL:1999. За это время, работая совместно с такими производителями программного обеспечения баз данных какIBM, Sybase и Informix, Oracle помог сформировать, а затем и пересмотреть стандарт, чтобы он соответствовал изменившимся требованиям нового поколения баз данных для вычислений в Интернет и работы с хранилищами данных. SQL:1999 дает возможность поддерживать объектную ориентацию, включая определенные пользователем типы с одиночным наследованием, динамические методы и полную инкапсуляцию. В системах объектно-реляционных баз данных, например, Oracle8 i, эти возможности уже реализованы. Объектная модель SQL:1999 очень похожа на объектную модель Java, что сильно облегчает совместное использование двух этих языков. Новая часть стандарта SQL:1999, которую планируется опубликовать в 2000 году, позволяет включать операторы SQL в Java-программы, в то время как другие, еще готовящиеся возможности, позволят использовать методы Java в коде SQL Формальное название стандарта SQL - это ISO/IEC 9075 "Database Language SQL" (Язык баз данных SQL). Время от времени выпускается пересмотренная версия этого стандарта; наиболее свежая была выпущена в 2003 году. Эта версия известна как ISO/IEC 9075:2003 или просто как SQL:2003. Предыдущие версия назывались SQL:1999 и SQL92. Каждая версия замещает предыдущую, так что требования соответствия стандарту более ранних версий не имеют официальной силы. Разработка PostgreSQL имеет целью достижение совместимости с последней официальной версией стандарта, где такая совместимость не противоречит традиционным возможностям или здравому смыслу. Проект PostgreSQL не был представлен в Рабочей Группе ISO/IEC 9095 во время подготовки SQL:2003. Но несмотря на это, многие из возможностей, требуемых по стандарту SQL:2003 уже поддерживаются PostgreSQL, хотя иногда и с небольшими отличиями в синтаксисе или функции. Дальнейшее сближение со стандартом можно ожидать в следующих выпусках. SQL92 определяет три списка возможностей по достигнутой совместимости: Entry, Intermediate и Full (Начальная, Промежуточная и Полная). Большинство СУБД претендующих на совместимость со стандартом SQL, соответствовали только уровню Entry, так как полный список возможностей для уровней Intermediate и Full был или слишком объёмный или приводил к конфликту с существующим поведением СУБД. Начиная с SQL:1999 определяет большой список отдельных возможностей, в отличие от неэффективного широкого разделения на три уровня в SQL92. Большой подсписок этих возможностей представлят собой "Core" (основные) возможности, каждая из которых должна поддерживаться совместимой со стандартом реализацией SQL. Оставшиеся возможности являются просто необязательными. Некоторые необязательные возможности группируются вместе в форме "пакетов", на соотвествие с которыми могут претендовать реализации SQL. Стандарт SQL:2003 также разбит на несколько частей. Каждая часть имеет краткое название. Заметим, что эти части пронумерованы непоследовательно. · ISO/IEC 9075-1 Framework (SQL/Framework) · ISO/IEC 9075-2 Foundation (SQL/Foundation) · ISO/IEC 9075-3 Call Level Interface (SQL/CLI) · ISO/IEC 9075-4 Persistent Stored Modules (SQL/PSM) · ISO/IEC 9075-9 Management of External Data (SQL/MED) · ISO/IEC 9075-10 Object Language Bindings (SQL/OLB) · ISO/IEC 9075-11 Information and Definition Schemas (SQL/Schemata) · ISO/IEC 9075-13 Routines and Types using the Java Language (SQL/JRT) · ISO/IEC 9075-14 XML-related specifications (SQL/XML) PostgreSQL реализует только части 1, 2 и 11. Часть 3 похожа на ODBC интерфейс, а часть 4 похожа на язык программирования PL/pgSQL, но в этом случае точное соответствие не планировалось и не проверялось. PostgreSQL поддерживает большинство главных возможностей SQL:2003. Из свыше 164 обязательных возможностей, требуемых для полной совместимости "Core", PostgreSQL соответствует по крайней мере 150. Кроме того, существует длинный список поддерживаемых необязательных возможностей. Возможно это и не имеет значение, но в момент написания этих слов, ни одна текущая версия, ни одной СУБД, не соответствует полностью "Core" SQL:2003.
Тема 7: SQL – операции определения данных (DDL) Введение Изучение языка SQL мы будем проводить на примере диалекта используемого в СУБД MySQL. При этом по возможности мы будем отмечать, что та или иная возможность является расширением, реализованным в MySQL и отсутствует в стандарте. Дальнейший материал во многом является переводом документации MySQL. Типы данных MySQL поддерживает несколько типов столбцов, которые можно разделить на три категории: числовые типы данных, типы данных для хранения даты и времени и символьные (строковые) типы данных. Вначале дадим обзор всех возможных типов и приведём требования по хранению для каждого типа столбца, затем опишем более подробно по каждой категории свойства типов. Ниже перечислены типы столбцов, поддерживаемые MySQL. В описаниях используются следующие обозначения:
Квадратные скобки (‘[’ и ‘]’) указывают группы необязательных признаков (параметров). Предупреждение: следует помнить, что при выполнении вычитания между числовыми величинами, одна из которых относится к типу UNSIGNED (без знака), результат будет беззнаковым! Целые типы данных TINYINT[(M)] [UNSIGNED] [ZEROFILL] Очень малое целое число. Диапазон со знаком от BIT, BOOL Являются синонимами для TINYINT(1). SMALLINT[(M)] [UNSIGNED] [ZEROFILL] Малое целое число. Диапазон со знаком от MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] Целое число среднего размера. Диапазон со знаком от -8388608 до 8388607. Диапазон без знака от 0 до 16777215. INT[(M)] [UNSIGNED] [ZEROFILL] Целое число нормального размера. Диапазон со знаком от -2147483648 до 2147483647. Диапазон без знака от 0 до 4294967295. INTEGER[(M)] [UNSIGNED] [ZEROFILL] Синоним для INT. BIGINT[(M)] [UNSIGNED] [ZEROFILL] Большое целое число. Диапазон со знаком от -9223372036854775808 до 9223372036854775807. Диапазон без знака от 0 до 18446744073709551615. Действительные числа FLOAT(точность) [UNSIGNED] [ZEROFILL] Число с плавающей точкой. Атрибут точности может иметь значение <=24 для числа с плавающей точкой обычной (одинарной) точности и между 25 и 53 - для числа с плавающей точкой удвоенной точности. Следует отметить, что использование типа данных FLOAT может привести к неожиданным проблемам, так как все вычисления в MySQL выполняются с удвоенной точностью. Данный синтаксис обеспечивает совместимость с ODBC. FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] Малое число с плавающей точкой обычной точности. Допустимые значения: от DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] Число с плавающей точкой удвоенной точности нормального размера. Допустимые значения: от -1,7976931348623157E+308 до -2,2250738585072014E-308, 0, и от 2,2250738585072014E-308 до 1,7976931348623157E+308. Если указан атрибут UNSIGNED, отрицательные значения недопустимы. Атрибут M указывает количество выводимых пользователю знаков, а атрибут D - количество разрядов, следующих за десятичной точкой. DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL] Данные обозначения являются синонимами для DOUBLE.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] “Неупакованное” число с плавающей точкой. Ведет себя подобно столбцу CHAR, содержащему цифровое значение. Термин “неупакованное” означает, что число хранится в виде строки и при этом для каждого десятичного знака используется один символ. Разделительный знак десятичных разрядов, а также знак ‘-’ для отрицательных чисел не учитываются в M (но место для них зарезервировано). Если атрибут D равен 0, величины будут представлены без десятичного знака, т.е. без дробной части. Максимальный интервал значений типа DECIMAL тот же, что и для типа DOUBLE, но действительный интервал для конкретного столбца DECIMAL может быть ограничен выбором значений атрибутов M и D. Если указан атрибут UNSIGNED, отрицательные значения недопустимы. Если атрибут D не указан, его значение по умолчанию равно 0. Если не указан M, его значение по умолчанию равно 10. Заметим, что для хранения точных дробных чисел рекомендуется использовать столбцы типа DECIMAL, а не FLOAT, так как в столбцах типа DECIMAL данные хранятся без округления.
Типы даты и времени
DATE Дата. Поддерживается интервал от '1000-01-01' до '9999-12-31'. MySQL выводит значения DATE в формате 'YYYY-MM-DD', но можно установить значения в столбец DATE, используя как строки, так и числа.
DATETIME Комбинация даты и времени. Поддерживается интервал от '1000-01-01 00:00:00' до '9999-12-31 23:59:59'. MySQL выводит значения DATETIME в формате 'YYYY-MM-DD HH:MM:SS', но можно устанавливать значения в столбце DATETIME, используя как строки, так и числа.
TIMESTAMP[(M)] Временная метка. Интервал от '1970-01-01 00:00:00' до некоторого значения времени в 2037 году. MySQL выводит значения TIMESTAMP в форматах YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD или YYMMDD в зависимости от значений M: 14 (или отсутствующее), 12, 8, или 6; но можно также устанавливать значения в столбце TIMESTAMP, используя как строки, так и числа. Столбец TIMESTAMP полезен для записи даты и времени при выполнении операций INSERT или UPDATE, так как при этом автоматически вносятся значения даты и времени самой последней операции, если эти величины не введены программой. Можно также устанавливать текущее значение даты и времени, задавая значение NULL. Аргумент M влияет только на способ вывода столбца TIMESTAMP; для хранения его значений всегда используется 4 байта. Следует учитывать, что столбцы TIMESTAMP(M), где M равно 8 или 14, представляют собой числа, в то время, как столбцы TIMESTAMP(M) с иным значением аргумента M являются строками. Это убеждает, что можно надежно сделать дамп и восстановить таблицу с этими типами столбцов!
TIME Время. Интервал от '-838:59:59' до '838:59:59'. MySQL выводит значения TIME в формате 'HH:MM:SS', но можно устанавливать значения в столбце TIME, используя как строки, так и числа. YEAR[(2|4)] Год в двухзначном или четырехзначном форматах (по умолчанию формат четырехзначный). Допустимы следующие значения: с 1901 по 2155, 0000 для четырехзначного формата года и 1970-2069 при использовании двухзначного формата (70-69). MySQL выводит значения YEAR в формате YYYY, но можно задавать значения в столбце YEAR, используя как строки, так и числа. Строковые типы данных [NATIONAL] CHAR(M) [BINARY] Строка фиксированной длины, при хранении всегда дополняется пробелами в конце строки до заданного размера. Диапазон аргумента M составляет от 0 до 255 символов (от 1 до 255 в версиях, предшествующих MySQL 3.23). Концевые пробелы удаляются при выводе значения. Если не задан атрибут чувствительности к регистру BINARY, то величины CHAR сортируются и сравниваются как независимые от регистра в соответствии с установленным по умолчанию алфавитом. Атрибут NATIONAL CHAR (или его эквивалентная краткая форма NCHAR) представляет собой принятый в ANSI SQL способ указания, что в столбце CHAR должен использоваться установленный по умолчанию набор символов (CHARACTER). В MySQL это принято по умолчанию. CHAR является сокращением от CHARACTER. MySQL позволяет создавать столбец типа CHAR(0). В основном это полезно, если необходимо обеспечить совместимость с некоторыми старыми приложениями, которые зависят от наличия столбца, но реально эту величину не используют. Кроме того, такая возможность может очень пригодиться в случае, если необходим столбец, который может содержать только 2 значения, а именно CHAR(0) (т.е. столбец, который не определен как NOT NULL, занимает только один бит и принимает только 2 значения: NULL или ""). CHAR Это синоним для CHAR(1).
[NATIONAL] VARCHAR(M) [BINARY] Строка переменной длины. Примечание: концевые пробелы удаляются при сохранении значения (в этом заключается отличие от спецификации ANSI SQL). Диапазон аргумента M составляет от 0 до 65 535 символов (от 1 до 255 в версиях, предшествующих MySQL Version 4.0.2). Если не задан атрибут чувствительности к регистру BINARY, то величины VARCHAR сортируются и сравниваются как независимые от регистра. Термин VARCHAR является сокращением от CHARACTER VARYING.
TINYBLOB, TINYTEXT Столбец типа BLOB или TEXT с максимальной длиной 255 (2^8 - 1) символов.
BLOB, TEXT Столбец типа BLOB или TEXT с максимальной длиной 65535 (2^16 - 1) символов.
MEDIUMBLOB, MEDIUMTEXT Столбец типа BLOB или TEXT с максимальной длиной 16777215 (2^24 - 1) символов
LONGBLOB, LONGTEXT Столбец типа BLOB или TEXT с максимальной длиной 4294967295 (2^32 - 1) символов. Следует учитывать, что в настоящее время протокол передачи данных сервер/клиент и таблицы MyISAM имеют ограничение 16 Мб на передаваемый пакет/строку таблицы, поэтому пока нельзя использовать этот тип данных в его полном диапазоне.
|
||||
Последнее изменение этой страницы: 2016-12-27; просмотров: 202; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.83.202 (0.008 с.) |