Базы данных
Санкт-Петербург, осень 2014
Описание
Что будем делать
Курс предназначен для тех, у кого нет существенного практического опыта в разработке приложений баз данных. Мы рассмотрим основные этапы в создании приложения, включая создание схемы БД, написание SQL запросов и организацию эффективного взаимодействия между бизнес логикой и базой данных. Разбросаем грабли в ассортименте, попрыгаем по ним и выясним, как их обходить.
Курс построен по принципу сначала наступи на грабли, а потом узнай, как это можно было не делать
.
Домашние задания
Как правило, домашнее задание будет не традиционной проверкой усвоения материала после лекции, а специально заготовленными граблями, которые будут обсуждаться на лекции следующей. Обычно домашнее задание, может быть выполнено разными способами, более или менее эффективными (условно, плохим
и хорошим
). Знания, позволяющие оценить эффективность решения можно получить либо на разборе ДЗ на следующем занятии, либо изучением ресурсов в интернете. Оценка за ДЗ почти всегда будет ненулевой, если есть хоть какая-то попытка решения, до 50% если решение есть, но не самое эффективное. и больше 50% если решение достаточно хорошее.
Как будем оценивать
Оценка бинарная: зачет/незачет. Возможно, будет еще зачет с отличием
.
Зачет или незачет по курсу будет выставляться на основе домашних заданий. Те, кто регулярно решают ДЗ хорошим
способом, и набирают более 50% от суммы оценок за ДЗ, получают зачет автоматом, а те, кто набирают до 50%, получат в конце курса практическое задание, в котором надо будет не наступить на те же грабли, что рассматривались по ходу курса.
Преподаватели
Список лекций
Лекция в основном для тех, кто еще ничего не знает о реляционных СУБД. Немного об архитектуре, способах работы с СУБД, основных концепциях реляционной СУБД, простые операции и запросы. Первая порция граблей, связанных с очень простыми запросами, в качестве домашнего задания.
Разбор домашнего задания и обнаруженных граблей. Рефакторинг схемы БД с целью её нормализации и реализации связей между сущностями. Простейший код на Питоне, общающийся с PostgreSQL
Разбор домашнего задания №2 и выводы из него. Знакомство с операциями соединения, группировки и агрегатными функциями
Разбор домашнего задания и выяснение способов нахождения аргмаксимума значения агрегатной функции. Способы структуризации и повышения читаемости сложных SQL запросов. Способы анализа выполнения запроса СУБД
Разбираем и обсуждаем варианты решения домашнего задания на реализацию древовидных комментариев к багам: 1. Хранение отношения родитель-прямой потомок и выполнения рекурсивных запросов 2. Хранение транзитивного замыкания предок-потомок 3. Использование модели вложенных множеств 4. Использование путей в дереве и префиксов
Разбираем и обсуждаем домашнее задания на реализацию полиморфных ассоциаций, знакомиммся с транзакциями
Разбор домашнего задания и обсуждение моделей и абстракций, скрывающих операции с БД. Продолжение знакомства с транзакциями
Обсуждаем способы организации совместного доступа к данным, выходящие за пределы транзакций. Compare and Swap, пользовательские блокировки, выборка данных с одновременной блокировкой
Рассматриваем способы кросстабуляции: превращения таблицы из N строк, 3 колонок и M различных значений во второй колонке в матрицу NxM
Это можно сделать как чистым
SQL (GROUP BY + CASE + CTE) так и спецсредствами PostgreSQL
Рассматриваем задачу поиска медианы выборки. Ее тоже можно решить как чистым
SQL так и спецсредствами: оконными функциями
Если есть что обсудить по результатам курса, давайте обсудим