День открытых дверей по курсу «MS SQL Server Developer» 20.02.2020 в 20:00 | OTUS
Запланируйте обучение с выгодой в Otus!
-15% на все курсы до 20.11 Забрать скидку! →
Выбрать курс
Проходил 20 февраля 2020 года в 20:00

День открытых дверей
Все о курсе «MS SQL Server разработчик»

День открытых дверей онлайн

День Открытых Дверей — отличная возможность задать все вопросы по курсу, узнать подробнее о программе, особенностях онлайн-формата, навыках, компетенциях и перспективах, которые ждут выпускников после обучения. Также преподаватель расскажет о себе и своём профессиональном опыте. Поэтому если есть вопрос, запишитесь на онлайн-трансляцию и задайте его в прямом эфире!
Преподаватель
Кристина Кучерова

Запись

О курсе

MS SQL Server Developer
89 000 ₽
Начало 16 апреля 2025 года

Во время курса будем подробно разбирать язык запросов и внутренние процессы СУБД, происходящие на всех этапах работы с запросом. Курс позволит понять детали процессов и получить чёткое представление, что делает тот или иной код, где могут возникнуть потенциальные проблемы, как их можно разрешить. Подробно рассмотрим оптимизацию кода, как нужно писать, если у вас миллиарды данных, расскажем о популярных граблях, чтобы …

Программа курса
Модуль 1
Использование БД
Модуль 2
Проектирование БД
Модуль 3
Логика на серверной стороне
Модуль 4
OLTP, OLAP, SSIS, SSRS
Модуль 5
Оптимизация и администрирование БД
Использование БД
Учимся использовать SQL Server, изучаем нюансы диалекта SQL и планы запросов
Основные компоненты и архитектура SQL Server. ДЗ
знать разные виды систем управления баз данных и самих БД;
знать основные компоненты и архитектуру SQL Server;
быть знакомым с новыми возможностями SQL Server;
развернуть бэкап учебной базы.
Домашние задания: 1
ДЗ
Установить SQL Server и необходимые инструменты.
Подробно выполнение ДЗ описано в методичке в личном кабинете (файл "Настройка окружения.pdf").


Для сдачи ДЗ пришлите ссылку на ваш репозиторий в чат с преподователем.


== Обязательная часть ==

1. Создайте github-репозиторий для хранения выполненных домашних заданий.

2. Установите SQL Server 2016\2017\2019 и SQL Server Management Studio.

3. Разверните у себя бэкап базы WideWorldImporters (из файла WideWorldImporters-Full.bak). Сделайте скриншот с восстановленной БД WideWorldImporters и выполненным select @@version. Скриншот разместите в вашем github-репозитории.

4. Прочитайте описание БД WideWorldImporters:
* https://docs.microsoft.com/en-us/sql/samples/wide-world-importers-what-is
* https://docs.microsoft.com/en-us/sql/samples/wide-world-importers-oltp-database-catalog


== Опциональная часть ==

5. Поставьте также SQL Sentry Plan Explorer и Visual Studio. Сейчас это необязательно, можно поставить позже, когда будут соответствующие темы.

6. В рамках курса предусмотрен проект. Работа над ним будет со второго модуля. Но если у вас уже есть идеи по проекту, то можете сделать его краткое описание.

Формат сдачи ДЗ: отправьте скриншот восстановленой БД WideWorldImporters в чат ДЗ.
Оператор SELECT и простые фильтры, JOIN. ДЗ
научиться делать выборки используя оператор SELECT;
использовать простые фильтры в WHERE и объединение условий;
попробовать разные виды JOIN.
Домашние задания: 1
ДЗ
Запросы SELECT.
Более подробно задание описано в материалах в личном кабинете.


Напишите выборки для того, чтобы получить:

1. Все товары, в названии которых есть "urgent" или название начинается с "Animal".

2. Поставщиков (Suppliers), у которых не было сделано ни одного заказа (PurchaseOrders).

