Для грамотного использования Oracle необходимо иметь хорошее понимания языка SQL . Курс "Oracle. Программирование на SQL, PL/SQL и Java " раскрывает полный спектр возможностей языка SQL в Oracle и ряд аспектов неочевидных особенностей построения типовых конструкций БД.
Курс сопровождается практическими упражнениями, позволяющими закрепить понимание базовых понятий и освоить основные технические приемы программирования на языках SQL, PL/SQL и Java.
По окончании курса слушатели получают возможность самостоятельного программирования Oracle на этих трех языках для решения задач разработки приложений в архитектуре клиент-сервер и в трехзвенной архитектуре, а также задач администрирования БД.
Основное отличие этого курса от ряда других со схожей тематикой в том, что целью ставится научить конкретных слушателей реальной работе с Oracle на этих языках, а не прочитать формально программу, подготовленную третьей стороной.
Курс предназначен для разработчиков, программистов и администраторов баз данных. Слушатели должны обладать хорошим уровнем компьютерной грамотности, и иметь опыт программирования.
Знания даются по следующим версиям:
1. Основные понятия
2. SQL*Plus и ввод предложений на SQL
3. Пример "схемы" базы данных
4. Создание, удаление таблиц и изменение структуры
- Предложение CREATE TABLE
- Типы данных в столбцах
- Уточнения в описаниях столбцов
- Указание NOT NULL
- Значения по умолчанию
- Проверка CHECK поступающих в таблицу значений
- Создание таблиц по результатам запроса к БД
- Именование таблиц и столбцов
- Виртуальные столбцы
- Удаление таблиц
- Изменение структуры таблиц
- Логические и технические особенности удаления столбца
- Использование синонимов для именования таблиц
- Переименования
- Справочная информация о таблицах в БД
5. Основные элементы предложений DML: выражения
- Непосредственные значения данных (литералы)
- Числовые значения
- Строки текста
- Моменты и интервалы времени
- "Системные переменные"
- Числовые выражения
- Выражения над строками текста
- Выражения над типом "момент времени"
- Функции
- Скалярные функции
- CASE-выражения
- Скалярный запрос
- Условные выражения
- Отдельные замечания по поводу отсутствия значения в выражениях
6. Выборка данных
- Фразы предложения SELECT
- Общие правила построения предложения SELECT
- Порядок обработки предложения SELECT
- Пример 1 предложения SELECT
- Пример 2 предложения SELECT
- Логическая целостность обработки предложения SELECT
- Фраза FROM предложения SELECT
- Варианты указания столбца
- Столбцы из разных таблиц
- Использование псевдонимов в запросе
- Подзапрос в качестве источника данных
- Специальный случай для запроса-соединения
- Фраза WHERE предложения SELECT
- Общий алгоритм отработки фразы WHERE
- Операторы сравнения для получения условного выражения
- Связки AND, OR и NOT для комбинирования условных выражений
- Условный оператор IS
- Условный оператор LIKE
- Условный оператор BETWEEN
- Условный оператор IN с явно перечисляемым множеством
- Условный оператор IN с множеством, получаемым из БД
- Условия сравнения с подзапросом
- Указание ANY и ALL для сравнения с элементами множества значений
- Условный оператор EXISTS
- Фраза SELECT и функции в предложении SELECT
- Сокращенная запись для группового отбора столбцов
- Выражения во фразе SELECT
- Подзапросы во фразе SELECT
- Уточнение DISTINCT
- Особенности поведения стандартных агрегатных функций в предложении SELECT
- Именование столбцов в результате запроса
- Системная функция ("переменная") ROWNUM и особенности ее использования
- Аналитические функции
- Выражение типа ссылка на курсор
- Фраза ORDER BY предложения SELECT
- Простейшая сортировка
- Упорядочение по значению выражения
- Указание номера столбца
- Двоичное и "языковое" упорядочение строк
- Особенности обработки отсутствующих значений (NULL)
- Фразы GROUP BY и HAVING предложения SELECT
- Пример отработки фразы GROUP BY … HAVING
- Отсутствие значения в выражении для группировки
- Другие примеры
- Указание ROLLUP, CUBE и GROUPING SETS в во фразе GROUP BY
- Фраза CONNECT BY предложения SELECT
- Специальные системные функции в предложениях с CONNECT BY
- Упорядочение результата
- Фраза WITH предварительной формулировки подзапросов
- Комбинирование предложений SELECT
- Комбинирование оператором UNION
- Комбинирование оператором INTERSECT
- Комбинирование оператором MINUS
- Подзапросы
- Операция соединения в предложении SELECT
- Виды соединений
- Новый синтаксис в версии 9
- Особенности выполнения операции соединения
7. Обновление данных в таблицах
- Добавление новых строк
- Явное добавление строки
- Добавление строк, полученных подзапросом
- Добавление в несколько таблиц одним оператором
- Изменение существующих значений полей
- Использование умолчательных значений в INSERT и UPDATE
- Удаление строк из таблицы
- Выборочное удаление
- Вариант полного удаления
- Комбинирование UPDATE, INSERT и DELETE в одном операторе
- Логическая целостность операторов обновления данных таблиц и реакция на ошибки
- Реакция на ошибки в процессе исполнения
- Фиксация изменений в БД
- Данные о системном номере изменения для строки
- Ускорение выполнения COMMIT
8. Быстрое обращение к прошлым значениям данных
- Чтение старых значений строк таблицы
- Восстановление таблиц и данных ранее удаленных таблиц
9. Схемные ограничения целостности
- Разновидности схемных ограничений целостности
- Ограничение NOT NULL
- Первичные ключи
- Уникальность значений в столбцах
- Внешние ключи
- Дополнительное условие для значения в поле строки
- Дополнительное условие, связывающее значения в нескольких полях строки
- Добавление ограничения при наличии нарушений
- Приостановка проверки схемных ограничений в пределах транзакции
- Отключение и включение схемных ограничений целостности
- Технология включения и выключения схемных ограничений целостности
- Более сложные правила целостности
10. Виртуальные таблицы (производные, выводимые: views)
- Основные ("базовые") и виртуальные таблицы
- Обновление виртуальных таблиц
- Ограничения прямой модификации данных через виртуальные таблицы
- Запрет непосредственных обновлений
- Сужение возможности непосредственных обновлений
- Виртуальные таблицы с хранием данных
- Особенности именованых виртуальных таблиц
- Неименованые виртуальные таблицы без хранения данных
11. Нескалярные типы для "сложно устроенных" данных в Oracle
- Хранимые объекты
- Простой пример
- Использование свойств и методов объектов
- Использование ссылок на объект
- Коллекции
- Вложенные таблицы
- Массивы VARRAY
- Тип XMLTYPE
- Простой пример
- Таблицы данных XMLTYPE
- Преобразование табличных данных в тип XMLTYPE
- Тип ANYDATA
12. Вспомогательные виды хранимых объектов
- Генератор уникальных номеров
- Каталог операционной системы
- Таблицы с данными временного хранения
- Ссылка на другую БД
- Подпрограммы
- Индексы
- Индексы для проверки схемных ограничений целостности
- Таблицы с внешним хранением данных
13. Некоторые замечания по оптимизации SQL-предложений
14. Транзакции и блокировки
- Транзакции в Oracle
- Примеры блокировок данных транзакциями
- Разновидности блокировок
- Неявные блокировки при операциях DML
- Влияние внешних ключей
- Явная блокировка таблиц (тип TM) командой LOCK
- Явная блокировка отдельных строк таблиц
- Недокументированная разновидность групповой блокировки
- Блокировки предложениями DDL
15. Пользователи (схемы) и дополнительные средства разграничения доступа к данным
16. Таблицы системного каталога (словаря-справочника)
18. Встроенный SQL
- Некоторые примеры составления запросов
19. Выдать сотрудников в соответствии с большим (меньшим) окладом
- Вопрос к БД
- "Очевидное", но неправильное решение
- Правильные решения
- Решение типа top-N (начиная с версии 8.1.5)
- Решение с использованием аналитических функций ранжирования
20. Переформулировка запроса с HAVING
22. Ловушка условия с отрицанием NOT
23. Ловушка в NOT IN (S)
1. Основные понятия
- Место PL/SQL в архитектуре Oracle
- Общая структура программы на PL/SQL
2. Основные типы и структуры данных
- Скалярные переменные
- Числовые типы
- Строковые типы
- Моменты времени и интервалы
- Булевы переменные
- LOB-типы
- Объявление переменных и постоянных
- Записи
- Объявление записей в программе
- Присвоения
- Ссылка на типы уже имеющихся данных
- Пользовательские подтипы
3. Выражения
4. Основные управляющие структуры
- Ветвление программы
- Предложение IF-THEN
- Предложение IF-THEN-ELSE
- Предложение IF-THEN-ELSIF
- Предложения CASE
- Безусловная передача управления
- Циклы
- Простой цикл
- Счетный цикл (FOR)
- Цикл по курсору (FOR)
- Цикл WHILE
- Имитация цикла REPEAT UNTIL
- Метки в циклах и в блоках
5. Подпрограммы
- Локальные подпрограммы
- Переопределение «внешних» имен
- Предваряющие (forward) объявления
- Повторение имен на одном уровне (overloading)
- 6. Взаимодействие с базой данных: статический SQL
- Использование записей вместо (списка) скаляров
7. Регулирование изменений в БД
- Управление транзакциями
- Блокировки
- Автономные транзакции
8. Встроенный динамический SQL
- Операторы встроенного динамического SQL
- Сравнительный пример двух способов работы с динамическим SQL
9. Использование курсоров
- Явные курсоры
- Объявление явных курсоров
- Открытие явных курсоров
- Извлечение результата через явный курсор
- Закрытие явного курсора
- Отсутствие запрета изменений таблиц при открытом курсоре
- Атрибуты для явных курсоров
- Несколько примеров использования циклов и курсоров
- Курсоры с блокировкой строк таблицы
- Предложение SELECT … FOR UPDATE
- Предосторожности употребления курсоров с блокировкой
- Возможность изменять строки, выбираемые курсором
- Ссылки на курсор
- Общие сведения
- Пример употребления для структуризации программы
- Неявные курсоры
10. Обработка исключительных ситуаций
- Объявление исключительных ситуаций
- Примеры обработки
- Порождение исключительных ситуаций
- Зона действия и распространение
- «Внутренние» исключительные ситуации блока
- Использование функций SQLCODE и SQLERRM
11. Хранимые процедуры и функции
- Общий синтаксис
- Параметры
- Тип параметра
- Режим использования параметра
- Значения по умолчанию
- Способы указать фактические значения параметрам
- Обращение к параметрам и к локальным переменным в теле подпрограммы
- Указания компилятору при создании подпрограмм
- Хранимые подпрограммы и привилегии доступа к данным в БД
- Две логики реализации привилегий доступа к данным БД
- Особенности передачи привилегий через роли
12. Триггерные процедуры
- Создание триггерной процедуры
- Отключение триггерных процедур
- Триггерные процедуры для событий категории DML
- Комбинированные триггерные процедуры
- Управление транзакциями в теле триггерной процедуры
- Последовательность срабатывания триггерных процедур, когда их несколько
- Триггерные процедуры INSTEAD OF для выводимых таблиц
- Триггерные процедуры для событий категории DDL
- Триггерные процедуры для событий уровня схемы и БД
13. Пакеты в PL/SQL
- Общая структура пакета
- Обращение к элементами пакета
- (Глобальные) данные пакета
- Взаимные вызовы и повторения имен
- Инициализация пакета
- Прагма SERIALLY_REUSABLE
14. Вызов функций PL/SQL в предложениях SQL
- Требования и ограничения на применение функций пользователей в SQL
- Обращение в SQL к функциям из состава пакетов
- Разрешение конфликта имен столбцов и функций
- Табличные функции в SQL
15. Более сложные типы данных: коллекции
- Синтаксис объявления типов для коллекций
- Работа с ассоциативными массивами
- Создание вложенной таблицы и массива VARRAY в программе
- Добавление и убирание элементов в коллекциях
- Множественные действия с коллекциями
- Преобразования коллекций
- Методы для работы с коллекциями в программе
- Примеры использования коллекций в программе
- Привилегии
- Серийное выполнение и привязывание запросов к массивам
- Серийное выполнение однотипных операций: конструкция FORALL
- Привязка массивами: конструкция BULK COLLECT INTO
- Пример для схемы SCOTT
- Использование коллекций в табличных функциях (потоковой реализации)
- Простой пример
- Использование для преобразования данных
16. Отладка процедур в PL/SQL
- Таблицы словаря-справочника
- Зависимости подпрограмм
- Системные пакеты
- Пакет DBMS_PROFILER
- Пакет DBMS_TRACE
- Функции пакета DBMS_UTILITY
- Пакет DBMS_DEBUG
- Пример построения профиля работы программы
17. Системы программирования для PL/SQL
18. Системные пакеты PL/SQL
- Пакеты STANDARD и DBMS_STANDARD
- Прочие системные пакеты
- Запись данных из программы в файл и обратно
- Шифрование данных
- Автоматический запуск заданий в Oracle
- Управление динамическим размещением объектов в библиотечном буфере
- Манипулирование большими неструктурированными объектами NULL
- Доступ к старым значениям данных
- Рассылка сообщений из программы на PL/SQL
- Возможности работы в PL/SQL с COM Automation
- Дополнительные сведения
- Простой пример разделения открытия курсора и обработки
- Более сложный пример разделения работы
20. Атрибуты триггерных процедур уровня схемы БД и событий в СУБД
1. Основные понятия
- Место Java в архитектуре Oracle
- Соотношение и взаимосвязь PL/SQL и Java в Oracle
2. Особенности Java и среда работы программ на Java
- Архитектура Java
- Программные компоненты в среде разработки на Java
- Установка среды разработки для Java
- Среда окружения OC
3. Создание самостоятельных программ на Java
- Пример транслирования и выполнения программы
4. Создание хранимых программ на Java в Oracle
- Дополнительные компоненты СУБД Oracle для работы с хранимыми программами на Java
- Ограничения на хранимые программы на Java
- Установка, удаление и обновление JServer/OJVM
- Пример создания хранимой Java-программы
- Создание с помощью loadjava
- Создание SQL-предложением
- Обращение к загруженному классу
- Работа со словарем-справочником
- Организация справочной информации
- Просмотр Java-элементов
- Просмотр исходных текстов
- Преобразование имен
- Особенности встроенной JVM
- Интерпретатор ojvmjava
5. Элементы программирования на Java
- Основы языка
- Базовые конструкции языка
- Переменные
- Операторы
- Выражения, предложения и блоки
- Передача управления
- Объекты и простые структуры
- Классы и наследование
- Создание классов
- Механика использования класса в программе
- Наследование
- Интерфейсы
- Обработка исключительных ситуаций
- Некоторые приемы программирования на Java
- Графический интерфейс
- Группы объектов (коллекции)
- Потоковый ввод и вывод
- Параметризация работы программы с помощью наборов свойств
- Сериализуемость объектов
6. Взаимодействие с базой данных через JDBC
- Использование JDBC
- JDBC и JDBC-драйверы
- JDBC-драйверы в Oracle
- Установка JDBC-драйверов для работы с Oracle
- Программа на Java для проверки связи через JDBC
- Работа с данными Oracle из внешних программ на Java
- Обращение к БД через толстый OCI-драйвер
- Работа с данными Oracle из хранимых программ на Java
- Обращение к БД через толстый драйвер («родной», kprb)
- Обращение к БД через тонкий драйвер
- Обращение к данным из триггерных процедур Oracle
7. Дополнительные свойства протокола JDBC
- Соединение с СУБД с помощью техники DataSource
- Простой пример соединения техникой DataSource
- Пример соединения с использованием службы JNDI
- Пример кеширования соединений
- Примеры организации логических соединений
- Изменение данных в БД и обращение ко хранимым подпрограммам
- Изменение данных
- Управление транзакциями
- Обращение к хранимым программам
- Параметризация запросов
- Использование типов данных Oracle
- Повышение эффективности обращений к БД
- Повторяющиеся запросы
- Пакетное выполнение
- Ссылка из программы на курсор в СУБД
8. Взаимодействие с базой данных через SQLJ
- Простой пример программы
- Транслирование и выполнение программы с SQLJ
- Более сложный пример: множественная выборка из БД
- Использование SQLJ в хранимых процедурах на Java
- Пример с загрузкой извне
- Пример с внутренней трансляцией
9. Основы построения приложений для web с помощью Java и Oracle
- Клиентская часть: работа с аплетами
- Пример транслирования и выполнения аплета
- Web-сервер Apache
- Общение с web-сервером по протоколу HTTP
- Общие понятия обмене сообщениями в HTTP
- Организация диалога в HTML
- Работа с сервлетами Java
- Общие сведения о сервлетах Java и о контейнерах сервлетов
- Устройство сервлета Java
- Пример составления сервлета на Java
- Пример обращения к сервлету
- Пример сервлета с обращением к базе данных
- Использование класса HttpServlet
- Работа с JavaServer Pages
- Пример составления страницы JSP
- Пример обращения к странице JSP
- Некоторые возможности построения страниц JSP
- Способы обращение к БД из страницы JSP
- Модель MVC организации приложения для web
10. Взаимодействие компонентов приложения для web
- Передача управления компонентов приложения web друг другу
- Обращение на страницах HTML к страницам JavaServer и сервлетам
- Передача управления со страниц JavaServer
- Передача управления компонентам web из сервлетов
- Абстракции Java для построения приложения web
- Запрос и ответ
- Область действия (scope)
- Контекст сервлета
- Предопределенные объекты страницы JavaServer
- Передача данных компонентов приложения web друг другу
- Передача данных через параметры запроса
- Передача данных через контекст и компоненты JavaBeans
11. Пример построения приложения для web средствами Java и Oracle
- Страница Logon.html
- Сервлет Logon
- Страница LogonError.html
- Страница Main.jsp
- Страница CompanyData.jsp и класс orajava.demos.StuffData
- Сервлет Logout
- Транслирование классов, размещение файлов и проверка приложения
- Дополнительные сведения
12. Пример программирования собственной разметки JSP
- Пример использования готовой разметки
- Пример программирования собственной разметки
В конце обучения на курсе проводится итоговая аттестация в виде теста или на основании оценок за практические работы, выполненных в процессе обучения.
В современном мире сложно обойтись без информационных технологий и их производных - компьютеров, мобильных телефонов, интернета и т.д., особенно в крупных компаниях и государственных организациях, работающих с большим количеством людей, а не только с парой VIP-клиентов, как это может быть в случае небольшой компании. А там, где есть большое количество контрагентов, заявителей и т.д. - не обойтись без баз данных, необходимых для обработки информации. Естественно, что времена гроссбухов и карточек, памятных многим по библиотекам, давно прошли, сегодня используются персональные компьютеры и электронные базы данных.
Сегодня невозможно представить работу крупнейших компаний, банков или государственных организаций без использования баз данных и средств Business Intelligence . Базы данных позволяют нам хранить и получать доступ к большим объемам информации, а система управления базами данных (СУБД) - осуществлять менеджмент доступных хранилищ информации.
В Учебном центре « Интерфейс» Вы научитесь эффективно использовать системы управления базами данных: быстро находить нужную информацию, ориентироваться в схеме базы данных, создавать запросы, осуществлять разработку и создание баз данных.
Обучение позволит Вам не только получить знания и навыки, но и подтвердить их, сдав соответствующие экзамены на статус сертифицированного специалиста. Опытные специалисты по СУБД Microsoft SQL Server или Oracle могут быть заинтересованы в изучении систем бизнес-аналитики. Это задачи достаточно сложные, использующие громоздкий математический аппарат, но они позволяют не только анализировать происходящие процессы, но и делать прогнозы на будущее, что востребовано крупными компаниями. Именно поэтому специалисты по бизнес-аналитике востребованы на рынке, а уровень оплаты их труда весьма и весьма достойный, хотя и квалифицированным специалистам по базам данных, администраторам и разработчикам, жаловаться на низкий уровень дохода тоже не приходится. Приходите к нам на курсы и получайте востребованную и высокооплачиваемую профессию. Мы ждем Вас!
В конце обучения на курсах проводится итоговая аттестация в виде теста или путём выставления оценки преподавателем за весь курс обучения на основании оценок, полученных обучающимся при проверке усвоения изучаемого материала на основании оценок за практические работы, выполненные в процессе обучения.
Учебный центр "Интерфейс" оказывает консалтинговые услуги по построению моделей бизнес-процессов, проектированию информационных систем, разработке структуры баз данных и т.д.
В своей книге «Oracle для профессионалов. Архитектура и основные особенности.» настаивает, что это просто необходимо. Даже если в вашей команде есть грамотный администратор, знание того, как работает СУБД Oracle поможет вам лучше понимать друг друга и эффективней взаимодействовать, не говоря уже о случае, когда такого специалиста у вас нет. В данном топике я упомяну об основных вещах, понимание которых позволит грамотно работать с БД Oracle и использовать некоторые её особенности с большой отдачей для вашего приложения. Если же вы уже прочитали вышеупомянутую книгу Тома Кайта, то можете просто исползовать эту статью в качестве памятки. Одно замечание - книжку я читал давно, и тогда еще последней версией БД Oracle была 9i, курсы по администрированию я тоже проходил по девятке, так что, если в десятке и выше что-то поменялось и добавилось, то не обессудьте. Хотя я пишу о довольно фундаментальных вещах, которые вряд ли сильно поменяись.
Обычно я рассказываю об этом, когда мне предлагают что-то сохранять просто в файл на диске, так как это будет «быстрее» за счет того, что мы будет писать все данные последовательно и головке жесткого диска не надо будет бегать и искать рэндомные блоки. Я все же настаиваю, что мы тут ничего не выиграем, так как будем писать на медленный диск, который скоро всего активно используется множеством других процессов для записи огромного количества различных логов, а Oracle синхронно тоже пишет у себя на диск только последовательно, как я описал выше.
Сегмент отката дает еще одну плюшку: из него можно попытаться считать немного устаревшие данные для какой-нибудь таблицы, которые были в ней на определенный момент. Называется данная фича - flashback .
Однако иногда сегмент отката может подложить свинью: если у вас есть большой job для bulk удаления данных (удаление генерирует всех больше данных в сегменте отката), то вы можете получить ORA-01555: snapshot too old . Главное что в этом случае надо помнить - это то, что не надо переписывать ваш job, чтобы он коммитил через каждые N операций, а нужно использовать отдельный специально созданный сегмент отката для таких операций.
Вообще, в Oracle явно доступно всего два уровня изоляции: по умолчанию используется READ_COMMITTED, но при желании вы можете установить SERIALIZABLE.
Однако на уровне операторов (SELECT, UPDATE и т.д.) у вас по умолчанию уже есть REPEATABLE_READ, т.е. в рамках одного оператора вы всегда получаете согласованное чтение, что достигается конечно же за счет сегмента отката. Мне всегда очень нравился пример приводимый Томом Кайтом для описания того, что это дает. Допустим у вас есть очень большая таблица со счетами и вы выполняете SELECT на получение суммы. В Oracle, в отличие от многих других БД, даже если в середине вашего запроса другая транзакция переведет некоторую суммы с первого счета на последний, вы в итоге все равно получите данные актуальные на начало вашего запроса, так как дойдя до последний строчки ваш SELECT увидит, что строчка была изменена, пойдет в сегмент отката и прочитает данные, которые были в этой ячейке на момент начала выполнения запроса. Во многих других базах данных, вы получите ответ в виде суммы, никогда не существующей в вашей таблице. Однако в Oracle в данном случае есть опасность получить ORA-01555: snapshot too old .
В дополнение к стандартным уровням изоляции в Oracle еще есть так называемые READ_ONLY транзакции, которые дают REPEATABLE_READ в рамках всей транзакции, а не только в рамках одного оператора. Но как следует из названия, в такой транзакции вы можете выполнять только чтение.
Одна из вещей, которая меня всегда очень радовала в Oracle - это возможность создания индекса по функции. Т.е. если вам в запросах приходиться использовать какую-нибудь функцию, то вы можете построить по ней индекс и значительно ускорить операции чтения.
Еще одно интересное свойство индексов, о котором необходимо знать, это то, что в индексе не хранятся значения NULL. Таким образом если вы будете делать запросы с условием <, > или <> по индексируемой колонке, то в ответ строчек со значением NULL в индексируемой колонке вы обратно не получите. С другой стороны данное свойство можно очень эффективно использовать дня некоторых специфичных случаев. Например, у вас есть очень большая табличка в которой хранятся ордера, которая никогда не чистится. И существует фоновый процесс, который обязан все ордера отсылать в какую-нибудь backoffice систему. Первое решение, которое напрашивается - это завести еще одну колонку с флагом is_sent, где изначально стоит 0 и при отсылке мы будем проставлять 1. Т.е. фоновый процесс при каждом запуске будет делать запрос к таблице с условием is_sent=0. Битовый индекс вы здесь использовать не можете, так как табличка очень активно пополняется. Обычный индекс на основе В-дерева будет занимать очень много места, так как нужно хранить ссылки на огромное количество строчек. Но если мы слегка поменяем нашу логику и в качестве пометки отсылки, и в колонку is_sent будем класть NULL вместо 1, то индекс у нас будет крошечный, так как в любой момент в нем будут храниться только не NULL значения, а их будет очень мало.
Еще один замечательный тип таблиц - это кластерные таблицы, которые позволяют хранить данные из двух или более таблиц кластеризованные по одному значению ключа в одном блоке данных. Это может быть весьма эффективно если вы всегда используете какие-нибудь таблицы совместно.
На основе кластерных таблиц есть еще кластерные хэш-таблицы, в которых для доступа вместо B-дерева используется таблица на основе хеша кластерного ключа. Звучит, конечно, очень интересно, но, честно говоря, на практике никогда не сталкивался.
Стоит так же заметить, что не стоит этим злоупотреблять и использовать связывание для столбцов с небольшим количеством различных значений, как-то флаг is_deleted, ведь различных запросов в этом случае будет не так много, а, возможно, для более конкретного запроса СУБД удастся построить более эффективный план.
Ну и общая рекомендация для всех типов БД: никогда не делайте update всех колонок в таблице при изменении одного поля объекта. Кажется весьма очевидным, но как показывает практика, данный антипаттерн часто имеет место быть, поэтому я настоятельно рекомендую проверить, что ваши фреймворки делают UPDATE только действительно измененных полей.
Теги:
Structured Query Language (структурированный язык запросов) или SQL
- это декларативный язык программирования для использования в квази-реляционных баз данных. Многие из оригинальных черт SQL были взяты для кортежных исчислений, но последние расширения SQL включают все больше реляционной алгебры.
SQL изначально создан IBM , но многие производители разработали собственные диалекты. Он была принят в качестве стандарта американским Национальным институтом стандартов (ANSI) в 1986 и ISO в 1987 . В стандарте языка программирования SQL, ANSI заявил, что официальный произношение SQL является "эс кью эль". Тем не менее, многие специалисты базы данных употребляли "сленговое" произношение «Сиквель», что отражает первоначальное название языка, Sequel, которое было изменено позже из-за возникшего конфликта торговых марок и наименований у компании IBM. Программирование для начинающих.
Язык программирования SQL
был пересмотрен в 1992 , и эта версия известна как SQL-92 в. Потом было вновь пересмотрено 1999 , чтобы стать SQL: 1999 (AKA SQL3). Программирование для чайников. SQL 1999 поддерживает объекты, которые ранее не поддерживается и в других версиях, но только в конце 2001 года лишь несколько систем управления базами данных поддерживали SQL реализации: 1999.
SQL, хотя определяется как ANSI и ISO, имеет множество вариаций и расширений, большинство из которых имеют собственные характеристики, такие как реализация корпорации Oracle «PL / SQL» или реализация Sybase и Microsoft под названием «Transact-SQL», что может запутать знакрмящегося с основами программирования. Также не редкость для коммерческих реализаций опустить поддержку основных особенностей стандарта, такие типы данных как дата и время, предпочитая какой-то их собственный вариант. Как результат, в отличие от ANSI C или ANSI Fortran которые обычно можно портирована с платформы на платформу без серьезных структурных изменений, запросы языка программирования SQL редко могут быть перенесены между разными системами баз данных без существенных модификаций. Большинство людей в области баз данных считают, что это отсутствие совместимости является намеренным, с тем чтобы обеспечить каждого разработчика собственной системой управления базами данных и привязать покупателя к конкретной базе данных.
Как следует из названия, язык программирования SQL предназначен для конкретных, ограниченных целей - запросов данных, содержащихся в реляционной базе данных. Как таковой, он представляет собой набор инструкций языка программирования для создания выборок данных, а не процедурный язык, такой как C или BASIC , которые предназначены для решения гораздо более широкого круга проблем. Расширения языка, таких как «PL / SQL» предназначены для решения этого ограничения, добавив процедурные элементы для SQL при сохранении преимуществ SQL. Другой подход заключается в том, что позволяется в зопросы SQL встраивать команды процедурного языка программирования и взаимодействовать с базой данных. Например, Oracle и другие поддерживают язык Java в базе данных, в то время как PostgreSQL позволяет писать функции на Perl, Tcl, или С.
Один анекдот про SQL: "SQL не является ни структурированным, ни языком." Суть шутки состоит в том, что SQL не является языком Тьюринга. .
C1 | C2 |
---|---|
1 | a |
2 | b |
C1 | C2 |
---|---|
1 | a |
2 | b |
C1 |
---|
1 |
2 |
C1 | C2 |
---|---|
1 | a |
2 | b |
C1 | C2 |
---|---|
1 | a |
Учитывая таблицу T, запрос Select * from T выведет на экран все элементы всех строк таблицы.
Из той же таблицы, запрос Select C1 from T выведет на экран элементы из столбца C1 всех строк таблицы.
Из той же таблицы, запрос Select * from T where C1=1 выведет на экран все элементы всех строк, где значение колонки С1 равно "1".
SQL ключевые слова
SQL слова делятся на ряд групп.
Первая - это Data Manipulation Language или DML (язык управления данными). DML является подмножеством языка, используемого для запроса к базам данных, добавления, обновления и удаления данных.
Три другие ключевых слова, можно сказать, что попадают в группу DML:
COMMIT и ROLLBACK применяются в таких областях, как контроль транзакций и блокировки. Обе инструкции завершают все текущие транзакции (наборы операций над БД) и снимают все блокировки на изменение данных в таблицах. Присутствие или отсутствие BEGIN WORK или аналогичного заявления зависит от конкретной реализации SQL.
Вторая группа ключевых слов относится к группе Data Definition Language или DDL (язык определения данных)
. DDL
позволяет пользователю определять новые таблицы и связанные с ними элементы. Большинство коммерческих баз данных SQL имеют собственные расширения в DDL, которые позволяют осуществлять контроль над нестандартныыми, но обычно жизненно важными элементами конкретной системы.
Основные пункты DDL являются команды создавать и удалять.
Третьей группой ключевых слов SQL является Data Control Language или DCL(язык контроля данных) . DCL отвечает за права доступа к данным и позволяет пользователю контролировать, кто имеет доступ, чтобы просматривать или манипулировать данными в базе данных. Здесь два основных ключевых слова:
Системы баз данных с использованием SQL
Как стать профессионалом по разработке сайтов и начать зарабатывать? Недорогие видео курсы с ознакомительным введением.
Год выпуска: 2002
Издательство: Гелиос АРВ
Формат: PDF
Книга "Работаем с Oracle" представляет собой быстрое введение в методы и средства распределенной СУБД Oracle. Рассмотрены методологические основы распределенной обработки информации, основные объекты базы данных Oracle, язык SQL -базовое средство взаимодействия с сервером баз данных и его процедурное расширение PL/SQL. Представляется возможность получить углубленные знания по использованию SQL для работы с большими базами данных. Особое внимание уделено технологиям Oracle, обеспечивающим безопасность и целостность данных в условиях многопользовательского доступа. В книге также содержится описание средств, предназначенных для создания приложений на языке Java. Книга ориентирована на студентов, молодых специалистов и всех желающих самостоятельно познакомиться с Oracle - распределенной СУБД для эффективной обработки данных.
Азбука Oracle
Предисловие ко второму изданию
Благодарности
Раздел 1. Архитектура распределенных систем обработки данных
Средства обработки данных: эволюция идей и систем
Эволюция реляционных СУБД на фоне истории Oracle
Oracle 8 . Основные возможности
Архитектуры обработки данных
Локальные вычислительные сети как среда передачи данных
Эталонная модель взаимодействия открытых систем
Компоненты распределенной системы и ЭМВОС
Конфигурирование сетевых компонент Oracle
Архитектура сервера Oracle
Использование инструментального средства SQL*Plus
Информация о результатах операции
Поддержка мультиязычности в Oracle
Соглашения, принятые для описания команд
Раздел 2. SQL - язык обработки данных Oracle
Основные объекты Oracle
Средства манипулирования данными языка SQL
Структура запроса
Простейшие запросы
Формирование критерия отбора,
Базовые средства определения критерия отбора
Язык описания данных Oracle
Типы данных Oracle
Строки символов
Числовые типы
ROWID
Битовые строки
Дата и время
LOB-объекты
Таблицы. Представления. Пользователи
Создание и удаление таблиц в Oracle
Средства определения и уничтожения представлений
Средства регистрации и исключения пользователей
Операция вставки строк
Операция удаления строк
Операция модификации строк
Специальные предикаты SQL
Предикат IN
Предикат BETWEEN
Предикат LIKE
Предикат IS NULL
Предикат EXISTS
Предикаты с кванторами ALL, ANY и SOME
Теоретико-множественные операции
Сортировка
Иерархии
Группирование и агрегатные функции
Синтаксис языка запросов
Связи с удаленными базами данных. Снимки данных
Создание связей с удаленной базой данных Oracle
Средства определения и уничтожения снимков
Последовательности. Синонимы
Создание последовательностей
Создание синонимов в Oracle
Работа с табличными областями в Oracle
Раздел 3. PL/SQL - процедурное расширение языка SQL
Структура программы на PL/SQL
Переменные, константы и типы
Управление выполнением программы
Оператор ветвления
Операторы цикла
Оператор GOTO
Курсоры
Обработка исключительных ситуаций
Процедуры, функции и пакеты
SQL-функции Oracle
Функции, устанавливающие соответствие числовых кодов и символов
Функции преобразования символов подстрок
Символьные функции усечения и дополнения строк
Символьные функции преобразования строк
Функции, связанные с выделением подстрок
Числовые функции, связанные с возведением в степень и логарифмированием
Тригонометрические функции
Числовые функции, связанные с округлениями
Числовые функции, связанные со знаком числа
Числовые функции, связанные с модулярной арифметикой
Функции, оперирующие с датами
Функции преобразования типов данных
Функции замены аргументов
Справочные функции
Создание пользовательских процедур и функций
Пакеты
Триггеры базы данных
Стандартные пакеты Oracle
Динамический SQL
Управление заданиями
Управление LOB-объектами
Управление многопользовательским доступом
Использование функций PL/SQL в SQL-выражениях
Раздел 4. Средства разграничения доступа в Oracle
Анализ включающей инфраструктуры
Идентификация пользователей
Базовое понятие системы разграничения доступа-привилегии
Предоставление системных привилегий
Системные привилегии, определяющие права по работе с таблицами и представлениями
Системные привилегии, определяющие права по работе с процедурами и триггерами
Системные привилегии, определяющие права по работе с пользователями
Системные привилегии, определяющие права по работе с табличными областями
Системные привилегии, определяющие права по работе с последовательностями
Системные привилегии, определяющие права по работе с синонимами
Системные привилегии, определяющие права по выполнению глобальных действий в системе
Системные привилегии, определяющие права по выполнению действий с остальными объектами БД
Использование конструкции PUBLIC и параметра WITH ADMIN OPTION
Предоставление привилегий доступа к объекту
Управление привилегиями с помощью ролей
Системные привилегии, определяющие права по работе с ролями
Предопределенные роли в Oracle
Создание ролей и предоставление им привилегий
Управление допустимостью использования ролей
Отмена привилегий
Отмена системных привилегий и ролей
Отмена привилегий доступа к объекту
Использование представлений для разграничения доступа
Хранимые процедуры как средство разграничения доступа
Использование триггеров для повышения защиты системы
Средства аудита
Аудит системных событий
Аудит событий, связанных с доступом к объекту
Прекращение регистрации событий
Обработка данных аудита
Профили пользователя как средство повышения защищенности системы
Дополнительные сведения
Раздел 5. Создание приложений на языке Java
Средства построения приложений и организации доступа к базам данных
Создание приложений на языке Java
Простейшее приложение на Java
Простейший апплет
Выполнение SQL-операторов создания таблиц, ввода и модификации данных
Простая выборка данных
Параметрические запросы
Хранимые процедуры на языке Java
Раздел 6. Средства обеспечения целостности данных
Определение транзакции и ее роль в СУБД
Начало и окончание транзакции
Предложения SQL, управляющие транзакциями
Предложение COMMIT WORK
Использование предложения SAVEPOINT
Предложение ROLLBACK WORK
Непротиворечивость и параллельная обработка
Типы блокировок
Экспорт/импорт данных
Раздел 7. Методы повышения производительности
Оптимизатор
Ранжирование методов доступа
Анализ запросов с целью повышения скорости их выполнения
Задание режима оптимизации
Обзор индексов Oracle
Эффективное кодирование SQL-выражений
Изменение плана выполнения запроса
Секционирование таблиц
Секционирование индексов
Операции с секциями
Индекс-таблицы
Раздел 8. Объектные расширения в OracleS
Объекты в базе данных
Массивы
Вложенные таблицы
Спецификации доступа
Объектные представления
Oracle 9i
Заключение
Литература