Программа курса лекций "Базы данных в научных исследованиях" 
Уткин А.Б.
Введение в теорию баз данных
1.	Введение. 
Информационные системы и их связь с файловой системой. Общие черты информационных систем. Определение понятия Системы Управления Базами Данных (СУБД). Отличительные признаки и ключевые свойства СУБД (управление данными во внешней и оперативной памяти, управление транзакциями, журнализация). Журнал и его роль в поддержании целостности данных. Цели и задачи Schema Definition Language (SDL), Data Manipulation Language (DML). 
2.	Составные части СУБД.
Ядро, синтаксический анализатор, подсистема поддержки времени исполнения, системные утилиты. Дореляционные подходы к организации баз данных (БД): БД на основе инвертированных списков, иерархические БД, сетевые БД. Достоинства и недостатки дореляционных систем. 
3.	Основные понятия реляционной теории
Термины: домен, атрибут, кортеж, первичный ключ, отношение. Их синонимы из технической документации. Отношения и их фундаментальные свойства. Реляционная модель данных (общие принципы построения реляционных СУБД). Определение и основные операции реляционной алгебры. 

Проектирование структуры баз данных
4.	Задачи логического и физического проектирования
Логическая модель БД: сущности, атрибуты, связи. Понятие ключа для сущности. Разделение ключей по классам (возможный, первичный, альтернативный, общий, внешний) и типам (простые, составные). Типы связей (один к одному, один ко многим, многие ко многим). Термин обязательности связи. Частные случаи связи: зависимость и рекурсия. ER-диаграммы. 
5.	Нормализация данных
Определение первой, второй и третьей нормальных форм. Общее представление о четвертой и пятой нормальных формах. Денормализация и ее причины. Переход от логической модели представления данных к физической. Промежуточные (предварительные) таблицы и операция раскрытия связей. Особенности раскрытия связи 'многие ко многим'. 

SQL
6.	Введение в SQL и его DDL подмножество.
История создания языка SQL. Шесть основных категорий SQL. Диалекты языка (Transact SQL или T-SQL, SQL Plus, стандарт SQL-92). Подмножество SQL - Data Definition Language (DDL). Оператор CREATE. Имя образование объектов СУБД и стандартные типы данных. Использование уникального ключа, ограничений (первичного и вторичного ключей, деловых правил), значений по умолчанию. Вычисляемые столбцы. Модификация структуры таблицы и оператор ALTER. 
7.	DQL подмножество SQL
Выполнение запросов к существующим БД с использованием Data Query Language (DQL). Синтаксис оператора SELECT. Обзор семи его подразделов (списка выборки, секций FROM, WHERE, GROUP BY, HAVING, OREDER BY, COMPUTE). Термин 'итоговый набор'. Использование псевдонимов. Полное именование объектов в MS SQL Server. Подсекции секции WHERE: IN, LIKE, BETWEEN, проверка значения атрибута на NULL. Способы упорядочивания итогового набора в секции OREDER BY. 
8.	Объединения.
Основные задачи объединений. Типы объединений: ортогональные, внутренние, внешние. Рассмотрение левого, правого и полного внешних объединений. Примеры в стандартах T-SQL и SQL-92. Представления - цели реализации и способы использования. Синтаксис. 
9.	DML подмножество SQL
Модификация данных с использованием Data Manipulation Language (DML). Операторы INSERT, UPDATE, DELETE. Допустимый синтаксис. Особенности вставки новых записей при наличии атрибутов, имеющих значение по умолчанию. Ограничения DML при работе с представлениями. 
10.	Использование курсоров
Модификация данных с использованием курсоров. Клиентские и серверные курсоры. Особенности 'курсорного' подхода к модификации данных локализация возможных источников проблем. Классификация курсоров по типу навигации: последовательные и прокручиваемые; по возможности изменения данных: модифицирующие и не модифицирующие. Оптимизация доступа к данным через выбор правильного типа курсора: статического, ключевого, последовательного или динамического. Жизненный цикл курсора. Рассмотрение команд создания, открытия, закрытия и освобождения курсоров. Команды навигации по итоговому набору и модификации данных. 
11.	Переменные в SQL
Локальные и глобальные переменные. Назначение наиболее употребительных глобальных переменных: @@VERSION, @@SERVERNAME, @@ERROR, @@ROWCOUNT, @@TRANCOUNT, @@CURSOR_ROWS, @@FETCH_STATUS 
12.	Хранимые процедуры
Определение внутренних и внешних хранимых процедур (преимущества и недостатки внешних хранимых процедур, загружаемых из DLL). Основные достоинства применения хранимых процедур. Синтаксис создания внутренних хранимых процедур - оператор CREATE. Деление процедур на постоянные и временные, глобальные и локальные. Способы вызова хранимых процедур, в том числе с параметрами, значения которых заданы по умолчанию (оператор EXEC). Удаление и модификация хранимых процедур. Расширенные конструкции T-SQL: IF...ELSE, BEGIN...END, WHILE...BREAK...CONTINUE, GOTO, WAITFOR. 
13.	Транзакции
Определение транзакции. Основные свойства транзакции: атомарность, согласованность, изолированность, устойчивость. Основные цели использования. Способы поддержки транзакций: автоматический, явный, неявный. Команды управления транзакциями и точками сохранения. Вложенные транзакции. Откат вложенных транзакций. Распределенные транзакции. 
14.	Блокировки (уровни изоляции транзакций). 
Рассмотрение проблем, возникающих при одновременной работе нескольких транзакций и методы их устранения (проблема последнего изменения, проблема 'грязного' чтения, проблема повторного чтения, проблема чтения фантомов). Синтаксис изменения уровня изолированности транзакций. Гранулярность распространения блокировок. Роль хинтов в операторах SELECT, UPDATE, INSERT, DELETE. 'Мертвые' блокировки и способы их устранения. Установка цены транзакции. 
15.	Триггеры.
Определение и способы использования. Связь триггеров и транзакций. Базовые события модификации данных: вставка, обновление, удаление. Синтаксис создания и удаления триггеров. Составные триггеры (роль атрибута WITH APPEND). Представления записей журнала - виртуальные таблицы deleted и inserted. Границы видимости и содержание таблиц deleted и inserted. Примеры реализации ссылочной целостности с использованием триггеров. Откат триггера и/или транзакции из тела триггера. Синтаксические конструкции IF...UPDATE() и IF...COLUMNS_UPDATED(). Вложенные триггеры. Проблема рекурсивного вызова и глобальная переменная @@NESTLEVEL. 

Основная литература:
1.	Дж.Р.Гарбус, Д.Ф.Паскузи, Э.Т.Чанг, "Database Design on SQL 7. Сертификационный экзамен - экстерном (экзамен 70-029)" (красная книжка на рус. яз. в мягком переплете), СПб, "Питер", 2000. 
2.	Е.Мамаев, "SQL Server 7.0: проектирование и реализация баз данных" (синяя книжка на рус. яз. в мягком переплете), СПб, "БХВ - Санкт-Петербург", 2000. 
3.	Ю.Тихомиров, "Microsoft SQL Server 7.0" (серая книжка на рус. яз. в мягком переплете), СПб, "БХВ - Санкт-Петербург", 1999. 
4.	http://msdn.microsoft.com/ 
5.	Центр Информационных Технологий - Базы данных