3. Заказы (Orders) с ценой товара (UnitPrice) более 100$ либо количеством единиц (Quantity) товара более 20 штуки присутствующей датой комплектации всего заказа (PickingCompletedWhen).

4. Заказы поставщикам (Purchasing.Suppliers), которые должны быть исполнены (ExpectedDeliveryDate) в январе 2013 года с доставкой "Air Freight" или "Refrigerated Air Freight" (DeliveryMethodName) и которые исполнены (IsOrderFinalized).

5. Десять последних продаж (по дате продажи) с именем клиента и именем сотрудника, который оформил заказ (SalespersonPerson). Сделать без подзапросов.

6. Все ид и имена клиентов и их контактные телефоны, которые покупали товар "Chocolate frogs 250g".
Агрегатные функции, GROUP BY, HAVING. ДЗ
писать запрос с использованием GROUP BY и HAVING;
писать запрос с CUBE и ROLLUP;
перечислить отличие HAVING и WHERE.
Домашние задания: 1
ДЗ
Запросы GROUP BY, HAVING.
Более подробно задание описано в материалах в личном кабинете.


Напишите выборки для того, чтобы получить:

1. Посчитать среднюю цену товара, общую сумму продажи по месяцам.

2. Отобразить все месяцы, где общая сумма продаж превысила 4 600 000.

3. Вывести сумму продаж, дату первой продажи и количество проданного по месяцам, по товарам, продажи которых менее 50 ед в месяц. Группировка должна быть по году, месяцу, товару.


Опционально:

Написать запросы 2-3 так, чтобы если в каком-то месяце не было продаж,
то этот месяц также отображался бы в результатах, но там были нули.
Подзапросы, CTE, временные таблицы. ДЗ
писать запросы с использованием подзапросов;
рассказать, что будет в результате выполнения запроса, без его запуска;
создавать временные таблицы и табличные переменные;
объяснять разницу между этими объектами.
Домашние задания: 1
ДЗ
Подзапросы и CTE.
Для всех заданий, где возможно, сделайте два варианта запросов:
1) через вложенный запрос
2) через WITH (для производных таблиц)


Напишите запросы:
1. Выберите сотрудников (Application.People), которые являются продажниками (IsSalesPerson), и не сделали ни одной продажи 04 июля 2015 года. Вывести ИД сотрудника и его полное имя. Продажи смотреть в таблице Sales.Invoices.

2. Выберите товары с минимальной ценой (подзапросом). Сделайте два варианта подзапроса. Вывести: ИД товара, наименование товара, цена.

3. Выберите информацию по клиентам, которые перевели компании пять максимальных платежей из Sales.CustomerTransactions. Представьте несколько способов (в том числе с CTE).

4. Выберите города (ид и название), в которые были доставлены товары, входящие в тройку самых дорогих товаров, а также имя сотрудника, который осуществлял упаковку заказов (PackedByPersonID).


Опционально:

5. Объясните, что делает и оптимизируйте запрос:
SELECT
Invoices.InvoiceID,
Invoices.InvoiceDate,
(SELECT People.FullName
FROM Application.People
WHERE People.PersonID = Invoices.SalespersonPersonID
) AS SalesPersonName,
SalesTotals.TotalSumm AS TotalSummByInvoice,
(SELECT SUM(OrderLines.PickedQuantity*OrderLines.UnitPrice)
FROM Sales.OrderLines
WHERE OrderLines.OrderId = (SELECT Orders.OrderId
FROM Sales.Orders
WHERE Orders.PickingCompletedWhen IS NOT NULL
AND Orders.OrderId = Invoices.OrderId)
) AS TotalSummForPickedItems
FROM Sales.Invoices
JOIN
(SELECT InvoiceId, SUM(Quantity*UnitPrice) AS TotalSumm
FROM Sales.InvoiceLines
GROUP BY InvoiceId
HAVING SUM(Quantity*UnitPrice) > 27000) AS SalesTotals
ON Invoices.InvoiceID = SalesTotals.InvoiceID
ORDER BY TotalSumm DESC

