27 сентября 2015

Домашнее задание №3

TL;DR: нужно написать код простого приложения, общающегося с БД через API. Исходники для генерации схемы и данных тут: hw03.zip

Установка

Для того, чтобы протестировать приложение, нужно запустить Postgres, создать схему и заполнить БД данными. Команды, создающие схему, и питоновский скрипт, генерирующий данные, предполагают, что Постгрес запущен на локальной машине на стандартном для него порту 5432 и в нем есть пользователь postgres с паролем csc.
Инструкции по установке постгреса для вашей OS ищите на сайте постгреса. Те, кто пользуется Докером (разве кто-то еще не пользуется Докером?), могут установить и запустить постгрес командой
docker run --name postgres-dbms-2015-hw03 -e POSTGRES_PASSWORD=csc -d -p 5432:5432 postgres
Если докеровского образа с постгресом у вас еще нет то он будет скачан (несколько десятков мегабайт). Постгрес запустится так, как написано выше (порт, пользователь, пароль)
Кроме постгреса вам понадобится python. В python 3 скорее всего всё тоже будет работать, но выяснять при проверке и чтении каждого из ваших сорока решений, какой же там нынче используется питон, совершенно не хочется. Поэтому если вы можете использовать Python 2, используйте пожалуйста его.
Для работы с постгресом из питона нужно будет установить пакет psycopg2. Пользователи Ubuntu/Debian могут поставить его командой
apt-get install python-psycopg2
Пользователи других систем - обратитесь к документации об установке питоновских пакетов для вашей системы.

Генерация схемы и данных

В архиве hw03.zip находятся несколько файлов.

-- генерация схемы
psql -h localhost -U postgres < 01_gen_schema.sql
-- заполнение схемы данными
python 02_gen_data.py
-- проход по содержимому таблицы Conference
python 03_scan_conference.py

Докеровский образ с готовыми данными

Можно воспользоваться докеровским образом, в котором уже сгенерирована схема и данные. Команда
docker run --name postgres-dbms-2015-hw03 -d -p 5432:5432 dbarashev/postgres:csc_hw03
должна его скачать и запустить постгрес, в котором уже всё есть. Локальный питон и psycopg2 вам всё равно потребуются.

Схема БД

У вас есть 4 таблицы: University(university_id, name), Researcher(researcher_id, name, university_id), Conference(conference_id, name) и Participant(conference_id, researcher_id). Думаю, что их смысл очевиден из названий таблиц и столбцов.

Задание

Вам нужно написать два скрипта. Первый для каждой конференции должен посчитать количество её участников, работающих в заданном университете. Название университета передавайте в аргументах командной строки. Запуск скрипта должен выглядеть примерно так:
python hw3_01.py Uni42
Второй скрипт должен перевести всех исследователей из одного университета в другой, а первый университет удалить. Названия университетов тоже передавайте в командной строке. Запуск должен выглядеть примерно такЖ
python hw3_02.py Uni42 Uni24
После этого Uni42 должен быть удален, а все, кто в нем работал, должны оказаться в Uni24

Замечания

Задачу можно решить разными способами. Если вы знаете хороший, то прекрасно, воспользуйтесь им. Если хорошего не знаете, то решите каким-то, и нам будет о чем поговорить на занятии. Будет неплохо, если вы вкратце опишете своё решение в сопроводительном тексте. Например иду циклом в питоне по исследователям из первого университета и для каждого выполняю запрос...
Помните, что задание не на искусство написания красивого и непонятного питоновского кода. Чем проще будет этот код, тем лучше.

Как сдавать решение

Присылайте решения в виде текстовых файлов с расширением .py в кодировке UTF-8 на адрес dbms@barashev.net. Если можете прицепить два файла, то так и сделайте, если нет, то положите в ZIP архив. Писать код в тексте письма не нужно.

Дедлайн: вечер 12 октября
Если у вас возникнут какие-нибудь нетривиальные идеи, не поленитесь написать комментарий, поясняющий их.

18 сентября 2015

Домашнее задание №2

Задание

Вы делаете информационную систему для рецензирования статей. Она будет работать примерно так:
  • Авторы присылают вам статью - название, текст и список тематических меток, которые они берут из специального единого классификатора. Кроме этого авторы указывают, на какую конференцию они подают статью. Сами авторы вам с точки зрения системы неинтересны и хранить вы их не собираетесь
  • У каждой конференции есть название, место (одно) и даты проведения (начало и конец)
  • У каждой конференции есть программный комитет. У члена программного комитета есть имя, email и известен список тем, из все того же классификатора, в которых он специалист.
  • Статья отправляется на рецензирование нескольким членам программного комитета и каждый ставит ей какую-то оценку -- целое число в интервале [1..4]
