
- •1. История развития баз данных
- •3. Модели данных [1]
- •1. История развития баз данных
- •1.1. Файлы и файловые системы
- •1.2. Базы данных на больших эвм
- •1.3. Эпоха персональных компьютеров
- •1.4. Распределенные базы данных
- •1.5. Особенности настоящего периода:
- •2. Проблемы обработки информации
- •Основные функции субд
- •Типовая организация современной субд
- •3. Модели данных [1]
- •3.1. Системы управления файлами
- •3.2. Иерархические базы данных
- •3.3. Сетевые базы данных
- •3.4. Реляционные базы данных
- •Недостатки реляционных систем
- •3.5. Объектно-ориентированные базы данных
- •Преимущества и недостатки оосубд [8, с.817]
- •3.6. Объектно-реляционные базы данных
- •4. Реляционная модель данных [2]
- •5. Операции над отношениями
- •5.1. Теоретико-множественные операции реляционной алгебры
- •5.1.1 Объединение отношений
- •5.1.2. Пересечение отношений
- •5.1.3. Разность отношений
- •5.1.4. Расширенное декартово произведение
- •5.2. Специальные операции реляционной алгебры
- •5.2.1. Операция фильтрации
- •5.2.2. Операция проектирования
- •5.2.3. Операция условного соединения
- •5.2.4. Операция деления
- •5.2.5.Примеры использования операций реляционной алгебры
- •Целостность [8]
- •6. Проектирование бд Жизненный цикл бд
- •Проектирование бд
- •Проектирование бд с учетом конкретной архитектуры Архитектура клиент-сервер
- •Структура сервера базы данных
- •Проектирование распределенных бд
- •11.1. Концепции распределенных баз данных
- •Этапы проектирования реляционной базы данных
- •6.1. Разработка технического задания
- •6.2. Разработка структуры бд
- •6.3. Нормализация
- •6.3.1. Первая нормальная форма
- •6.3.2. Вторая нормальная форма
- •6.3.3. Третья нормальная форма
- •6.3.4. Нормальная форма Бойса-Кодда
- •6.3.5. Четвертая и пятая нормальные формы
- •6.3.6. Денормализация
- •Проектирование реляционной базы данных на основе декомпозиции универсального отношения (плоской таблицы)
- •7.Язык запросов sql (Structured Query Language)
- •7.1. История развития
- •7.2. Как работает sql?
- •7.3. Интерактивный и встроенный sql
- •7.4. Типы данных
- •7.6. Оператор выбора select (MySql)
- •7.6.1. Предикаты предложения where
- •7.6.2. Примеры использования оператора select
- •7.6.3. Применение агрегатных функций и вложенных запросов в операторе выбора
- •8. Система управления базами данных (субд) MySql
- •8.1. Преимущества MySql перед другими субд. Недостатки
- •8.2. Инструментарий, поставляемый с MySql
- •8.3. Установка и завершение связи с сервером
- •8.4. Команды sql для MySql. Правила оформления листингов
- •8.5. Основы использования MySql
- •8.5.1. Замечания по организации работ с MySql
- •8.5.2. Программы MySql
- •8.5.2.1. Стандартные опции программ MySql
- •8.5.2.2. Конфигурационные файлы
- •8.5.2.3. Переменные среды
- •8.5.2.4. Клиенты mysql и mysqlc
- •Программирование приложений
- •Использование специализированных библиотек и встраиваемого sql
- •Odbc - открытый интерфейс к базам данных на платформе ms Windows
- •Jdbc - мобильный интерфейс к базам данных на платформе Java
- •9. Администрирование бд
- •9.1. Управление данными на предприятии
- •9.2. Основные функции dba
- •9.3. Администрирование в MySql [1])
- •9.3.1. Обеспечение доступности данных
- •9.3.2. Поддержание целостности данных
- •9.3.3. Подготовка к катастрофе
- •9.3.4. Поддержка пользователей
- •9.3.5. Разработка и внедрение стандартов
- •9.3.6. О хранении данных
- •9.3.6.1. Журнал транзакций
- •9.3.6.2. Журнальные файлы
- •9.3.7. Безопасность
- •9.3.7.1. Схемы привилегий
- •9.3.7.2. Задание привилегий
- •9.3.8. Оптимизация
- •9.3.8.1. Оптимизация запросов
- •9.3.8.2. Оптимизатор запросов
- •9.3.8.3. Выбор типа столбцов и эффективность запросов
- •9.3.8.4. Эффективная загрузка данных
- •9.3.8.5. Оптимизация для администратора
- •10. Транзакции и параллельные вычисления
- •10.1. Параллельные запросы
- •10.2. Транзакции
- •10.3. Уровни изоляции
- •10.4. Выполнение транзакций
- •10.5. Блокировки
- •10.6. Программные блокировки
- •Мониторы транзакций
- •12. Направления и тенденции развития баз данных
- •12.1. Ограничения реляционных систем
- •12.2. Особенности построения информационных хранилищ
- •Что достигается через использование технологии хранилищ данных?
- •Проблемы хранилищ данных
- •12.3. Olap-технология
- •Правила для olap-систем
- •12.3.1. Реляционные olap-системы
- •12.3.2. Многомерные olap-системы
- •12.3.3. Принципы построения многомерной базы данных
- •12.4. Oltp-технологии
- •13. Интеграция субд в среду Web
- •13.1. Публикация бд в Интернете
- •13.1.1. Общие концепции публикации бд в Интернете
- •13.1.2. Технологии публикации бд в Internet.
- •13.2. Сценарии JavaScript, jScript и vbScript
- •13.3. Элементы управления ActiveX
- •13.4. Апплеты и сервлеты Java
- •13.5. Интерфейсы
- •13.5.1. Интерфейсы cgi и WinCgi
- •13.5.2. Интерфейс isapi/nsapi
- •13.5.3. Asp, php, idc/htx-страницы
- •13.5.4. Формирование Web-страниц
- •13.5.5. Интерфейсы ole db, ado, odbc
- •13.6. Статическая публикация бд
- •13.7. Динамическая публикация бд
- •13.9. Протоколы передачи гипертекста
- •13.10. Универсальный указатель ресурсов
- •13.11. Состав и теги html-документа
- •13.15. Двухуровневые Web-приложения
- •13.16. Трехуровневые Web-приложения
- •13.17. Многоуровневые Web-приложения
- •13.18. Характеристики интерфейсов ole db, ado и odbc
- •Список использованной литературы
- •Приложения 1. Типы таблиц, поддерживаемых MySql
- •Приложение 2. Встроенные функции
- •Управляющие функции sql для MySql
- •Статистические функции
- •Математические функции
- •Строковые функции
- •Функции работы с датой и временем
- •Приложение 3. Инструкции языка sql для MySql
- •Приложение 4. Маленькая база для маленькой компании (OpenOffice_MySql) Приложение 5. MySql – начинающим администраторам Приложение 6. О метаданных
7.4. Типы данных
Поля таблиц могут быть заняты значениями разного типа. А разный тип предполагает различную технологию обработки этих значений. Наиболее очевидно логическое различие между числами и текстом. Нельзя поместить числа в алфавитном порядке или вычесть одно слово из другого. Поскольку системы с реляционной базой данных основаны на связях между фрагментами информации, различные типы данных должны понятно отличаться друга от друга, так, чтобы соответствующие процессы и сравнения могли быть в них выполнены.
В SQL это делается с помощью назначения каждому полю типа данных, указывающего на тип значения, которое это поле может содержать. Все значения в данном поле должны иметь одинаковый тип. В таблицах некоторые поля могут содержать строки текста для оценки, другие поля предназначены для номеров. По этой причине в некоторых полях могут существовать ограничения, которые невозможны для других типов полей.
Типы данных SQL
Символьные типы данных. Данные такого типа содержат буквы, цифры и специальные символы. Наборы символов являются специфическими для различных диалектов языка SQL и зависят также от конкретной реализации. Символьная строка может быть определена как имеющая фиксированную или переменную длину:
CHAR или CHAR(n) -символьные строки фиксированной длины. Длина строки определяется параметром n. CHAR без параметра соответствует CHAR(1). Для хранения таких данных всегда отводится n байт независимо от реальной длины строки.
VARCHAR(n) - символьная строка переменной длины. Для хранения данных этого типа отводится число байт, соответствующее реальной длине строки.
Целые типы данных - поддерживают только целые числа (дробные части и десятичные точки не допускаются). Над этими типами разрешается выполнять арифметические операции и применять к ним агрегирующие функции (определение максимального, минимального, среднего и суммарного значения столбца реляционной таблицы).
INTEGER или INT- целое, для хранения которого отводится, как правило, 4 байта. (Замечание: число байт, отводимое для хранения того или иного числового типа данных зависит от используемой СУБД и аппаратной платформы, здесь приводятся наиболее "типичные" значения) Интервал значений от - 2147483647 до + 2147483648
SMALLINT - короткое целое (2 байта), интервал значений от - 32767 до +32768
Помимо указанных типов есть очень малое целое (TINYINT), целое среднего размера (MEDIUMINT), большое целое (BIGINT), имеющие длину, соответственно, 1байт, 3 байта, 8 байт и соответствующие этим длинам диапазоны значений.
Вещественные типы данных - описывают числа с дробной частью.
FLOAT и SMALLFLOAT - числа с плавающей точкой (для хранения отводится обычно 8 и 4 байта соответственно).
DECIMAL(p) - тип данных аналогичный FLOAT с числом значащих цифр p.
DECIMAL(p, n) - аналогично предыдущему, p - общее количество десятичных цифр, n - количество цифр после десятичной запятой.
Денежные типы данных - описывают, естественно, денежные величины. Если ваша система такого типа данных не поддерживает, то используйте DECIMAL(p, n).
MONEY(p, n) - все аналогично типу DECIMAL(p, n). Вводится только потому, что некоторые СУБД предусматривают для него специальные методы форматирования.
Типы даты и времени - используются для хранения даты, времени и их комбинаций. Большинство СУБД умеет определять интервал между двумя датами, а также уменьшать или увеличивать дату на определенное количество времени.
DATE - тип данных для хранения даты.
TIME - тип данных для хранения времени.
INTERVAL - тип данных для хранения временного интервала.
DATETIME - тип данных для хранения моментов времени (год + месяц + день + часы + минуты + секунды + доли секунд).
Двоичные типы данных - позволяют хранить данные любого объема в двоичном коде (оцифрованные изображения, исполняемые файлы и т.д.). Определения этих типов наиболее сильно различаются от системы к системе, часто используются ключевые слова:
BINARY
BYTE
BLOB (BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB – строки с большим двоичным объектом малого, сверхмалого, среднего и большого размера, соответственно).
Последовательные типы данных - используются для представления возрастающих числовых последовательностей.
SERIAL - тип данных на основе INTEGER, позволяющий сформировать уникальное значение (например, для первичного ключа). При добавлении записи СУБД автоматически присваивает полю данного типа значение, получаемое из возрастающей последовательности целых чисел.
В заключение следует сказать, что для всех типов данных имеется общее значение NULL - "не определено". Это значение имеет каждый элемент столбца до тех пор, пока в него не будут введены данные. При создании таблицы можно явно указать СУБД могут ли элементы того или иного столбца иметь значения NULL (это не допустимо, например, для столбца, являющего первичным ключом).
К сожалению, определение типов данных является основной областью, в которой большинство коммерческих программ баз данных и официальный стандарт SQL не всегда совпадают. Стандарт ANSI SQL распознает только данные типа текста (строки) и типа числа (номера), в то время как большинство коммерческих программ используют дополнительные специальные типы. Например, такие как, DATЕ (ДАТА) и TIME (ВРЕМЯ) - фактически почти стандартные типы (хотя точный формат их меняется). Или такие, как MONEY (ДЕНЬГИ) и BINARY (ДВОИЧНЫЕ). MONEY - это специальная система исчисления, используемая компьютерами.
Вся информация в компьютере передается двоичными числами и затем преобразуется в другие системы, чтобы мы могли легко использовать их и понимать.
Сложность числовых типов ANSI можно, по крайней мере, частично, объяснить стремлением сделать встроенный SQL совместимым с рядом других языков.
Два типа чисел ANSI INTEGER (целое число) и DECIMAL (десятичное число), которые можно сокращать как INT и DEC, соответственно, пригодны для решения самых различных прикладных задач. Естественно, что тип INTEGER можно представить как DECIMAL, который не содержит никаких цифр справа от десятичной точки.
Тип для текста CHARACTER (или, сокращенно, CHAR, т.е. символ) относится к строке текста. Поле типа CHARACTER имеет длину, которая определяется максимальным числом символов, вводимых в это поле. Больше всего реализаций имеет также нестандартный тип, называемый VARCHAR (переменное число символов), который является текстовой строкой, способной иметь любую длину вплоть до определенного конкретной реализацией языка максимума (обычно 254 символа). Значения типа CHARACTER и VARCHAR заключаются в одиночные кавычки (например, ‘текст’). Различие между CHARACTER и VARCHAR в том, что CHARACTER резервирует количество памяти для максимальной длины строки, а VARCHAR распределяет память по фактически занятому данными пространству.
Символьные типы включают все печатные символы, включая цифры. Однако, число 1 ‑ не то же самое, что символ ‘1’. Символ ‘1’ - только другой печатный фрагмент текста, не определяемый системой как наличие числового значения 1. Например, 1 + 1 = 2, но ‘1’ + ‘1’ не равняется ‘2’.
Символьные значения сохраняются в компьютере в двоичной форме, но показываются пользователю как печатный текст. Преобразование выполняется в соответствии с форматом, определяемым системой, которую вы используете. Этот формат преобразования будет одним из двух стандартных типов преобразования (возможно, с расширениями), используемых в компьютерных системах:
ASCII-код (используемый во всех персональных и малых компьютерах) и
EBCDIC-код (Расширенный Двоично-Десятичный Код Обмена Информации), используемый в больших компьютерах.
Определенные операции, такие как, например, упорядочение в алфавитном порядке значений поля, будут изменяться вместе с форматом.
В области использования типа, называемого DATE (дата), приходится следить за требованиями рынка, а не ANSI. В системе, которая не распознает тип DATE, можно, конечно, объявить дату как символьное или числовое поле, но это сделает большинство операций значительно более трудоемкими. Необходимо смотреть документацию по пакету программ, который вы будете использовать, чтобы выяснить точно, какие типы данных он поддерживает.
Язык SQL/89 поддерживает следующие типы данных:
CHARACTER(n) или CHAR(n) - символьные строки постоянной длины в n символов. При задании данного типа под каждое значение всегда отводится n символов, и, если реальное значение занимает менее чем n символов, то СУБД автоматически дополняет недостающие символы пробелами;
NUMERIC[(n, m)] - точные числа, здесь n - общее количество цифр в числе, m - количество цифр справа от десятичной точки;
DECIMAL[(n, m)] - точные числа, здесь n - общее количество цифр в числе, m - количество цифр справа от десятичной точки;
DEC[(n, m)] - то же, что и DECIMAL[(n, m)];
INTEGER или INT - целые числа;
SMALLINT - целые числа меньшего диапазона.
Несмотря на то, что в стандарте SQL1 не определяется точно, что подразумевается под типом INT и SMALLINT (это отдано на откуп реализации, указано только соотношение между этими типами данных), в большинстве реализаций тип данных INTEGER соответствует целым числам, хранимым в четырех байтах, a SMALLINT — целым числам, хранимым в двух байтах. Выбор одного из этих типов определяется размером числа;
FLOAT[(n)] - числа большой точности, хранимые в форме с плавающей точкой. Здесь n - число байтов, резервируемое под хранение одного числа. Диапазон чисел определяется конкретной реализацией;
REAL - вещественный тип чисел, который соответствует числам с плавающей точкой меньшей точности, чем FLOAT;
DOUBLE PRECISION специфицирует тип данных с определенной в реализации точностью, большей, чем определенная в реализации точность для REAL.
В стандарте SQL92 добавлены следующие типы данных:
VARCHAR(n) - строки символов переменной длины;
NCHAR(n) - строки локализованных символов постоянной длины;
NCHAR VARYING(n) – строки локализованных символов переменной длины;
BIT(n) — строка битов постоянной длины;
BIT VARYING(n) — строка битов переменной длины;
DATE — календарная дата;
Т1МЕSТАМР(точность) — дата и время;
INTERVAL — временной интервал.
Большинство коммерческих СУБД поддерживают дополнительные типы данных, которые не специфицированы в стандарте. Так, например, практически все СУБД в том или ином виде поддерживают тип данных для представления неструктурированного текста большого объема. Этот тип аналогичен типу MEMO в настольных СУБД. Называются эти типы по-разному, например в ORACLE этот тип называется LONG, в DB2 - LONG VARCHAR, в SYBASE и MS SQL Server — TEXT.
Однако следует отметить, что специфика реализации отдельных типов данных серьезным образом влияет на результаты запросов к БД. Особенно это касается реализации типов данных DATE и TIMESTAMP. Поэтому при переносе приложений будьте внимательны: на разных платформах они могут работать по-разному, и одной из причин может быть различие в интерпретации типов данных.
При выполнении сравнений в операциях фильтрации могут использоваться константы заданных типов. В стандарте определены следующие константы:
Для числовых типов данных определены константы в виде последовательности цифр с необязательным заданием знака числа и десятичной точки. То есть правильными будут константы:
213; - 314; 612.716; + 551.702
Константы с плавающей запятой задаются, как и в большинстве языков программирования, путем задания мантиссы и порядка, разделенных символом Е, например:
2.9Е-4; -134.235Е+7; 0.54267Е-18
Строковые константы должны быть заключены в одинарные кавычки:
'Крылов Ю.Д.'; 'Санкт-Петербург'
В некоторых реализациях, например MS SQL Server и Informix, допустимы двойные кавычки в строковых константах;
"Москва"; "New York"
Однако следует отметить, что использование двойных кавычек может вызвать дополнительные проблемы при переносе приложений на другую платформу, поэтому мы рекомендуем по возможности избегать такого представления символьных констант.
Константы даты, времени и временного интервала в реляционных СУБД представляются в виде строковых констант. Форматы этих констант отличаются в различных СУБД. Кроме того, формат представления даты различен в разных странах. В большинстве СУБД реализованы способы настройки форматов представления дат или специальные функции преобразования форматов дат, как сделано, например, в СУБД ORACLE. Приведем примеры констант в MS SQL Server:
March 15. 1999 Mar 15 1999 3/15/1999 3-15-99 1999 MAR 15
В СУБД ORACLE та же константа запишется как
15-MAR-99
Кроме пользовательских констант в СУБД могут существовать и специальные системные константы. Стандарт SQL1 определяет только одну системную константу USER, которая соответствует имени пользователя, под которым вы подключились к БД.
В операторах SQL могут использоваться выражения, которые строятся по стандартным правилам применения знаков арифметических операций:
сложения (+), вычитания (‑), умножения (*) и деления (/). Однако в ряде СУБД операция деления (/) интерпретируется как деление нацело, поэтому при построении сложных выражений вы можете получить результат, не соответствующий традиционной интерпретации выражения.
В стандарт SQL2 включена возможность выполнения операций сложения и вычитания над датами.
В большинстве СУБД также определена операция конкатенации над строковыми данными, обозначается она, к сожалению, по-разному. Так, например, для DB2 операция конкатенации обозначается двойной вертикальной чертой (||), в MS SQL Server — знаком сложения (+), поэтому два выражения, созданные в разных СУБД, эквивалентны:
'Мг./Mrs. ' || NAME || ' ' LAST_NAME
'Mr./Mrs. ' + NAME + ' ' LAST_NAME
В стандарте SQL1 не были определены встроенные функции, однако в большинстве коммерческих СУБД такие функции были реализованы, и в стандарт SQL2 уже введен ряд стандартных встроенных функций:
BIT_LENGTH(cтрока) — количество битов в строке;
CAST(значение AS тип данных) — значение, преобразованное в заданный тип данных;
CHAR_LENGTH(cтрока) — длина строки символов;
CONVERT(cтрока USING функция) — строка, преобразованная в соответствии с указанной функцией;
CURRENT_DATE - текущая дата;
CURRENT_TIME(точность) — текущее время с указанной точностью;
CURRENT_TIMESTAMP(точность) — текущие дата и время с указанной точностью;
LOWER(cтрока) — строка, преобразованная к верхнему регистру;
OCTED_LENGTH(cтрока) — число байтов в строке символов;
POSITION(первая строка IN вторая строка) — позиция, с которой начинается вхождение первой строки во вторую;
SUBSTRING(строка FROM n FOR длина) ‑ часть строки, начинающаяся с n-гo символа и имеющая указанную длину;
TRANSLATE(cтрока USING функция) — строка, преобразованная с использованием указанной функции;
TRIM(BOTH символ FROM строка) — строка, у которой удалены все первые и последние символы;
TRIM(LEADING символ FROM строка ) — строка, в которой удалены все первые указанные символы;
TRIM(TRAILING символ FROM строка) — строка, в которой удалены последние указанные символы;
UPPER(cтрока) — строка, преобразованная к верхнему регистру.