{ "cells": [ { "cell_type": "markdown", "id": "527dd364", "metadata": {}, "source": [ "# Organizacja przedmiotu" ] }, { "cell_type": "markdown", "id": "12f57860", "metadata": {}, "source": [ "## Wykład\n", " \n", "- Wojciech Kosior\n", "- wkosior@agh.edu.pl\n", "- dla kierunków:\n", " - Cyberbezpieczeństwo (WIEiT)\n", " - Informatyka Społeczna (WH)\n", " - Teleinformatyka (WIEiT)\n", "\n", "## Plan wykładu\n", "\n", "| | | |\n", "|:----|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------:|\n", "| 1. | Wprowadzenie do baz danych: czym są bazy danych, rodzaje baz danych, systemy bazodanowe wbudowane i działające w architekturze klient-serwer, system zarządzania bazą danych | 2025-10-07
_45 min_ |\n", "| 2. | Relacyjny model danych: różne modele danych, podstawowe pojęcia dotyczące relacyjnego modelu danych, podstawowe typy danych, przykład komendy SELECT

**Zrobiony 1 wykład** | 2025-10-07
_45 min_ |\n", "| 3. | Tworzenie prostych zapytań o dane w SQL: komenda SELECT, klauzula FROM, klauzula WHERE, podstawowe operatory, funkcje wbudowane, operacje mnogościowe, aliasy, nadawanie nazw kolumnom (AS) | 2025-10-14
_70 min_ |\n", "| 4. | Problem różnych interpretacji NULL: NULL jako nieznana wartość, NULL jako brak wartości, zróżnicowane traktowanie NULL w standardzie SQL

**Zrobione 2 wykłady** | 2025-10-14
_20 min_ |\n", "| 5. | Tworzenie zaawansowanych zapytań o dane w SQL: funkcje agregujące, klauzula GROUP BY, klauzula HAVING, klauzula ORDER BY, złączenia, podzapytania, zapytania skorelowane i nieskorelowane

**Zrobione 3 wykłady** | 2025-10-21
_90 min_ |\n", "| 6. | Manipulowanie danymi za pomocą SQL: komenda INSERT, komenda UPDATE, komenda DELETE, funkcjonalność UPSERT | 2025-10-28
_45 min_ |\n", "| 7. | Definiowanie struktur danych za pomocą SQL: tworzenie nowej bazy danych Postgres i MariaDB/MySQL, komenda CREATE TABLE, komenda DROP TABLE, zadawanie kluczy obcych, warunki integralności, komenda ALTER TABLE

**Zrobione 4 wykłady** | 2025-10-28
_45 min_ |\n", "| 8. | Projektowanie baz danych: model związków encji, normalizacja struktury bazy danych, zależności funkcjonalne, klucze, postaci normalne 1-3, BCNF (postać normalna Boyce'a-Codda) | 2025-11-04 i 2025-11-12 (**środa**)
_135 min_ |\n", "| 9. | Zaawansowane aspekty normalizacji struktury bazy danych: postaci normalne 4-5

**Zrobione 5.5/6 wykładów** | 2025-11-12 (**środa**)
_45 min_
_(tylko kierunki WIEiT, studentów WH obowiązuje treść z samej pierwszej połowy tego slotu wykładowego)_ |\n", "| 10. | Widoki i tabele tymczasowe: komenda CREATE VIEW, komenda DROP VIEW, widoki niezmaterializowane i zmaterializowane, problem manipulowania danymi poprzez widok, komenda SELECT INTO

**Zrobione 5.5/7 wykładów** | 2025-11-18
_90 min_
_(tylko kierunki WIEiT)_ |\n", "| 11. | Transakcje: właściwości transakcji, komenda BEGIN TRANSACTION, komenda COMMIT, tryb autocommit, komenda SAVEPOINT, komenda ROLLBACK TRANSACTION, klauzula SELECT FOR UPDATE, poziomy izolacji

**Zrobione 6.5/8 wykładów** | 2025-11-25
_90 min_ |\n", "| 12. | Zarządzanie uprawnieniami: komenda CREATE ROLE, komenda DROP ROLE, komenda ALTER ROLE, atrybuty ról, zarządzanie użytkownikami w systemach Postgres i MariaDB/MySQL | 2025-12-02
_45 min_ |\n", "| 13. | Użycie SQL z poziomu języka programowania: ODBC (Open Database Connectivity), JDBC, Python Database API Specification, prepared statements

**Zrobione 7.5/9 wykładów** | 2025-12-02
_45 min_ |\n", "| 14. | Algebra relacyjna: selekcja, rzutowanie, złączenie naturalne, ioczyn kartezjański, suma i różnica zbiorów, równoważność wyrażeń, tłumaczenie między zapytaniem SQL a wyrażeniem algebry relacyjnej | 2025-12-09
_45 min_
_(tylko kierunki WIEiT)_ |\n", "| 15. | Indeksy i optymalizacja: komenda CREATE INDEX, komenda DROP INDEX, indeksy tworzone automatycznie dla kluczy głównych, skutki utworzenia indeksu, rodzaje indeksów, metody indeksowania, komenda EXPLAIN | 2025-12-09 i 2025-12-16
_90 min_
_(tylko kierunki WIEiT)_ |\n", "| 16. | Proceduralny SQL: deklaracje, podstawienia, wyrażenia warunkowe, pętle programowe, metody ograniczenia ilości zwracanych wierszy, pojęcie kursora, wyzwalacze (TRIGGERs) i funkcje, argumenty funkcji

**Zrobione 7.5/12 wykładów** | 2025-12-16 i 2026-01-09 (**piątek**)
_135 min_
_(tylko kierunki WIEiT)_ |\n", "| 17. | Podejście obiektowe: komenda CREATE TYPE, typy nieatomiczne, dziedziczenie w  standardzie SQL i w systemie Postgres, mapowanie obiektowo-relacyjne

**Zrobione 7.5/13 wykładów** | 2026-01-13
_90 min_
_(tylko kierunki WIEiT)_ |\n", "| 18. | Bazy NoSQL: bazy typu key-value store, bazy grafowe, bazy dokumentowe, bazy szerokokolumnowe, bazy przechowująca dane w pamięci operacyjnej

**Zrobione 7.5/14 wykładów** | 2026-01-20
_90 min_
_(tylko kierunki WIEiT)_ |\n", "| 19. | Systemy zarządzania relacyjną bazą danych: przegląd systemów zarządzania bazą danych, tworzenie kopii bezpieczeństwa, migracje między systemami

**Zrobione 7.5/14.5 wykładów** | 2026-01-27
_45 min_
_(tylko kierunki WIEiT)_ |\n", "| | W ostatnim slocie zostaje 45 min zapasu na \"wszelki wypadek\" lub na ciekawostki, dyskusje itp. | |" ] }, { "cell_type": "markdown", "id": "41701ab5", "metadata": {}, "source": [ "## Laboratoria i projekty\n", "\n", "Różnie…" ] }, { "cell_type": "markdown", "id": "d9031cc9", "metadata": {}, "source": [ "## Literatura\n", "\n", "### A.Silberschatz, H.F. Korth, S. Sudarshan, \"Database System Concepts\", McGrow Hill, 2019\n", "\n", "- obszerna książka\n", "- solidne podstawy do baz danych\n", "- tylko część rozdziałów związana z tematyką kursu\n", "- opisuje również konstrukcje, których obecne systemy bazodanowe nie implementują\n", "\n", "### A. Watt, N. Eng, \"Database Design – 2nd Edition\", Victoria, B.C.: BCcampus, 2014\n", "\n", "- krótsza pozycja\n", "- trochę inna kolejność zagadnień, niż w naszym kursie\n", "- dostępna na wolnej licencji :)\n", "\n", "### \"PostgreSQL 17.6 Documentation\", The PostgreSQL Global Development Group, 2025\n", "\n", "- do wyszukania informacji o konkretnych konstrukcjach i mechanizmach\n", "- przydatna w szczególności dla studentów WIEiT\n", "\n", "### \"MariaDB Server Documentation\", MariaDB Foundation, 2025\n", "\n", "- do wyszukania informacji o konkretnych konstrukcjach i mechanizmach\n", "- przydatna w szczególności dla studentów WH\n", "\n", "### L. Li, R. Rutherfoord, \"Database Design and Applications (Open Course)\", Computer Science and Information Technology Ancillary Materials, 14, 2019\n", "\n", "- slajdy, które może będą wykorzystane na którymś wykładzie, a może nie\n", "\n", "### G.Harrison, Next Generation Databases NoSQL, NewSQL, and Big Data, Apress 2015\n", "\n", "- jedyna na tej liście pozycja poświęcona bazon nierelacyjnym\n", "- w sylabusie po poprzednim prowadzącym\n", "\n", "### Dokumentacja projektu SQLite\n", "\n", "- składnia komend przedstawiona na diagramach, np. https://www.sqlite.org/lang_upsert.html" ] }, { "cell_type": "markdown", "id": "04953d6a", "metadata": {}, "source": [ "## Materiały z wykładów\n", "\n", "Zeszyty dostępne bezpośrednio, jako pojedyncze pliki pod https://galaxy.agh.edu.pl/~wkosior/db-lectures/." ] }, { "cell_type": "markdown", "id": "5a9bf2b5", "metadata": {}, "source": [ "### Pobieranie zeszytów za pomocą narzędzia Git\n", "\n", "W przykładach znak `$` poprzedza komendę do wpisania w konsoli. Pod niektórymi komendami jest pokazany ich przykładowy output.\n", "\n", "```\n", "$ git clone https://galaxy.agh.edu.pl/~wkosior/git.sh/db-lectures\n", "Cloning into 'db-lectures'...\n", "remote: Enumerating objects: 16, done.\n", "remote: Counting objects: 100% (16/16), done.\n", "remote: Compressing objects: 100% (12/12), done.\n", "remote: Total 16 (delta 4), reused 16 (delta 4), pack-reused 0\n", "Receiving objects: 100% (16/16), 17.90 KiB | 8.95 MiB/s, done.\n", "Resolving deltas: 100% (4/4), done.\n", "```" ] }, { "cell_type": "markdown", "id": "caf543f5", "metadata": {}, "source": [ "### Aktualizacja pobranych materiałów\n", "\n", "```\n", "$ cd /path/to/cloned/db-lectures\n", "$ git reset --hard # opcjonalnie, usuwa lokalne zmiany w plikach\n", "HEAD is now at 5675f68 Initial commit.\n", "$ git pull\n", "remote: Enumerating objects: 12, done.\n", "remote: Counting objects: 100% (12/12), done.\n", "remote: Compressing objects: 100% (8/8), done.\n", "remote: Total 8 (delta 5), reused 0 (delta 0), pack-reused 0\n", "Unpacking objects: 100% (8/8), 3.49 KiB | 1.16 MiB/s, done.\n", "From https://galaxy.agh.edu.pl/~wkosior/git.sh/db-lectures\n", " 5675f68..163170e magister -> origin/magister\n", "Updating 5675f68..163170e\n", "Fast-forward\n", " 01-introduction-to-databases/set_students_2.sh | 11 ++-\n", " 01-introduction-to-databases/set_students_3.sh | 11 ++-\n", " COPYING | 123 +++++++++++++++++++++++++++++++++\n", " 3 files changed, 143 insertions(+), 2 deletions(-)\n", " create mode 100644 COPYING\n", "```" ] }, { "cell_type": "markdown", "id": "0275699b", "metadata": {}, "source": [ "### Uruchamianie pobranych zeszytów\n", "\n", "Wymagane:\n", "- Python3\n", "- [jupyter](https://jupyter.org/install#jupyter-notebook)\n", "- [ipython-sql](https://github.com/catherinedevlin/ipython-sql) (`pip install ipython-sql`)\n", "\n", "```\n", "$ jupyter notebook\n", "```" ] }, { "cell_type": "markdown", "id": "c7d5ed70", "metadata": {}, "source": [ "## Zaliczenie przedmiotu\n", "\n", "Egzamin, 3 terminy\n", "\n", "- data: ???\n", "- miejsce: ???\n", "- wymagania:\n", " - zaliczone ćwiczenia lab\n", " - (w przypadku studentów WIEiT) zaliczony projekt\n", "\n", "### Ocena końcowa\n", "\n", "W przypadku zaliczenia w pierwszym terminie:\n", "\n", "| | |\n", "|--|:-:|\n", "|Cyberbezpieczeństwo| $\\frac{15\\cdot{}ocena\\_lab + 15\\cdot{}ocena\\_proj + 30\\cdot{}ocena\\_egz}{60}$ |\n", "|Informatyka Społeczna| $\\frac{ocena\\_lab + ocena\\_egz}{2}$ |\n", "|Teleinformatyka| $\\frac{20\\cdot{}ocena\\_lab + 10\\cdot{}ocena\\_proj + 30\\cdot{}ocena\\_egz}{60}$ |\n", "\n", "W przypadku zaliczenia w późniejszym terminie: do średniej wlicza się też niezaliczone terminy." ] }, { "cell_type": "markdown", "id": "245e80c2", "metadata": {}, "source": [ "## Aktywność i aktywizacja\n", "\n", "- lista obecności\n", "- podwyższenie oceny za aktywność?\n", " - możliwe\n", " - ale raczej jako bonus dla studentów zainteresowanych wykładem\n", " - niech to nie będzie cel sam w sobie\n", "- Teodor (i wariant żeński: Teodora)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "/gnu/store/q35bxk1i5blx0rcgxphhrq9xqmgha9bz-python-3.11.11/bin/python3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.11" } }, "nbformat": 4, "nbformat_minor": 5 }