Конференций может быть много. Один и тот же ученый может состоять в программных комитетах разных конференций. Член программного комитета может рецензировать много статей. Одноименных объектов не бывает (ни статей, ни конференций, ни ученых).
Составьте схему БД для хранения этих данных. Результатом должен быть скрипт из нескольких операторов CREATE TABLE. Хранить нужно все данные, упомянутые выше, за исключением авторов статьи.

Куда присылать

Присылайте решения на почту dbms@barashev.net  в виде одного текстового файла с расширением .txt или .sql в кодировке UTF-8. Сжимать файл архиватором не нужно. 
Если у вас возникнут какие-нибудь нетривиальные идеи, не поленитесь написать комментарий, поясняющий их.
Срок сдачи:  22 сентября 2015 23:59

10 сентября 2015

Домашнее задание №1

В приложенном файле находится скрипт, который создает в базе данных две таблицы и заполняет их данными.
В таблице Researcher указаны сведения об ученых-исследователях: имя и название университета. В таблице Paper записаны статьи, поданные на конференции: название статьи, список авторов (отдельные авторы разделены запятыми), название и год конференции (год отделен от названия апострофом), место проведения конференции и булевский флажок, означающий, принята статья на конференцию, или нет.
Скрипт можно выполнить командой psql -h localhost -f hw01_dump.sql, опционально добавив аргументы -d <database> и -U <username> и указывая, соответственно, название БД, в которой надо выполнять скрипт и имя пользователя БД, от чьего имени выполняется скрипт

Задание

  1. Напишите запрос, который для заданного университета вернет названия статей, в авторы которых входят ученые этого университета
  2. Напишите запрос, возвращающий университеты, в которых работают ученые, чьи статьи не были приняты на конференцию
  3. Напишите запрос, возвращающий место проведения конференции DBLP'13
  4. Напишите запрос, возвращающий все города из США (USA), в которых проводились конференции.
В процессе написания запросов вы обязательно столкнетесь с некоторыми трудностями. Вы их геройски преодолеете, но подумайте, что можно было бы сделать со схемой и данными, чтобы трудностей было поменьше, и мысли запишите в тексте решения

Куда присылать

Присылайте файлы с кодом и мыслями об улучшении схемы на почту dbms@barashev.net 
Срок сдачи: 15 сентября 2015 23:59

[1] Скрипт hw01_dump.sql

06 сентября 2015

Рекомендации по прохождению практики

Вступительный тест проверен, рекомендации насчёт того, к кому идти на практику смотрите в табличке. Ещё раз напомню, что

  • это всего лишь необязательная к исполнению рекомендация.
  • при условии адекватного выбора сложность прохождения практики примерно одинаковая.
  • на практике у Дмитрия Барашева (обозначен в табличке как ДБ) занимаются прикладным программированием на SQL и, возможно, Python.
  • на практике у Дмитрия Зворыгина (обозначен в табличке как ДЗ) занимаются реализацией частей ядра СУБД на C++/Java/других языках

02 сентября 2015

Курс "Базы Данных" в Академическом Университете. Осень 2015

Кому читается

Первый курс магистратуры, направление Software Engineering.

Где и когда

В здании Академического Университета на улице Хлопина. Лекции по средам в 12:00, практика по средам в 14:00.

Отчетность

  • Курс состоит из теоретических лекций и практических занятий. 
  • Отчетностью является практический зачёт и письменный дифференцируемый зачет по теоретической части. 
  • Условия получения или неполучения зачёта по практике определяются преподавателем практики
  • Теоретический зачет состоит из нескольких (до десяти) заданий-вопросов, на которые нужно дать обоснованный ответ.
  • Если практический зачёт получен, то итоговая оценка равна оценке теоретического зачёта. Если он не получен, то из оценки, полученной на теорзачёте, вычитается 1 балл.
  • Какие-либо дополнительные задания, которые возможно будут на лекциях, непосредственного влияния на итоговую оценку не оказывают

    Короткое резюме: если справился с практикой, получишь ровно то, что заработал на теорзачёте. Если не справился с практикой, получишь то, что заработал на теорзачёте минус 1 балл

Практика

Практика у Дмитрия Барашева: изучение методов проектирования схемы БД, написание запросов на SQL. Рекомендуется тем, кто не имеет практического опыта разработки баз данных

Практика у Дмитрия Зворыгина: реализация своей собственной игрушечной СУБД на языке типа Java/C++. Рекомендуется тем, кто достаточно хорошо знаком с SQL и проектированием БД и готов попробовать более сложные задачи. 

Сложность получения зачета в обоих вариантах одинаковая.

Контакты

Электропочта: dbms@barashev.net
Веб: dbms.barashev.net