diff --git a/project/README.md b/project/README.md new file mode 100644 index 0000000000000000000000000000000000000000..bcabad9007cd957ebfe0b917ab4f9ef82dc29416 --- /dev/null +++ b/project/README.md @@ -0,0 +1,120 @@ +# КурÑовой проект по диÑциплине "Базы Данных" + +--- + +### Введение + +<b><u>Цель работы</u>:</b> получение практичеÑких навыков работы Ñ Ð¿Ñ€Ð¾Ð¼Ñ‹ÑˆÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ СУБД, проектирование +БД (концептуальное, логичеÑкое, физичеÑкое), Ñоздание хранимых процедур, предÑтавлений, +триггеров, индекÑов. +<b><u>ИнÑтрументы</u>:</b> PostgreSQL 12, any programming language. + +--- + +### Организационные моменты + +ЕÑли при выполнении Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑŽÑ‚ вопроÑÑ‹, не ÑтеÑнÑйтеÑÑŒ их задавать. + +ЕÑли вы начинаете приÑылать задание за Ñ‡Ð°Ñ Ð´Ð¾ дедлайна, будьте готовы к тому, что полный балл вы +за него не получите, Ñ‚.к. не уÑпеете иÑправить вÑе замечаниÑ. + +СеминариÑÑ‚ тоже человек, иногда Ñпит / еÑÑ‚ / живет Ñвоей жизнью и Ñ‚.д., поÑтому фидбек по Ñвоему +заданию вы будете получать не через минуту поÑле отправки, а в течение днÑ. + +И нет, еÑли ÑеминариÑÑ‚ прÑмо ÑÐµÐ¹Ñ‡Ð°Ñ Ð² Ñети в тг / вк, Ñто вÑе еще не значит, что фидбек вы получите +Ñиюминутно. Учитывайте Ñто, пожалуйÑта. + +**_Дедлайны ÑоглаÑовывайте Ñ ÑеминариÑтами_** + +--- + +### ПоÑтановка + +1. Выбрать предметную облаÑÑ‚ÑŒ, выделить в ней 4-6 ÑущноÑтей, ÑоглаÑовать Ñ ÑеминариÑтом. +2. Спроектировать базу данных: + 1. <u>ÐšÐ¾Ð½Ñ†ÐµÐ¿Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ</u>: вÑе ÑущноÑти из п.1 Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸ÐµÐ¼ ÑвÑзей в нотации Â«Ð²Ð¾Ñ€Ð¾Ð½ÑŒÑ Ð»Ð°Ð¿ÐºÐ°Â». + 2. <u>ЛогичеÑÐºÐ°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ</u>: опиÑание таблиц и их атрибутивного ÑоÑтава, а также указание ÑвÑзей в нотации Â«Ð²Ð¾Ñ€Ð¾Ð½ÑŒÑ + лапка». БД должна находитьÑÑ Ð²Ð¾ 2ÐФ или в 3ÐФ (аргументировать Ñвой выбор). ПоÑле нормализации ~ 8-10 ÑущноÑтей. + Ð”Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¸Ñпользовать ER-диаграмму. Ð¥Ð¾Ñ‚Ñ Ð±Ñ‹ одну таблицу необходимо Ñделать верÑионной. Ðа выбор предÑтавлÑÑŽÑ‚ÑÑ + SCD типа 2 и 4. Ð”Ð»Ñ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ и ÑущноÑтей иÑпользовать multitran. Ð’ полÑÑ… иÑпользовать Ñтандартные ÑуффикÑа из + ÑоответÑтвующего файла. + 3. <u>ФизичеÑÐºÐ°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ</u>: опиÑание Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ† в СУБД. Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑущноÑти из п.2.ii подготовить таблицу вида + (при желании можно добавить Ñтолбцы `PRIMARY KEY`, `FOREIGN KEY` Ñо ÑÑылкой на внешнюю таблицу): + + + **STUDENT** + + Ðазвание | ОпиÑание | Тип данных | Ограничение + -------------- | ------------- | -------------- | ----------- + `STUDENT_ID` | Идентификатор | `INTEGER` | `PRIMARY KEY` + `STUDENT_NAME` | Ð˜Ð¼Ñ Ñтудента | `VARCHAR(128)` | `NOT NULL` + ... | ... | ... | ... + + 3. Подготовить DDL Ñкрипты и Ñоздать Ñвою базу в СУБД. + 4. Ðаполнить Ñозданную базу данными, ~10 запиÑей в каждой таблице. По крайней мере по 1 + Ñтроке в каждой таблице должно быть добавлено Ñ Ð¸Ñпользованием `INSERT`. + 5. ÐапиÑать не менее 10 `INSERT`, `SELECT`, `UPDATE`, `DELETE` запроÑов. Загуглить, что + такое CRUD-запроÑÑ‹. Ðайти ÑоответÑтвие. + 6. ÐапиÑать не менее 6 оÑмыÑленных `SELECT`-запроÑов Ñ Ð¸Ñпользованием: + 1. `GROUP BY + HAVING` + 2. `ORDER BY` + 3. `<func>(...) OVER(...)`: + 1. `PARTITION BY` + 2. `ORDER BY` + 3. `PARTITION BY + ORDER BY` + 4. `<func>` - вÑе 3 типа функций - агрегирующие, ранжирующие, ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ + 7. К коду приложить ваши Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚ работы запроÑа в виде ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ Ð² CI. Пример: «В результате + Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð—Ð°Ð¿Ñ€Ð¾Ñа 1 будет получена ÑÐ²Ð¾Ð´Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о Ñуммарном балле + каждого Ñтудента XXX группы по итогам кр1». + 8. Создать индекÑÑ‹ Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†, аргументировав выбор полÑ, по которому будет Ñоздан индекÑ. + 9. Подготовить не менее 6 предÑтавлений: + 1. 2-3 получаютÑÑ Ñокрытием полей Ñ Ð¿ÐµÑ€Ñональными данными клиентов из таблицы, а + также Ñокрытием техничеÑких полей. Ð”Ð»Ñ ÑÐ¾ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ Ñ Ð¿ÐµÑ€Ñональными данными + недоÑтаточно проÑто целиком удалить Ñтолбец Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸. Ðапример, Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ + `CARD_NO` можно иÑпользовать маÑкировку вида `4276********0000`. + 2. 3-4 получаютÑÑ Ñоединением неÑкольких таблиц Ñ Ñ†ÐµÐ»ÑŒÑŽ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¾ÑмыÑленной + Ñводной таблицы, например, хранÑщей некоторую ÑтатиÑтику продаж/чаÑтот + Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° и Ñ‚.д. + ВмеÑте Ñ ÐºÐ¾Ð´Ð¾Ð¼ приложить опиÑание предÑтавлениÑ. + 10. Создать не менее 2 хранимых процедур. Логика процедур ÑоглаÑовываетÑÑ Ñ ÑеминариÑтом. + 11. Создать не менее 2 триггеров. Логика ÑоглаÑовываетÑÑ Ñ ÑеминариÑтом. + 12. ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»ÑŽÐ±Ð¸Ð¼Ñ‹Ð¹ Ñзык Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ библиотеку, Ñгенерировать данные и Ñ Ð¸Ñ… помощью вÑтавить данные в уже + оформленную БД. Теми же инÑтрументами извлечь данные [из таблицы на выбор], возможно, предварительно + агрегированные ÑредÑтвами СУБД, и провеÑти анализ. + +--- + +### Оценивание + +Задание | Балл | Примечание +------- | ----- | -------------- +`1` | `0` | +`2.i` | `0.2` | +`2.ii` | `0.2` | +`2.iii` | `0.3` | +`3` | `0.2` | +`4` | `0` | Дублирует Ñледующий пункт +`5` | `0.1` | +`6` | `0.3` | По `0.05` за каждый оÑмыÑленный Ð·Ð°Ð¿Ñ€Ð¾Ñ +`7` | `0` | Без комментариев не заÑчитываютÑÑ Ð·Ð°Ð¿Ñ€Ð¾ÑÑ‹ из пункта выше +`8` | `0.1` | +`9` | `0.6` | По `0.1` за каждое предÑтавление +`10` | `0.4` | +`11` | `0.4` | +`12` | `0.6` | ПридетÑÑ ÑамоÑтоÑтельно править CI и уÑтанавливать завиÑимоÑти + +МакÑимальный балл за проект равен 3 баллам, даже еÑли вы наберете больше. + +--- + +### ПроверÑÑŽÑ‰Ð°Ñ ÑиÑтема + +Ð’Ñем вам Ñоздали отдельные пуÑтые репозитории Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°Ð¼Ð¸. Подробнее про взаимодейÑтвие Ñ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸ÐµÐ¼ [можно +прочитать здеÑÑŒ](https://gitlab.com/fpmi-atp/db2022-supplementary/project-sample/-/tree/master). + +Отдельно Ñтоит отметить, что вам предварительно потребуетÑÑ Ñкопировать без изменений в Ñвои репозитории (по ÑÑылке +выше): + * `runner/` + * `.gitlab-ci.yml` + +Файл `workflows.yaml` также необходим, но его необходимо поправить под нужды вашего проекта. \ No newline at end of file diff --git "a/project/\320\241\321\203\321\204\321\204\320\270\320\272\321\201\321\213.pdf" "b/project/\320\241\321\203\321\204\321\204\320\270\320\272\321\201\321\213.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..c64635704bbbe91b6687b6bd526ae60ead3deaea Binary files /dev/null and "b/project/\320\241\321\203\321\204\321\204\320\270\320\272\321\201\321\213.pdf" differ