Задание №0 по курсу «Программирование баз данных» Создание базы данных и написание SQL-запросов к ней Краткое описание и сроки 1. Спроектировать небольшую реляционную базу данных для предметной области, заданной набором ключевых слов. Результат проектирования – это диаграмма схемы БД, включающая таблицы и связи между ними (внешние ключи). 2. Ввести схему БД в СУБД (на языке DDL) 3. Заполнить БД осмысленными данными (на языке DML). 4. Написать осмысленные запросы на выборку введенных данных (select). Как правило, на занятии 2 выполняется и сдается этап №1, а также выполняется этап №2; на занятии 3 выполняется этап №3 и начало этапа №4; на занятии 4 доделывается этап №4, и сдается результат этапов №№2-4. Этап 1. Проектирование БД При описании варианта подлежащей проектированию предметной области (см. файл DBVariants.doc) указан просто набор ключевых данных, которые подлежат хранению; они далеко не всегда совпадают с таблицами! В описании многих вариантов есть дублирования, недостающие элементы и с другие некорректности – так, как если бы задача ставилась неспециалистом в области информационных технологий. Результат проектирования представляется в виде нарисованной от руки диаграммы типа Entity-Relationship (можно использовать любую нотацию). Желающим получить практические навыки по проектированию рекомендуется в качестве домашнего задания использовать CASE-средства, например, DBDesigner (бесплатное), MS Visio или ERwin. Таблицы и столбцы следует называть полными именами; все имена либо на английском языке, либо (если с английским проблемы) – на транслите. Смысловые части имени рекомендуется разделять символом подчеркивания и писать все в одном регистре. Оценка этапа. Каждая таблица дает 1 балл, также 1 балл дает моделирование одной сложной ситуации (например, наследование или иная связь 1:1). Каждая грубая ошибка проектирования дает минус 1 балл. Достаточно создать 3 таблицы (т.е. получить 3-4 балла); хотя интересующиеся проектированием могут создать больше (для них максимальная оценка за этап – 7). Этап 2. Data Definition Language После проверки преподавателем схемы БД, спроектированной на этапе №1, необходимо на ее основе создать и проверить DDL-скрипт создания таблиц и связей между ними. Рекомендуется проверять в СУБД PostgreSQL, в то время как на семинаре DDL-инструкции будут выполняться в СУБД Oracle; в той же БД Oracle (адрес БД 192.188.189.9:1521:XE) рекомендуется выполнять этот и последующие этапы задания тем, кто по каким-то причинам делает их дома, а не на занятиях. Этап 3. Data Manipulation Language Наполнение таблиц должно соответствовать потребностям запросов на выборку (этап 4), других требований к числу и содержанию вводимых строк нет. Оценка этапов 2-3. Каждая таблица дает 1 балл, ее заполнение через SQL – 0.5 балла, каждый внешний ключ (независимо от способа ввода create table / alter table) – 0.5 балла (для относительно больших БД необязательно вводить все спроектированные таблицы и связи) . Если DMLскрипт содержит не только оператор INSERT, но и UPDATE, это дает еще 1 балл; с учетом этого типичная оценка за этапы 2-3 – 6-7 баллов. Желающие могут также создать осмысленные индексы (по 0.5 балла за каждый) и последовательности (sequence; по 0.5 балла за каждую; должны использоваться на этапе 3). Максимальная оценка за этапы 2-3 – 10. Этап 4. Запросы на выборку (Data Query Language) Требуется написать и протестировать SQL-запросы к таблицам, созданным и наполненным на предыдущих этапах. Если эти этапы 3 не выполнялись (или выполнялись частично), можно создать и наполнить таблицы с помощью графического редактора, поставляемого вместе с СУБД (само по себе это дает по 1 баллу за таблицу вместо оценок за этапы 1-2-3). В классе такой редактор есть только для СУБД PostreSQL. При сдаче запроса должен быть четко сформулирован соответствующий вопрос на русском языке (лучше его написать рядом с запросом). Примерный набор требуемых запросов (и особенностей запросов): 1. Выбор значений заданных атрибутов из более чем 2х таблиц с сортировкой 2. Использование условий WHERE, отличных от (=, <, >) 3. Запрос с использованием внешнего соединения 4. Уместное использование однострочных функций 5. Вычисление групповой функции (GROUP BY) (с HAVING или с несколькими таблицами – 2 балла). 6. Запрос с использованием подзапросов (многострочный подзапрос – 2 балла) 7. Уместное использование представления (view) 8. Запрос с использованием какой-нибудь теоретико-множественной операции (объединение, пересечение, разность) над результатами выборок Все запросы (кроме 5, 8) должны затрагивать не менее двух таблиц. Оценка этапа. Каждый пункт из вышеуказанного списка дает 1 балл (если не указано иначе). Сдается не менее 3 и не более 7 запросов, и типичная оценка за них – 5-6 баллов. Максимальная оценка за этап 4 – 10. ИТОГО в результате выполнения всех этапов задания успевающий студент получает около 16 баллов (максимум – 27 баллов, но он, как правило, недостижим). Дополнительная информация для желающих углубить свои знания Этап 1 – любые учебные пособия по проектированию БД, например, http://www.citforum.ru/database/dbguide/index.shtml (пособие В.В. Кириллова «Основы проектирования реляционных баз данных») Этапы 2-3 – многие учебные пособия по SQL, например, http://www.citforum.ru/database/dblearn/dblearn05.shtml (Глава 5 пособия А.Ю. Пушникова «Введение в системы управления базами данных»), http://www.citforum.ru/database/osbd/glava_58.shtml (Лекция 14 учебника С.Д. Кузнецова «Основы современных баз данных») Этап 4 – любые учебные пособия по SQL, например, http://www.mysql.ru/docs/gruber/ (Классическая книга М.Грубера «Введение в SQL»), http://www.sql.ru/docs/sql/u_sql/index.shtml («Продвинутая» книга Грубера «Понимание SQL») http://www.citforum.ru/database/osbd/glava_62.shtml (Лекция 15 учебника С.Д. Кузнецова) http://www.sql.ru/books/books.aspx?g=6&s=0 (список других книг)