Можно двигаться как в сторону улучшения читабельности запроса, так и в сторону упрощения плана\ускорения. Сравнить производительность запросов можно через SET STATISTICS IO, TIME ON. Если знакомы с планами запросов, то используйте их (тогда к решению также приложите планы). Напишите ваши рассуждения по поводу оптимизации.
Введение в индексы
создавать простые индексы
объяснять какие поля нужны в индексах
создавать индексы под запросы
Бонусное занятие. Введение в планы запросов
читать и объяснять план запроса;
оценивать разные запросы и сравнивать их стоимость.
21 ноября, 20:00 — 21:30
Лектор: Кристина Кучерова
Оконные функции. ДЗ
писать запросы с использованием оконных функций;
проходить тест по оконным функциям.
25 ноября, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Домашние задания: 1
ДЗ
Оконные функции. Более подробно задание описано в материалах в личном кабинете.

1. Сделать расчет суммы продаж нарастающим итогом по месяцам с 2015 года
(в рамках одного месяца он будет одинаковый, нарастать будет в течение времени выборки).
Нарастающий итог должен быть без оконной функции.

2. Сделайте расчет суммы нарастающим итогом в предыдущем запросе с помощью оконной функции.
Сравните производительность запросов 1 и 2 с помощью set statistics time, io on

3. Вывести список 2х самых популярных продуктов (по количеству проданных)
в каждом месяце за 2016 год (по 2 самых популярных продукта в каждом месяце).

4. Функции одним запросом
Посчитайте по таблице товаров (в вывод также должен попасть ид товара, название, брэнд и цена):
* пронумеруйте записи по названию товара, так чтобы при изменении буквы алфавита нумерация начиналась заново
* посчитайте общее количество товаров и выведете полем в этом же запросе
* посчитайте общее количество товаров в зависимости от первой буквы названия товара
* отобразите следующий id товара исходя из того, что порядок отображения товаров по имени
* предыдущий ид товара с тем же порядком отображения (по имени)
* названия товара 2 строки назад, в случае если предыдущей строки нет нужно вывести "No items"
* сформируйте 30 групп товаров по полю вес товара на 1 шт


Для этой задачи НЕ нужно писать аналог без аналитических функций.

5. По каждому сотруднику выведите последнего клиента, которому сотрудник что-то продал.
В результатах должны быть ид и фамилия сотрудника, ид и название клиента, дата продажи, сумму сделки.

6. Выберите по каждому клиенту два самых дорогих товара, которые он покупал.
В результатах должно быть ид клиета, его название, ид товара, цена, дата покупки.


Опционально можете для каждого запроса без оконных функций сделать вариант запросов с оконными функциями и сравнить их производительность.
Операторы CROSS APPLY, PIVOT, UNPIVOT. ДЗ
писать запросы с использованием CROSS APPLY, PIVOT и UNPIVOT;
описывать значение операторов.
28 ноября, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Домашние задания: 1
ДЗ
Pivot и Cross Apply. Более подробно задание описано в материалах в личном кабинете.

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

2. Для всех клиентов с именем, в котором есть "Tailspin Toys"
вывести все адреса, которые есть в таблице, в одной колонке.

3. В таблице стран (Application.Countries) есть поля с цифровым кодом страны и с буквенным.
Сделайте выборку ИД страны, названия и ее кода так,
чтобы в поле с кодом был либо цифровой либо буквенный код.

4. Выберите по каждому клиенту два самых дорогих товара, которые он покупал.
В результатах должно быть ид клиета, его название, ид товара, цена, дата покупки.
Динамический SQL. ДЗ
создавать процедуры с использованием динамического SQL;
перечислять ошибки при использовании динамического SQL, которые ведут к угрозам безопасности;
объяснить как можно сохранять план запроса по динамическому SQL.
2 декабря, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Домашние задания: 1
ДЗ
Динамический PIVOT.
Более подробно задание описано в материалах в личном кабинете.


Пишем динамический PIVOT.

По заданию из занятия "Операторы CROSS APPLY, PIVOT, UNPIVOT".


