
- •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. О метаданных
9.3.7.2. Задание привилегий
Для задания привилегий предназначены инструкции GRANT и REVOKE. Можно также непосредственно манипулировать таблицами привилегий. Но тогда надо выполнить после внесения изменений инструкцию FLUSH PRIVILEGES, после исполнения которой в буфер системы будет перезагружена таблица привилегий. Пароли для таблицы user создаются с помощью функции password().
Проверить существующие привилегии можно:
с помощью сценария проверки привилегий mysqlaccess. Сценарий обеспечивает проверку возможностей пользователей, а также выдачу предупреждений в случае обнаружения опасной конфигурации (когда, например, любой пользователь может зарегистрироваться под именем root без ввода пароля). Чтобы воспользоваться возможностями программы mysqlaccess, пользователь должен обладать достаточными привилегиями для доступа к таблицам разрешений. Иначе говоря, это должен быть суперпользователь уровня администратора базы данных,
с помощью инструкции SHOW GRANTS.
Пользователям должно разрешаться выполнение только тех действий, которые от них и ожидаются.
Большинству пользователей не нужны глобальные привилегии. Эти привилегии предназначены только для администраторов баз данных.
Доступ к базе привилегий нужен только администратору. Нельзя позволять другим работать с этой базой данных. Если они смогут прочесть содержимое таблицы user, то смогут зарегистрироваться на сервере от имени любого пользователя, так как увидят все пароли.
Старайтесь использовать пароли, которые невозможно ни угадать, ни подсмотреть. Нельзя хранить пароли в незашифрованном виде.
Очень часто под сервер баз данных выделяют отдельный компьютер. В этом случае можно запретить все подключения к серверу, кроме тех, которые устанавливаются через порт 3306, контролируемый программой MySQL.
9.3.8. Оптимизация
9.3.8.1. Оптимизация запросов
Мир реляционных баз данных – это мир математических операций над множествами, в котором мы постоянно ищем пути ускорения работы наших запросов. К счастью, эти пути существуют. Это – индексирование таблиц, позволяющее ускорить их просмотр.
Индексирование – это наиболее важный инструмент ускорения работы запросов. Есть и другие методы, но самым эффективным был, есть и будет метод индексирования. Если у таблицы нет индексов, в большинстве случаев попытки улучшить производительность другими методами является простой потерей времени. Все-таки сначала следует попробовать индексирование, а затем – другие варианты.
Неиндексированная таблица представляет собой беспорядочный набор строк. При поиске определенной записи необходимо будет проверить все строки (записи) таблицы на истинность проверяемого условия. Для этого потребуется (по крайней мере – теоретически) сканирование (т.е. перебор с просмотром) всей таблицы от начала до конца. Это будет очень медленно и неэффективно.
Для ускорения работы создаются специальные файлы – индексы.
Разные СУБД имеют различные возможности в отношении индексирования. MySQL таблица может иметь до 16 ключей, каждый из которых может иметь до 15 полей. Максимальная поддерживаемая длина ключа 120 байт. Вы можете увеличить длину ключа, изменяя N_MAX_KEY_LENGTH в файле nisam.h и перекомпилировав пакет. Ключи могут иметь имена. В случае первичного ключа имя будет всегда PRIMARY.
Обратите внимание, что длинные ключи могут привести к низкой эффективности.
Индекс содержит записи о каждой строке из таблицы; эти записи отсортированы по значению в поле индекса. Вместо простого просмотра всех записей таблицы мы можем теперь воспользоваться индексом. Методом двоичного поиска (или иным специальным позиционирующим алгоритмом) в поле индекса можно быстро попасть на первую запись таблицы, совпадающую с искомым значением, а затем обработать все записи с этим же значением индекса. Как только значение индекса изменится, просмотр таблицы можно прекратить, поскольку других записей с таким значением индекса и быть не может, ибо все значения в поле индекса отсортированы.
Данные таблицы хранятся в файле данных, а значения индексов хранятся в отдельном индексном файле. Одна таблица может иметь несколько индексов, которые хранятся в одном индексном файле. Каждый индекс в индексном файле состоит из отсортированного массива ключевых записей, которые используются для быстрого доступа к файлу данных.
Использование индексов еще более эффективно при создании запросов, в которых задействовано несколько таблиц. В однотабличных запросах количество анализируемых значений равно количеству строк в таблице. В запросах, затрагивающих несколько таблиц, количество комбинаций резко возрастает и равно произведению количества строк в таблицах. Индексирование этих таблиц сразу же приведет к ускорению обработки запросов, потому что при наличии индекса запрос обрабатывается следующим образом:
Делается выборка и просмотр содержимого первой строки первой таблицы, удовлетворяющей условию запроса.
Непосредственно в индексе второй таблицы ищется строка второй таблицы, удовлетворяющая условию выборки из первой таблицы. Аналогично, непосредственно в индексе третьей таблицы ищется строка в таблице, удовлетворяющая условию выборки из первой таблицы.
Переходим к следующей строке в первой таблице и повторяем предыдущую процедуру. И так до полного просмотра всех строк первой таблицы.
Полный просмотр первой таблицы совмещается с прямым просмотром второй и третьей таблиц.
Помимо ускорения поиска записей для выборок (в условии WHERE) индексы могут улучшить производительность и для следующих типов операций:
Ускоряется поиск максимального и минимального значений индексируемого столбца (функции min() и max()).
Индексы можно использовать для ускорения сортировки с помощью конструкции ORDER BY.
Иногда можно избежать чтения из файла данных, если достаточно данных, полученных из индекса.
Недостатки, свойственные использованию индексов:
индексный файл занимает место на диске,
индексы ускоряют поиск данных, но замедляют операции добавления, удаления и модификации в индексируемых столбцах,
Правила выбора индексов:
Необходимо индексировать искомые, а не выбираемые столбцы;
Желательно использовать уникальные индексы (т.е. не имеющие повторяющихся значений);
Желательно использовать максимально короткие индексы;
Не следует злоупотреблять индексированием. Золотое правило – создание только тех индексов, в которых есть непосредственная необходимость. Правило «кашу маслом не испортишь» не подходит для работы с СУБД MySQL;
Индексы есть смысл использовать при применении операций сравнения (<,<=,=,>=,>) и операций BETWEEN и LIKE. Если же значения столбца используются в других операциях, их индексировать нет смысла;