{
"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
}