Требуется написать запрос, который в результате своего выполнения
формирует сводку по количеству покупок в разрезе клиентов и месяцев.

В строках должны быть месяцы (дата начала месяца), в столбцах - клиенты.


Нужно написать запрос, который будет генерировать результаты для всех клиентов.

Имя клиента указывать полностью из поля CustomerName.
Операторы изменения данных. ДЗ
использовать операторы INSERT, UPDATE, UPSERT, DELETE, MERGE, BULK INSERT;
использовать утилиту bcp.
5 декабря, 20:00 — 21:30
Лектор: Марина Васильева
Домашние задания: 1
ДЗ
Insert, Update, Merge. 1. Довставлять в базу пять записей используя insert в таблицу Customers или Suppliers
2. Удалите одну запись из Customers, которая была вами добавлена
3. Изменить одну запись, из добавленных через UPDATE
4. Написать MERGE, который вставит вставит запись в клиенты, если ее там нет, и изменит если она уже есть
5. Напишите запрос, который выгрузит данные через bcp out и загрузить через bulk insert
Выборки из XML и JSON полей. ДЗ
писать выборки из XML полей;
писать выборки из JSON полей.
12 декабря, 20:00 — 21:30
Лектор: Кристина Кучерова
Домашние задания: 1
ДЗ
XML и JSON. 1. В личном кабинете есть файл StockItems.xml.
Это данные из таблицы Warehouse.StockItems.
Преобразовать эти данные в плоскую таблицу с полями, аналогичными Warehouse.StockItems.
Поля: StockItemName, SupplierID, UnitPackageID, OuterPackageID, QuantityPerOuter, TypicalWeightPerUnit, LeadTimeDays, IsChillerStock, TaxRate, UnitPrice

Загрузить эти данные в таблицу Warehouse.StockItems.
Существующие записи в таблице обновить, отсутствующие добавить (сопоставлять записи по полю StockItemName).

Сделать два варианта: с помощью OPENXML и через XQuery.

2. Выгрузить данные из таблицы StockItems в такой же xml-файл, как StockItems.xml

