Базы данных

Санкт-Петербург, осень 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 так и спецсредствами: оконными функциями

Postmortem анализ

Если есть что обсудить по результатам курса, давайте обсудим