- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Учреждение образования
- •«Белорусский государственный университет
- •Информатики и радиоэлектроники»
- •Пояснительная записка
- •Содержание дисциплины
- •1. Название тем лекционных занятий, их содержание, объем в часах.
- •2 Перечень тем ипр их наименование и объем в часах
- •3 Перечень тем контрольных работ их наименование и объем в часах
- •4. Курсовая работа, ее характеристика
- •Перечень тем курсовых работ
- •5. Литература
- •5.1 Основная
- •5.2 Дополнительная
- •6. Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •7. Учебно-методическая карта дисциплины
- •1.1.2. Классификация субд
- •1.2. Субд начального уровня – MySql
- •1.2.1. Введение в MySql
- •1.2.2. Подготовка к работе с MySql
- •1.2.3. Создание базы данных, основы работы с таблицами MySql
- •1.2.4. Типы данных столбцов MySql
- •1.2.5. Работа с таблицами MySql
- •1.2.6. Логические операторы MySql
- •1.2.7. Команды обработки данных MySql
- •1.2.8. Математические функции MySql
- •1.2.9. Работа с датой и временем в MySql
- •1.2.10. Работа со строками в MySql
- •1.2.11. Дополнительные функции MySql
- •1.3. Субд корпоративного уровня – ms sql Server
- •1.3.1. Общая теория запросов sql
- •1.3.2. Имена в sql
- •1.3.3. Типы данных
- •1.3.4. Константы
- •1.3.5. Выражения
- •1.3.6. Встроенные функции
- •1.3.7. Отсутствующие значения (значения null)
- •1.3.8. Простые запросы sql на выборку данных
- •1.3.9. Предложение select
- •1.3.10. Предложение from
- •1.3.11. Вычисляемые столбцы
- •1.3.12. Выборка всех столбцов (инструкция select *)
- •1.3.13. Повторяющиеся строки (предикат distinct)
- •1.3.14. Отбор строк (предложение where)
- •1.3.15. Условия отбора
- •1.3.16. Составные условия отбора (операторы and, or и not)
- •1.3.17. Сортировка результатов запроса (предложение order by)
- •1.3.18. Правила выполнения однотабличных запросов
- •1.3.19. Сложные запросы
- •1.3.20. Запросы на объединение и повторяющиеся строки
- •1.3.21. Запросы на объединение и сортировка
- •1.3.22. Вложенные запросы на объединение
- •1.3.23. Многотабличные запросы на выборку
- •1.3.24. Запросы с использованием отношения предок/потомок
- •1.3.25. Запросы на выборку к трём и более таблицам
- •1.3.26. Объединение таблиц по неравенству
- •1.3.27. Особенности многотабличных запросов
- •1.3.28. Самообъединения
- •1.3.29. Производительность при обработке многотабличных запросов
- •1.3.30. Умножение таблиц
- •1.3.31. Правила выполнения многотабличных запросов на выборку
- •1.3.32. Внешнее объединение таблиц
- •1.3.33. Левое и правое внешние объединения
- •1.4. Способы взаимодействия программных средств в субд
- •1.4.1. Доступ к базе данных на стороне сервера
- •1.4.2. Доступ к базе данных на стороне клиента
- •1.5. Современные тенденции развития субд
- •1.5.1. Введение
- •1.5.2. Как предсказать тенденции развития субд
- •1.5.3. Эволюционный подход
- •1.5.4. Тенденции развития
- •1. Виртуализация ресурсов и grid-технологии
- •2. Встраивание Information Life Cycle Management (ilm) в субд
- •3. Самоуправление, самодиагностика, самолечение
- •4. Real Application Testing – механизмы промышленного тестирования версий и изменений
- •5. Совершенствование архитектур максимальной доступности
- •6. Включение измерения времени в субд
- •7. Поддержка новых типов данных (xml, rfid, Semantic Web, геном, медицина, быстрые lob и т.Д.)
- •8. Умные механизмы сжатия и дедублирования
- •9. Совершенствование методов защиты данных
- •11. Облачные вычисления (Cloud computing)
- •12. Машины баз данных
- •2.1.2. Администрирование ms sql Server
- •2.2. Повышение надёжности баз данных
- •2.2.1. Обеспечение сохранности данных в MySql
- •2.2.2. Обеспечеие сохранности данных в ms sql Server
- •2.3. Повышение производительности баз данных
- •2.3.1. Повышение производительности MySql
- •2.3.2. Повышение производительности ms sql Server
- •2.4. Повышение безопасности бд
- •2.4.1. Безопасность MySql
- •2.4.2. Безопасность ms sql Server
- •2.5. Модернизация бд в процессе эксплуатации
- •2.5.1. Расширение возможностей MySql
- •2.5.2. Распределённые базы данных
- •Указания по выбору варианта
- •Курсовое проектирование Методические указания по выполнению
- •Цель проектирования
- •Теоретические положения Основные понятия баз данных
- •Этапы проектирования базы данных
- •Модели данных
- •Нормальные формы отношений
- •Задания к выполнению курсового проекта
- •Указания по выбору варианта
- •Правила оформления выполненных заданий
- •Пример проектирования базы данных
1.3.3. Типы данных
Современные СУБД позволяют обрабатывать данные самых разнообразных типов, среди которых наиболее распространёнными являются:
Целые числа. В столбцах, имеющих этот тип данных, обычно хранятся данные о ценах, количествах, возрасте сотрудников и т.д. Целочисленные столбцы часто используются также для хранения идентификаторов, таких как идентификатор клиента, служащего или заказа.
Десятичные числа (дроби). В столбцах данного типа хранятся числа, имеющие дробную часть, но которые необходимо вычислять точно, например курсы валют и проценты. Кроме того, в таких столбцах часто хранятся денежные величины.
Числа с плавающей запятой. Столбцы этого типа используются для хранения величин, которые можно вычислять приблизительно, например значения весов и расстояний. Числа с плавающей запятой могут представлять больший диапазон значений, чем десятичные числа, однако при вычислениях возможны погрешности округления.
Строки символов постоянной длины. В столбцах, имеющих этот тип данных, обычно хранятся инициалы, телефоны, коды товаров и т.п.
Строки символов переменной длины. Столбцы этого типа позволяют хранить строки символов, длина которых изменяется в некотором диапазоне.
Денежные величины. Во многих СУБД поддерживается тип данных MONEY или CURRENCY, который обычно хранится в виде десятичного числа или числа с плавающей запятой. Наличие отдельного типа данных для представления денежных величин позволяет правильно форматировать их при выводе на экран.
Дата и время. Поддержка значений даты/времени также широко распространена в различных СУБД, хотя способы её реализации довольно сильно отличаются друг от друга. Как правило, над значениями этого типа данных можно выполнять различные операции. Стандарт SQL2 включает определение типов данных DATE, TIME, TIMESTAMP и INTERVAL, а также поддержку часовых поясов и возможность указания точности представления времени (например, десятые или сотые доли секунды). Отметим, что наиболее универсальным способом хранения времени является т.н. unixtime, в котором время представлено целым числом, равным количеству секунд, прошедших с 1 января 1970 года до момента, сохранённого в виде unixtime.
Булевые (логические) величины. Некоторые СУБД явным образом поддерживают логические значения (TRUE или FALSE), а другие СУБД разрешают выполнять в инструкциях SQL логические операции (сравнение, логическое И/ИЛИ и др.) над данными.
Длинный текст. Многие СУБД поддерживают столбцы, в которых хранятся длинные текстовые строки (обычно длиной до 32000 или 65000 символов, а в некоторых случаях и больше). Это позволяет хранить в базе данных целые документы. Как правило, СУБД запрещает использовать эти столбцы в интерактивных запросах.
Неструктурированные потоки байтов. Современные СУБД позволяют хранить и извлекать неструктурированные потоки байтов переменной длины. Столбцы, имеющие этот тип данных, обычно используются для хранения графических и видеоизображений, исполняемых файлов и других неструктурированных данных. К примеру, тип данных IMAGE в SQL Server позволяет хранить потоки данных размером до 2 миллиардов байтов.
Азиатские символы. В последнее время все больше поставщиков СУБД стали включать в свои продукты поддержку строк переменной и постоянной длины, содержащих символы азиатских алфавитов. Однако над такими строками, как правило, нельзя выполнять операции поиска и сортировки.
Таблица – стандартные типы данных в SQL
Тип данных |
Описание |
CHAR(длина) CHARACTER(длина) |
Строки символов постоянной длины |
VARCHAR(длина) CHAR VARYING(длина) CHARACTER VARYING (длина) |
Строки символов переменной длины |
NCHAR(длина) NATIONAL CHAR(длина) NATIONAL CHARACTER(длина) |
Строки локализованных символов постоянной длины |
NCHAR VARYING(длина) NATIONAL CHAR VARYING(длина) NATIONAL CHARACTER VARYING(длина) |
Строки локализованных символов переменной длины |
INTEGER INT |
Целые числа |
SMALLINT |
Малые целые числа |
BIT(длина) |
Цепочки битов постоянной длины |
BIT VARYING(длина) |
Цепочки битов переменной длины |
NUMERIC(точность, степень) DECIMAL(точность, степень) DEC(точность, степень) |
Числа |
FLOAT(точность) |
Числа с плавающей запятой |
REAL |
Числа с плавающей запятой низкой точности |
DOUBLE PRECISION |
Числа с плавающей запятой высокой точности |
DATE |
Дата |
TIME(точность) |
Время |
TIMESTAMP(точность) |
Дата и время |
INTERVAL |
Временной интервал |
Различия в поддержке типов данных в разных СУБД существенно препятствуют переносимости приложений, в которых используется SQL. Причины подобных различий следует искать в самом пути, по которому развивались реляционные базы данных. Вот типичная схема:
1) Поставщик СУБД добавил в свой продукт поддержку нового типа данных, который обеспечивает новые полезные возможности для определённой группы пользователей.
2) Другой поставщик, оценив идею, ввел поддержку того же типа данных, но с небольшими модификациями, чтобы его нельзя было обвинить в слепом копировании.
3) Если идея оказалась удачной, то по прошествии нескольких лет рассматриваемый тип данных появляется в большинстве ведущих СУБД, став частью "джентльменского набора" базовых типов данных.
4) Далее этой идеей начинают интересоваться комитеты по стандартизации, чьей задачей является устранение произвольных различий в реализации идеи в ведущих СУБД. Но чем больше таких различий, тем труднее найти компромисс. Как правило, результатом деятельности комитета является вариант, который не соответствует ни одной из реализаций.
5) Поставщики СУБД начинают внедрять поддержку полученного стандартизированного типа данных, но поскольку они располагают обширной базой уже инсталлированных продуктов, то вынуждены сопровождать и старый вариант типа данных.
6) По прошествии длительного периода времени (обычно включающего выпуск нескольких новых версий СУБД) пользователи, наконец, полностью переходят к использованию стандартного варианта рассматриваемого типа данных, и поставщик СУБД начинает процесс исключения поддержки старого варианта из своего продукта.
В качестве примера рассмотрим форматы представления даты и времени в различных СУБД. Например, в DB2 существует сразу три типа данных:
DATE – представляет дату как "June 30, 1990"
TIME – представляет время как "12:30 P.M."
TIME STAMP – представляет конкретный момент времени с точностью до наносекунд.
Значения даты и времени можно представлять в виде строковых констант. Кроме того, поддерживаются арифметические операции над значениями даты. Ниже приведён пример допустимого запроса для СУБД DB2, в котором предполагается, что в столбце HIRE_DATE содержатся данные типа DATE:
SELECT NAME, HIRE_DATE FROM SALESREPS WHERE HIRE_DATE >= ‘05/30/2008’ + 15 DAYS
В СУБД MS SQL Server имеется единый тип данных для представления даты и времени – DATETIME, который напоминает тип данных TIMESTAMP из DB2. Если бы столбец HIREDATE имел тип DATETIME, в этой СУБД можно было бы выполнить такой запрос:
SELECT NAME, HIRE_DATE
FROM SALESREPS WHERE HIRE_DATE > ‘06/14/2008’
Поскольку в запросе не указано конкретное время, SQL Server по умолчанию примет, что время соответствует полуночи. Таким образом, запрос для SQL Server в действительности означает:
SELECT NAME, HIRE_DATE
FROM SALESREPS WHERE HIRE_DATE >= '06/14/2008 12:00AM'
Если информация о дате приёма служащего на работу была сохранена в базе данных в полдень 14 июня 2008 года, то строка, содержащая сведения об этом человеке, не попадёт в результаты запроса в SQL Server, однако попадёт в результаты запроса в DB2 (поскольку эта СУБД оперировала бы только датой). Кроме того, SQL Server поддерживает арифметические операции над датами с помощью набора встроенных функций. Так, рассматривавшийся выше запрос из DB2 можно переписать для SQL Server следующим образом:
SELECT NAME, HIRE_DATE
FROM SALESREPS WHERE HIRE_DATE >= DATEADD(DAY, 15, ‘05/30/2008’)
Это, конечно же, значительно отличается от синтаксиса DB2.
СУБД Oracle также поддерживает единственный тип данных для представления даты и времени, который называется DATE. Как и тип данных DATETIME в SQL Server, тип данных DATE в Oracle фактически соответствует типу данных TIMESTAMP из DB2.
Аналогично SQL Server, временная часть значения типа DATE по умолчанию принимается равной полуночи. Формат даты, принятый в Oracle по умолчанию, отличается от форматов, принятых в DB2 и SQL Server, поэтому версия запроса для Oracle имеет следующий вид:
SELECT NAME, HIRE_DATE FROM SALESREPS WHERE HIRE_DATE >= ‘14-JUN-08’
СУБД Oracle также поддерживает арифметические операции над датами, поэтому запрос из DB2 можно представить в виде:
SELECT NAME, HIRE_DATE FROM SALESREPS WHERE HIRE_DATE >= ‘3Q-MAY-08’ + 15
В конце концов, в стандарт SQL2 был введён набор типов данных для работы с датой и временем, основанных на рассмотренных типах данных из DB2, но не идентичных им. Помимо типов DATE, TIME и TIMESTAMP, появился также тип INTERVAL, предназначенный для хранения значений интервалов времени. В стандарте определены чёткие принципы выполнения арифметических операций над значениями даты и времени, принципы задания точности вычисления интервалов времени, учёта разницы между часовыми поясами и т.д.
Приведённые примеры наглядно демонстрируют, как незначительные отличия в реализации типов данных приводят к значительным отличиям в синтаксисе инструкций SQL. Эти отличия могут даже привести к тому, что, выполнив один и тот же запрос в различных СУБД, можно получить различные результаты.
Примечание: данный пример также наглядно показывает преимущество использования unixtime для хранения даты-времени.