Примечания к заданиям 1, 2:
* Если с выгрузкой в файл будут проблемы, то можно сделать просто SELECT c результатом в виде XML.
* Если у вас в проекте предусмотрен экспорт/импорт в XML, то можете взять свой XML и свои таблицы.
* Если с этим XML вам будет скучно, то можете взять любые открытые данные и импортировать их в таблицы (например, с https://data.gov.ru).
* Пример экспорта/импорта в файл https://docs.microsoft.com/en-us/sql/relational-databases/import-export/examples-of-bulk-import-and-export-of-xml-documents-sql-server

3. В таблице Warehouse.StockItems в колонке CustomFields есть данные в JSON.
Написать SELECT для вывода:
- StockItemID
- StockItemName
- CountryOfManufacture (из CustomFields)
- FirstTag (из поля CustomFields, первое значение из массива Tags)

4. Найти в StockItems строки, где есть тэг "Vintage".
Вывести:
- StockItemID
- StockItemName
- (опционально) все теги (из CustomFields) через запятую в одном поле


Тэги искать в поле CustomFields, а не в Tags.

Запрос написать через функции работы с JSON.

Для поиска использовать равенство, использовать LIKE запрещено.


Должно быть в таком виде:

... where ... = 'Vintage'


Так принято не будет:

... where ... Tags like '%Vintage%'

... where ... CustomFields like '%Vintage%'
Итоговое занятие по SELECT
перечислять этапы выполнения запроса;
читать длинные запросы и рассказывать что должно получится после выполнения, без выполнения запроса.
16 декабря, 20:00 — 21:30
Лектор: Людмила Громницкая
Проектирование БД
Лучшие и худшие практики проектирования БД, начинаем делать свою проектную работу
Проектирование БД. ДЗ
проектировать БД;
нормализовывать таблицы.
19 декабря, 20:00 — 21:30
Лектор: Людмила Громницкая
Домашние задания: 1
ДЗ
Начало проекта.
Строим концептуальную и/или логическую модель БД для вашего проекта.

Приводим свою БД в 3ю нормальную форму, либо если таблица в 1нф или 2нф или не нормализована пишем, зачем и почему так лучше.

Обязательно описываем предметную область.

Инструменты и средства любые на ваше усмотрение или те, о которых говорилось на занятии.


В качестве проекта вы можете взять любую идею, которая вам близка и сделать схему базы данных, а затем создать ее.

Это может быть какая-то часть вашего рабочего проекта, которую вы хотите переосмыслить.

Если есть идея, но не понятно как ее уложить в рамки учебного проекта, напишите преподавателю и мы поможем.

На занятии-семинаре по представлению проектов в конце 2го модуля нужно будет показать схему БД, объяснить бизнес идею, а также технические решения, которые вы считаете важными.
Подходы к проектированию БД, паттерны
проектировать БД исходя из требований;
учитывать аспекты безопасности при проектировании БД.
23 декабря, 20:00 — 21:30
Лектор: Людмила Громницкая
Операторы DDL. ДЗ
создавать объекты БД с помощью своих SQL запросов.
26 декабря, 20:00 — 21:30
Лектор: Людмила Громницкая
Домашние задания: 1
ДЗ
Используем DDL. Начало проектной работы.

Создание таблиц и представлений для своего проекта.

Нужно написать операторы DDL для создания БД вашего проекта:
1. Создать базу данных.
2. 3-4 основные таблицы для своего проекта.
3. Первичные и внешние ключи для всех созданных таблиц.
4. 1-2 индекса на таблицы.
5. Наложите по одному ограничению в каждой таблице на ввод данных.


Обязательно (если еще нет) должно быть описание предметной области.
Индексы. ДЗ
создавать индексы;
определять какие индексы не нужны.
9 января, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Домашние задания: 1
ДЗ
Какие индексы вам нужны. Думаем какие запросы у вас будут в базе и добавляем для них индексы. Проверяем, что они используются в запросе.
Типы данных
разбираться в типах данных, используемых в SQL Server
13 января, 20:00 — 21:30
Лектор: Людмила Громницкая
Логика на серверной стороне
В этом модуле будут рассмотрена логика на серверной стороне
Хранимые процедуры, функции, триггеры, курсоры. ДЗ
создавать хранимые процедуры и функции;
объяснять различия;
объяснять хранение плана запроса по процедурам, функциям и запросам;
объяснять что такое триггер и как его создавать, в каких случаях они нужны.
16 января, 20:00 — 21:30
Лектор: Марина Васильева
Домашние задания: 1
ДЗ
Хранимые процедуры. Во всех заданиях написать хранимую процедуру / функцию и продемонстрировать ее использование.

1) Написать функцию возвращающую Клиента с наибольшей суммой покупки.
2) Написать хранимую процедуру с входящим параметром СustomerID, выводящую сумму покупки по этому клиенту.
Использовать таблицы :
Sales.Customers
Sales.Invoices
Sales.InvoiceLines
3) Создать одинаковую функцию и хранимую процедуру, посмотреть в чем разница в производительности и почему.
4) Создайте табличную функцию покажите как ее можно вызвать для каждой строки result set'а без использования цикла.
5) Опционально. Во всех процедурах укажите какой уровень изоляции транзакций вы бы использовали и почему.
Транзакции
объяснять разницу в уровнях изоляции транзакций;
проходить тест по тому какой уровень когда нужно применять;
объяснять какие блокировки каждый уровень накладывает;
создавать процедуры с обработкой ошибок на SQL.
20 января, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Обработка ошибок
понимать необходимость обработки ошибок
использовать RAISEERROR, THROW, TRY / CATCH
23 января, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Создание и использование CLR. ДЗ
создавать процедуры с использованием CLR.
27 января, 20:00 — 21:30
Лектор: Кристина Кучерова
Домашние задания: 1
ДЗ
Создаем CLR .
Варианты ДЗ (сделать любой один):

1) Взять готовую dll, подключить ее и продемонстрировать использование.
Например, https://sqlsharp.com

2) Взять готовые исходники из какой-нибудь статьи, скомпилировать, подключить dll, продемонстрировать использование.
Например,
https://www.sqlservercentral.com/articles/xlsexport-a-clr-procedure-to-export-proc-results-to-excel

https://www.mssqltips.com/sqlservertip/1344/clr-string-sort-function-in-sql-server/

https://habr.com/ru/post/88396/

3) Написать полностью свое (что-то одно):
* Тип: JSON с валидацией, IP / MAC - адреса, ...
* Функция: работа с JSON, ...
* Агрегат: аналог STRING_AGG, ...
* (любой ваш вариант)


Результат ДЗ:
* исходники (если они есть), желательно проект Visual Studio
* откомпилированная сборка dll
* скрипт подключения dll
* демонстрация использования
Очереди в MS SQL Server. ДЗ
создавать очереди в SQL Server.
30 января, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Домашние задания: 1
ДЗ
Создание очереди. Создание очереди в БД для фоновой обработки задачи в БД.

Подумайте и реализуйте очередь в рамках своего проекта.


Если в вашем проекте нет задачи, которая подходит под реализацию через очередь, то в качестве ДЗ:

Реализуйте очередь для БД WideWorldImporters:
1. Создайте очередь для формирования отчетов для клиентов по таблице Invoices. При вызове процедуры для создания отчета в очередь должна отправляться заявка.
2. При обработке очереди создавайте отчет по количеству заказов (Orders) по клиенту за заданный период времени и складывайте готовый отчет в новую таблицу.
3. Проверьте, что вы корректно открываете и закрываете диалоги и у нас они не копятся.
OLTP, OLAP, SSIS, SSRS
В этом модуле будут рассмотрены OLTP, OLAP, SSIS, SSRS
OLTP vs OLAP. In-Memory OLTP
понимание отличия OLTP- и OLAP-нагрузки;
использование таблиц, оптимизированных для памяти.
3 февраля, 20:00 — 21:30
Лектор: Людмила Громницкая
SQL Server Reporting Services и PowerBI. ДЗ
рассмотреть возможности SQL Server Reporting Services и PowerBI для разработки отчетов.
6 февраля, 20:00 — 21:30
Лектор: Михаил Ржевский
Домашние задания: 1
ДЗ
Отчеты в SSRS или PowerBI. 1. Для вашего проекта создать отчет в SQL Server Reporting Services или PowerBI.
2. Для SSRS сдавать в виде проекта Visual Studio.
3. Для PowerBI в виде pbix-файла.
Проектирование хранилищ данных и OLAP систем. ДЗ
проектировать хранилища данных.
10 февраля, 20:00 — 21:30
Лектор: Людмила Громницкая
Домашние задания: 1
ДЗ
OLAP (создать куб по своему проекту). Создать куб в рамках своего проекта/решения

1) установить\ до настроить компонент MS SQL SSAS
2) развернуть \ до настроить компонент SSDT
3) сделать проект вашего куба в Visual Studio
4) задеплоить проект в куб SSAS , подключиться Excel выбрать необходимые данные
5) выслать скриншоты архитектуры куба в проекте Visual Studio и скриншот сводной таблицы в Excel. Сам проект Visual Studio отправлять не нужно.
Применение SSIS в ETL
создавать ETL пакеты;
обрабатывать данные в SSIS среде;
применять dacpac файлы.
13 февраля, 20:00 — 21:30
Лектор: Людмила Громницкая
Семинар по созданным проектам БД
обсудить и получить обратную связь по проекту.
24 февраля, 20:00 — 21:30
Лектор: Кристина Кучерова
Оптимизация и администрирование БД
Продолжаем изучать оптимизацию запросов и базы в SQL Server. Подходы и практики администрирования БД
Обслуживание индексов
понимать причины фрагментации индексов;
анализировать использование индексов.
27 февраля, 20:00 — 21:30
Лектор: Людмила Громницкая
Статистика, Ad-hoc запросы, Parameter Sniffing
статистика распределения данных;
определять parameter sniffing и устранять его.
3 марта, 20:00 — 21:30
Лектор: Кристина Кучерова
DMV в SQL Server
различать разные DMV;
использовать DMV для работы.
6 марта, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Оптимизация работы базы данных
находить проблемные места в работе сервера БД;
находить и устранять запросы, которые нагружают сервер БД;
интерпретировать информацию из Activity Monitor и делать выводы о характере нагрузки;
использовать профайлер для нахождения ресурсоемких запросов;
использовать механизм extended events.
10 марта, 20:00 — 21:30
Лектор: Михаил Ржевский
Популярные Hint'ы и подсказки оптимизатору. ДЗ
перечислить в каких случаях какие хинты нужно и можно применять;
понимать минусы и плюсы использования хинтов и принимать решения о целесообразности их использования.
13 марта, 20:00 — 21:30
Лектор: Людмила Громницкая
Домашние задания: 1
ДЗ
Оптимизируем запрос. Используем все свои полученные знания для оптимизации сложного запроса.

Вариант 1.

Вы можете взять запрос со своей работы с планом и показать, что было до оптимизации, какие решения вы применили, и что стало после.

В этом случае нужно приложить Текст запроса, актуальный план и статистики по времени и операциям ввода\вывода до оптимизации и после оптимизации.

Опишите кратко ход рассуждений при оптимизации.


Вариант 2.

Оптимизируйте запрос по БД WorldWideImporters.

Приложите текст запроса со статистиками по времени и операциям ввода вывода, опишите кратко ход рассуждений при оптимизации.




```
Select ord.CustomerID, det.StockItemID, SUM(det.UnitPrice), SUM(det.Quantity), COUNT(ord.OrderID)
FROM Sales.Orders AS ord
JOIN Sales.OrderLines AS det
ON det.OrderID = ord.OrderID
JOIN Sales.Invoices AS Inv
ON Inv.OrderID = ord.OrderID
JOIN Sales.CustomerTransactions AS Trans
ON Trans.InvoiceID = Inv.InvoiceID
JOIN Warehouse.StockItemTransactions AS ItemTrans
ON ItemTrans.StockItemID = det.StockItemID
WHERE Inv.BillToCustomerID != ord.CustomerID
AND (Select SupplierId
FROM Warehouse.StockItems AS It
Where It.StockItemID = det.StockItemID) = 12
AND (SELECT SUM(Total.UnitPrice*Total.Quantity)
FROM Sales.OrderLines AS Total
Join Sales.Orders AS ordTotal
On ordTotal.OrderID = Total.OrderID
WHERE ordTotal.CustomerID = Inv.CustomerID) > 250000
AND DATEDIFF(dd, Inv.InvoiceDate, ord.OrderDate) = 0
GROUP BY ord.CustomerID, det.StockItemID
ORDER BY ord.CustomerID, det.StockItemID
```
Семинар: оптимизация сложных запросов
оптимизировать запрос;
анализировать план запроса;
анализировать и принимать решения по оптимизации статистики ввода вывода по запросу.
17 марта, 20:00 — 21:30
Лектор: Михаил Ржевский
Секционирование таблиц. ДЗ
определять когда нужно секционировать таблицы;
секционировать таблицы.
20 марта, 20:00 — 21:30
Лектор: Людмила Громницкая
Домашние задания: 1
ДЗ
Секционирование таблицы. - Выбираем в своем проекте таблицу-кандидат для секционирования и добавляем партиционирование.
- Если в проекте нет такой таблицы, то делаем анализ базы данных из первого модуля, выбираем таблицу и делаем ее секционирование, с переносом данных по секциям (партициям) - исходя из того, что таблица большая, пишем скрипты миграции в секционированную таблицу
Безопасность в SQL Server
рассказать про пользователей и политику безопасности в SQL Server.
24 марта, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Резервное копирование и восстановление
создавать backup базы данных;
делать восстановление из бэкапа.
27 марта, 20:00 — 21:30
Лектор: Михаил Ржевский
Обеспечение отказоустойчивости, репликация
настраивать репликацию;
выбирать нужный вид репликации .
31 марта, 20:00 — 21:30
Лектор: Дмитрий Тарасов
Обсуждение проектов. Подводим итоги курса
презентовать свой проект;
получить обратную связь;
узнать, как получить сертификат об окончании курса, как взаимодействовать после окончания курса с OTUS и преподавателями, какие вакансии и позиции есть для выпускников (опционально - в России и за рубежом) и на какие компании стоит обратить внимание;
принять поздравления об окончании курса.
17 апреля, 20:00 — 21:30
Лектор: Кристина Кучерова
Домашние задания: 1
ДЗ
Проектная работа. На демонстрации нужно будет рассказать про ваш проект:
1) описание бизнес идеи, какие проблемы решаются
2) требования к проекту по производительности, функциональности, безопасности
3) показать схему базы данных
4) созданную базу данных с данными - хотя бы пару строк в основных таблицах
5) продемонстрировать работу БД по основному бизнес потому, например, если вы сделали интернет магазин, то нужно показать как пользователь будет делать заказ - запустить процедуры или SQL, который сформирует корзину, добавит товары на доставку и т.д.
6) рассказать какие решения были приняты вам, что соответствовать требованиям к проекту, например, на какую нагрузку вы рассчитываете и какие решения приняли, чтобы ее выдержать.
7) принять поздравления о завершении программы и защите проекта.

В самом ДЗ нужно выставить тему проекта и прислать ссылку на гитхаб проекта и презентацию, если вы создавали файл с презентацией.

Преподаватель

Кристина Кучерова
Билайн
Архитектор решений в Билайн

Ex-Архитектор БД в US-based startup Кремниевой долины
Ex-Архитектор модели данных в Сбербанке России

Работала в компании Comepay в качестве DB-тимлида и заместителя тех. директора по архитектуре. Принимала участие в реализации проекта Syncplicity (Distillery, USA), где занималась разработкой БД и оптимизацией производительности

Окончила ЮРГПУ (НПИ) по специальности «Математическое обеспечение и администрирование информационных систем». С 2015 года — аспирант в Санкт-Петербургском политехническом университете им. Петра Великого

Есть опыт преподавания курса «Базы Данных» в Ростовском колледже связи и информатики. Считает, что очень важно учиться именно на кейсах из реального производства

Участник отраслевых конференций CMG Impact 2016 (San Diego, USA), Zabbix Conf 2017 (Рига, Латвия)
Преподаватель курсов:
MS SQL Server Developer

F.A.Q.: Наиболее часто задаваемые вопросы:

Нужно ли оплачивать обучение до Дня открытых дверей, если я хочу гарантированно попасть в группу?
Да, мы рекомендуем заранее оплатить обучение, чтобы гарантированно попасть в группу. В период проведения Дня открытых дверей резко возрастает количество желающих обучаться, поэтому может случиться так, что к окончанию Дня открытых дверей мест в группе не останется
Кто будет проводить День открытых дверей?
Проводить День открытых дверей будет преподаватель курса.
Как принять участие в Дне открытых дверей?
Для того, чтобы принять участие в Дне открытых дверей, оставьте свой e-mail в поле регистрации на мероприятие. Перед началом Дня открытых дверей мы пришлем вам ссылку, пройдя по которой, вы сможете присоединиться к вебинару.
Какие вопросы будем обсуждать на Дне открытых дверей?
На дне открытых дверей мы поговорим о проекте OTUS (о программе курса, почему мы не принимаем в группы новичков, почему учиться у нас интересно, но сложно), карьерных перспективах выпускников (почему вероятность карьерного роста у лучших студентов стремится к 100%), учебном процессе (оплатах, оценке знаний, сертификатах и прочих аспектах). Также ведущий мероприятия с радостью ответит на все ваши вопросы.
Черная пятница в Otus! ⚡️
Скидка 15% на все курсы до 20.11 →