DBS Flashcards

1
Q

Databaze, Databazovy spravovaci system DBMS, Databazovy system

A

Databaze - logicky usporadana kolekce dat
Spravovaci system DBMS - software poksytujici pristiup k databazi
Databazovy system - informacni ystem ve kterem je vsechno - db, lidi, software, procesy…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Druhy databaz

A
  1. Sitove a hierarchicke
  2. Relacni
  3. Objektove
  4. XML
  5. NoSQL - klic-hodnota, dokumenty, grafy…

Hodne druhu podle potreby, podle zpusobu ulozeni a pristupu, podle dat uchovanych - objekty, vztahy, grafy, soubory

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Konceptualni model

A

ER nebo UML
- abstrakce realneho sveta
- rozpoznani entit a vzajemnych vztahu
- pouze navrh nezavisly na architekture

Koncpecni modelovani
- proces vytvareni koncepcniho modelu z probelmu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Logicky model

A

Specifikuje jak koncetualni komponenty jsou reprezentovany v databazi a strukturach
- relacni model, objektovy model, grafy..
- tedy ke koncpecnimu modelu pridavat konkretnejsi reprezetnaci

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Fyzicky model

A

Specifikuje jak logicka databaze je implmenetovana v prostredi
- pomoci data files, tabulek, b-stromy…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Model vs Schema vs Diagarm

A

Model
- neco jako jazyk, syntaxe
- mnozina konstrukci jak neco vyjadrit
- treba UML model = popis pomoci class, atribute, asociace…
- relacni model - poopis pomoci relacniho schematu, atributu…
- je to tedy popisovaci nastroj

Schema
- instance konkretniho modelu
- treba kdyz popisu osobu pomoci ER modelu - Person(name, email)…

Diagram
- vizualizace graficka schematu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Nejzakladnejsi prehled tvordy koncepcniho modelu

A
  1. Analyza
    - rozpoznani entita
    - rozpoznani vztahu
    - rozpoznani artibutu
  2. Model
    - zvoleni jazyka pro popis
    - vytvoreni schematu
    - vytvoreni diagramu
  3. Iteruj znovu pro vylepseni
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

ER a UML

A

Dva modelovaci nastroje

UML - tandardizovany, vice pouzivanej, spise pro navrh kodovacho designu
- rodina modelu jako class diagrams, use case, state diagrams…
- treba Enterprise Architect
- Unified Modeling Language

Class ma name a atributy

ER
- nestandardizovany
- mene pozuivanej
- spise se zameruje na data design - tedy vztahy a charakteristicky
- entity-relationship model
- ISA hierarchy

Entity type ma name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Isa hierarchie

A

Dedicny/generalization vztah entit, tedy proste pdiam sipku beze jmena a akridnalit, pouze to ukazuje, ze entita dedi vsechno od predkla

ISA Omezeni:
1. Pokryvajici podminka
- kazda entita ma MINIMALNE jeden konkretni typ
- kazda entita musi byt alespon jednoho specifickeho dedicneho typu
- tedy kazda entita Person musi byt alespon Profesor nebo Student, nebo oba
- tedy nemuzu mit v systemu pouze entitu Person bez urceni dalsiho typu

  1. Vylucovaci dedicnost
    - kazda entita ma MAXIMALNE jeden konkretni typ
    - tedy nejde mit Studenta ktery je zaroven Profesor
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Slozeny atribut v ER

A

Takovy atribut, ktery muzeme schovat do jednoho vice info
- treba atribut adresa(mesto, zip, street)

Nebo datum narozeni…

Nebo jakykoliv atribut, ktery ma v sobe vice urcujicich polozek.

V UML jako nova classa cela

V ER pouze z jednoho kolecka vede vice urcujicich kolecek

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Rekurzivcni typ

A

Treba Person ma 0..n nadrizenych a zaroven sam muze byt pro 0..n personu nadrizenym. Je to vztah sam se sebou jen se musi pojemnovat z obou stran

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

N-arni vztah

A

Takovy, ktery je sdilen mezi vice entitami, treba mezi tremi:

Clovek pracuje na projektu ale pouze jako clen tymu

Takze mam 3 entity - Clovek, Projekt, Tym
Mezi nimi je sdileny vztah “pracovnik” (kosoctverec), ktery je spojeny se vsemi tremi naraz

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Identifikator

A

bud jeden plne kolecko unikatni, nebo preskrtnu carou vsechno co se pouzije jako identifikator (treba rodne cislo jedno, vs (jmeno,prijmeni))

Muzu jako identifikator pouit i hranu vztahu - castecny identifikator
(treba tym je urcen svym nazvem A NAZVEM INSTITUCE, tedy identifikator je vazba “patri do” instituce)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Silne vs slabe entitni typy (classy)

A

Silny - ma alespon jeden plny identifikator (bud jednotny, nebo vicenasobny)

Slaby - nema svuj vlastni full identifikator, tudiz ma alespon jeden castecne zavisly identifikator

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Co pridava logicka vrstva nad konceptualni?

A

Reprezentacni navrh - tedy jak nas konceptualni model budeme reprezentovat v databazi
- treba tabulky s rows, columns
- objekty
- kolekce
- pointery
- grafy…

  • pridava tedy zavislost na platforme a imlmeetnaci
  • uz pocita s jazykem ve kterem bude db realizovana
  • tedy vezme ER model a prida treba typy, pole, funkce, public/private atributy atd… -> prevede do jazykoveho modelu konkretnejsiho
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Logicka vrstva zalozena na tabulkach, vlastnosti

A

Struktura - tabulky, rows, columns
- operace klasicke select, join, project,…
- vhodne pro relacni modely
- dobre zachycuji vztahy, nasobnosti
- typicky s SQL

Objektovy anrvh-
zalozeno na objektech, ukazatele vzajmen
- hlavne pri OOP
- enkapsulace, inheritance
- predavani zrpav,,,

Grafovy model
- grafova struktura, hrany a uzly, atribytu
- operace - trevaserovani, grafove algoritmy, pattern amtching
- typicky pri sitovani

Stromove modely
- uzly a hrany, atributy
- hierarchicke usporadani-
- kategorizace dat, strukturovana data
- XML dokumenty, JSON dokumenty, b-stromy…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Relacni model

A

Typ uchovani entit do tabulek, kde kazda entita je jedenr adek a sloupce jsou jeji etributy. Umoznuje zachycovat vztahy mezi entitami

Relacni databaze - zalozena na relacnim modelu, tedy entity maji vzajemne vztahy

popis pomoci Entita(atributy…)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Pozadavky na relacni model

A
  1. Atomicita atributu - pouze jednoduche typy
    - nebo slozene atributy z jednoduchy typu
  2. Jednoznacnost vztahu (unikatnost jednoho zaznamu)
    - v databazi nemuze byt nekolikrat ten samy zaznam identicky
  3. Nespecifikujeme poradi zaznamu
    - zaznamy nemaji zadne poradi v jakem se uchovavjai (nezavisle)
  4. Kompletni hodnoty-
    - vsechny atributy se msuyi uivest (krome NULL specificky)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Identifikace, superklic, klic

A

Identifikace pozadavek - kazde zaznam je jednoznacne urcne podle jednoho ci vice atributu

Superklic - mnozina identifiakcnich atributu
- trivialne default: vsechny atributy entity

Klic - nejmensi mnozina identifikatoru
- tedy z klice pokud odeberem alespon jedden atribut, pak uz neni unikatne rozlisitelny

znaci se podtrzenim, treba
Person(id, name, surname)

Superklic - treba (id, name, surname)
Klice - (id) - jednoduchy klic, nebo i (name, surname) - slozny klic

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Cizi kliec

A

Atribut, ktery je klicem jine entity

Treba
Course(code, name), kde code je identifikator
Schedule(course, time…), kde Schedule.course je Course.code, tedy referencuje jinou entity podle jejiccho klice

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Prevod ER/UML modelu na relacni model (jak ho reprezentovat v tabulkach)

A

Jak muj diagram reprezentovat v db?

Class/Entita - samostatna tabulka s atributy
- plus pridam umely id jako nejaky integer, je to novy unikatni identifikator, puvodni identifikatory musim pak deklarovat jako UNIQUE

Vicenasobny atribyt (kardinalitou) - samostatna tabulka
- treba vsechna telefonni cisla, tak por to zalozim novou tabulku
PhoneNumbers(person, phone), kde person je cizi klic na tabulku person…

Slozeny atribut - samostane tabulka
- stejne jako telefoni cisla, tedy treba tabulka slozenych adres bude odkazovat na lidi

1:1 vazby - pomoci tabulky pouze dvou identifikatoru
treba taabulka PhoneOwnership:
person_id ; phone_id, nic jineho

Vetsinou podle typu vazby se muzeme obejit i bez pomocne tabulky vzajemneho vztahu, ale je to jednodussi od pohledu zpusob
- tedy pokud EntitaA je nejak spojena s nezavislou EntitouB, pak jejich vzajmeny vztah reprezentuju pomocnou tabulkou, kde se pouze odkazu na tyto entity_a_id, nentity_b_id…

Podobne ukladam i vztahove entity, treba Person je Member Teamu, tedy mam tabulku person, tabulku team a tabulku member, kde uvedu odkazy na cloveka a tym a treba dalsi atributy jako from, to…

Obecne N-arni vztahy = n tabulek entity, + 1 pomocna, kde jsou odkazy na zucastnene entity

Dedicne entity - tabulka pro nadrizenou entity, tam uvedu jeji ID a zakladni spolecne atribut, pak pridam tabuylky vsech potomku, ktere mi odkazuji na nadrizne ID a pridavaji i unikatni svoje atributy navic

Slaba entita (ma identifiaktor zavislej na vztahu s jinou entitou) - jeji identifikator odkazuje na nadrizenou tridu…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

SQL vytvareni dat

A

Structured Query Language

Standardni jazyk pro manipulaci s relacnim databaezemi
1. Data definition
- create
2. Data manipulation
- query

Syntax - podle railroad diagramu

CREATE TABLE Product (
Id INTEGER,
Name VARCHAR(128),
Price DECIMAL(6,2),
Produced DATE,
Available BOOLEAN DEFAULT TRUE,
Weight FLOAT
);

Podminka sloupce: tedy zavadi podminky pro nabyvane hodnoty sloupce:
- NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY…, CHECK

CREATE TABLE Product (
Id INTEGER CONSTRAINT IC_Product_PK PRIMARY KEY,
Name VARCHAR(128) UNIQUE,
Price DECIMAL(6,2) CONSTRAINT IC_Product_Price NOT NULL,
Produced DATE CHECK (Produced >= ‘2015-01-01’),
Available BOOLEAN DEFAULT TRUE NOT NULL,
Weight FLOAT,
Producer INTEGER REFERENCES Producer (Id)
);

CREATE TABLE Producer (
Name VARCHAR(128),
Country VARCHAR(3),
CONSTRAINT IC_Producer_PK PRIMARY KEY (Name, Country)
);
CREATE TABLE Product (
Id INTEGER PRIMARY KEY,

ProducerName VARCHAR(128),
ProducerCountry VARCHAR(3),
CONSTRAINT IC_Product_Producer_FK
FOREIGN KEY (ProducerName, ProducerCountry)
REFERENCES Producer (Name, Country) ON DELETE CASCADE
);

ON UPDATE, ON DELETE - co se ma provest s danou polozkou, pokud puvodni referencovatelna hodnota byla pozmenena - odstranene
- CASCADE - uprav, nebo odstran vsude podle reference
- SET NULL
- SET DEFAULT
- NO ACTION
- RESTRICT

ALETR TABle - modifikace tabulky nebo sloupcu
DROP TABLE - komplentni odstraneni

INSERT INTO table
- vlozeni novych zaznamu
- bud vycttem (sloupce, …, ) (hodnoty,..) nebo pokud naplnuju vsechny sloupce podle chronologie tak je neuvadim

INSERT INTO Product
VALUES (0, ‘Chair1’, 2000, ‘2015-05-06’, TRUE, 3.5, 11);
INSERT INTO Product
(Id, Name, Price, Produced, Weight, Producer)
VALUES (1, ‘Chair2’, 1500, ‘2015-05-06’, 4.5, 11);

UPDATE - uprava takovych zaznamu, ktere splnuji podminku:

UPDATE Product
SET Name = ‘Notebook’
WHERE (Name = ‘Laptop’);

UPDATE Product
SET Price = Price * 0.9
WHERE (Produced < ‘2015-01-01’);

DELETE - podobny princip,,,

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Select query

A

SELECT statements in a nutshell
‒ Consist of 1-5 clauses and optionally also ORDER BY clause
▪ SELECT clause: which columns should be included in the result table
▪ FROM clause: which source tables should provide data we want to query
▪ WHERE clause: condition a row must satisfy to be included in the result
▪ GROUP BY clause: which attributes should be used for the aggregation
▪ HAVING clause: condition an aggregated row must satisfy to be in the result
▪ ORDER BY clause: attributes that are used to sort rows of the final result

‒ … WHERE (Capacity > 200) AND (Aircraft LIKE ‘Airbus%’) …
‒ … WHERE (Company IN (‘KLM’, ‘Emirates’)) …
‒ … WHERE NOT (Passengers BETWEEN 100 AND 200) …

MEMEBRSHIP prediakt - urcuje, zda nejaka hodnota je v mnozine povolenych hodnot
- treba Company IN (“CompanyA”, “CompanyB”…)

ALL vs ANY/SOME - kazdy zaznam musi vyhovovat podmince, nebo alespon jeden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Null, Unknow,s trojita logika, k cemu slouci

A

NULL - reprezentace chybejicich dat, nebo kontrola, ze data jsou
- IF (neco IS NOT NULL) - takto jde
- IF (neco IS NULL) - takto nejde!

NULL je chybova anvratova hodnota FUNKCI
- 3 + NULL = NULL

ALE 3<NULL = UNKNOWN
- tedy pri rpedikatovych oepracichh se zavede neurcita nova logicka konstanta UNKNOWN

Trojita logcka logika = True, False, Unknown
- logicky tabulky funguji podobne

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
CROSS JOIN
CROSS JOIN Udělá kartézský součin: spojí každý řádek z tabulky1 se všemi řádky tabulky2. Výsledná tabulka má počet řádků = počet řádků t1 × počet řádků t2. Příklad: t1: [a], [b], [c] (3 řádky) t2: [1], [2] (2 řádky) Výsledná t3: (a,1), (a,2), (b,1), (b,2), (c,1), (c,2)
26
NATURAL JOIN
NATURAL JOIN Spojí řádky z t1 a t2 jen tam, kde mají stejné hodnoty ve společných sloupcích (automaticky podle názvů sloupců). Výsledná tabulka obsahuje pouze společné řádky. Příklad: t1: (id=1, jmeno='A') t2: (id=1, vek=20) Výsledná t3: (id=1, jmeno='A', vek=20)
27
INNER JOIN
INNER JOIN Všechny shody podle podmínky. SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id; Příklad: t1: (id=1, jmeno='A'), (id=2, jmeno='B') t2: (id=2, vek=30) Výsledek: (id=2, jmeno='B', vek=30)
28
LEFT OUTER JOIN
Všechny řádky a sloupce z t1 a pokud existuje schodna hodnota ve spolecnem sloupci, tak se rozsiri o hodnoty sloupcu t2, jinak NULL Tedy vezme to celou tabulku t1 (ZLEVA) a zprava na ni nalepi t2 a rozsiri ji o rozmery t1. Schodne sloupce se doplni o hodnoty t2, jinak jsou tam vsude NULL. SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id; Příklad: t1: (id=1, jmeno='A'), (id=2, jmeno='B') t2: (id=2, vek=30) Výsledek: t3: (id=1, jmeno='A', vek=NULL) (id=2, jmeno='B', vek=30) Tedy obecne rozsirim t1 o sloupce t2 a pokud je schoda tak dobry, pokud neni schoda tak rozsirim o NULL
29
UNION JOIN
jenom spoji t1 a t2 UPLNE DOHROMADY - nejdriv da celou t1 (jako sloupce a radky) a rozsiri je o NULL sloupce t2 - pak prida NULL radky t2 a zaplni je hodnotami sloupcu t2 t3 tedy ma t1+t2 radku a t1+t2 sloupcu. Je to jaksi krizem t1 | NULL NULL | t2
30
Agregace pomoci GROUP BY a HAVING
SELECT _ FROM _ WHERE - mi vybere tmp tabulku vsech odpovidajicich hodnot GROUP BY - ji rozdeli na skupiny (groups) podle stejnosti nejakych hodnot - treba podle nejakych poctu HAVING - filtrace jiz uskupenych zaznamu How many flights does each company have scheduled? ▪ However, we are not interested in flights to Stuttgart and Munich ▪ As well as we do not want companies with just one flight or less SELECT Company, COUNT(*) AS Flights FROM Flights WHERE (Destination NOT IN ('Stuttgart', 'Munich')) GROUP BY Company HAVING (Flights > 1)
31
AGREGACE statstickych dat
Find basic characteristics for all the scheduled flights ▪ I.e. return the overall number of flights, the overall number of the involved companies, the sum of all the passengers, the average / minimal / maximal number of passengers SELECT COUNT(*) AS Flights, COUNT(DISTINCT Company) AS Companies, SUM(Passengers) AS PSum, AVG(Passengers) AS PAvg, MIN(Passengers) AS PMin, MAX(Passengers) AS PMax FROM Flights
32
Mnozinove operace
UNION - sjednoceni dvou tabulek bez dupliaktu UNION ALL - sjednoceni dvou tabulek s duplikaty INTERSECT - prunik tabulek EXCEPT - rozdil tabuelk
33
ORDER BY
Razeni navracene tabulky podle urciteho sloupce ASC nebo DESC
34
Vnorene query
Pouziti jako mezi-vysledek pro pomocny vypocet, kdy neni treba uchovavat informaci, protoze se k ni umime dostat vnorenym querym Ulehcuje uchovavani mezi-vypoctu Find all the scheduled flights which have higher than average number of passengers. SELECT * FROM Flights WHERE (Passengers > (SELECT AVG(Passengers) FROM Flights)) SELECT Flights.*, ( SELECT COUNT(*) FROM Aircrafts AS A WHERE (A.Company = F.Company) AND (A.Capacity >= F.Passengers) ) AS Aircrafts FROM Flights AS F Tedy vybery vsechno z tabulky Flights A NAVIC K TOMU PRIDAM POCET, ten pocet ale musim ziskat jako pomocny vypocet - query
35
View
View - pojmenovany SELECT query - tedy je to pro caste pouzivane slozite query dotazy - vytvori se jakasi virtualni tabulka, ktera fyzicky neni v db, ale muzeme ji dynamicky upravovat - bezpecnostni duvodu - mohu pracaovat s tabulkou, ktera realne neni v db - zapouzdreni proti nekterym uzivateulm treab View je tedy pomocna tmp tabulka virtualni, ktera slouzi jen jako uztecna promenna, treba: CREATE VIEW BigPlanes AS SELECT * FROM Aircrafts WHERE (Capacity > 200) WITH LOCAL CHECK OPTION WITH CHECK OPTION - modifikator upravitelnosti pohledu - tedy pohled mohu upravvovat pouze pokud to dava logicky smysl a splnuje to nejake omezeni zadani pri vytvoreni view - tady treba ze letadlo musi mit vetsi kapacitu nez 200 - LOCAL - podmink je zkontrolovana pouze lokalne v tomto view - CASCADE - podminka je zkontrolovana v tomto view a jeste ve vsech nadrazenych tabulkach ▪ Successful insertion INSERT INTO BigPlanes VALUES ('Boeing 737', 'CSA', 201); ▪ Denied insertion INSERT INTO BigPlanes VALUES ('Boeing 727', 'CSA', 100);
36
Embedded SQL
Zabudovana mnozina funkci a operaci pro praci primo v SQL - zavadi ridici struktury a opakovatelna funkce - if then, elsem, while, switch, for... - procedury - kurzory - triggers
37
CREATE FUNCTION
Funkce je pojmenovana procedura, kterou muzeme opakovane volat. Pracuje nad vstupnimi parametry, vraci vysledek nebo nejak manipuluje s daty CREATE FUNCTION inc(x INT) RETURNS INT AS $$ BEGIN RETURN x + 1; END; $$ LANGUAGE plpgsql; SELECT inc(5);
38
CURSOR
Objekt pro traversovani radek navratoveho SELECT query SCROLL - modifikator, zda mohu prochazet pouze dopredu (default), nebo i zpetne traversovani Data fech pomoci CURSORU: FETCH - NEXT/PRIOR/FIRST/LAST... zaznam FROM cursor_name INTO var_name INTO var_name -> je to promenna, do ktere se mi ulozi navratova honodta fetch cursoru
39
TRIGGER
TRIGGER - procedura, ktera je automaticky zavolana jako reakce na modifiakci hlidane tabulky, tj pri INSERT/UPDATE/DELETE udalosti nad tabulkou - slouzi pro zachovani integrity komplexnich dat - jako kontrola korektnosti - vola funkci ktera se ma provest - pokud zakladam funkci, ktera se bude sama pouzivat jako trigger, tak jeji return type je TRIGGER CREATE TRIGGER trigger_name BEFORE/AFTER // kdy se ma provest INSERT/UPDATE/DELETE/OR ON table_name FOR EACH ROW/STATMENT EXECUTE PROCEDURE function_name (parametry...) FOR EACH ROW VS STATMENT - for each row - trigger funkce se zavola pro KAZDY dotceny radek - for each statment - trigger funcke se provede POUZE JEDNOU za trigger reakci - tedy pokud samotna modifikace upravi 100 radku v tabulce, trigger funkce se provede POUZE JEDNOU (treba logovani, vypis, oznameni..)
40
TRANSAKCE
Sekvence uprav/manipulaci s daty v db - komplexneji upravy, ne pouze jednoduche modifikace - treba bankonvi vypocty, poslani penez, aktualizace stavu atd... - hlavne v paralelni db - pisou se jako funkce podobne Sprava transakci: 1. Uzivatelska apliakce zahaji transakci (treba stiskne tlacitko dobit kredit) - aplikace zachyti tlacitko a nekolika vrstvami probubla pres kontroler k servise az na modelovou/db vrstvu - tato posledni aplikacni vrstva je napojena na DB a zahaji transakci 2. Transakcni manazer vykona transaki 3. Rozvrhovac - dynamicky rozvrhuje vykonavani paralelnich transakci - zaznamenava a vytvari historii transakci 4. Data Manazer - provadi castecne operace v ramci transakce nad databazi Transakce muze skoncit USPESNE: - ukonceno COMMIT prikazem v kodu tranaakce - provedene oprace jsou potvrzeny a konzistencni NEUSPESNE: - ABORT, ROLLBACK - terminace transakce, neprovedla se, uzivatel notifikovan - systemove ukoncei - poruseni podminky tabulek nebo trigger, uzivatel notifikovan pokud neni deadlock - HW errr - transakce neni dokoncena, musi se restartovat
41
Pozadavky na transakce
ACID vlastnosti, maximalni vykonost ACID: Atomicity - proede se vsechno nebo nic, transakce tedy nemuze byt castecne provedena po kouscich, pokud se provede neco, tak bud se provede i zbytek, nebo se rolbackne provedena akce Consistency - kazda transakce prevede konzistentni db do jineho konzstentniho stavu, tedy ji neprevede do chyboveho stavu Isolation - transakce se paralelni nevidi navzajem a nevidi svoje nasledky dokud nejsiu COMMITOVANy Durability - pokud je transakce COMMITla, tak takova i zustane v pripade vypadku elektriny, nebo chybovych stavu, erroru atd, je to nutna podminka pro zurnalovani, je na tom zalozeno
42
Vykonana transakce
Je to sekvence prikazu/operaci nad daty v db zakoncena COMMIT/ABORT Vsechny SELECT, INSERT, UPDATE... query mohou byt vnimany jako jednoduche transace se zakladnimi operacemi Zakladni transakce uvazujeme: - read(a), write(a), abort, commit Tedy treba transakce "DEKREMENTUJ A POKUD JE VETSI NEZ 5 O 5: Subtract 5 from A (some attribute), such that A>0. T = // action 3
43
Databazovy program vs databazovy rozvrh
Program - nebezici kod, ktery je spusten az v moment potreby transakce nad databazi - tedy je to zapsana funkce transakce, doslova kod programatora, funkce Planovac /rozvh - usporadany seznam akci prichazejicich od ruznych transakci - tedy je to casovy chronologicky zaznam akci jednotlivych transakci. Treba T1: read(a), write(a), abort T2: read(b), read(c), commit T3: write(a), commit Pokud je spustime paralelne, tak se planovac snaz je prolnout mezi sebe, takze datbazova rozvrh pak muze vypadat nasledovne: rozvhr: read(a), write(a), read(b), write(a) PREPISOVANI, read(c), commit, abort, commit Tedy je to chronologicka posloupnost jak byly operace vykonany za sebou. Slouzi to k rozeznani konfilktu (treba T1 prepise pred tim zapsanou hodnotu T3), nebo k urceni serializovatelnosti (zda je to ekvivalentni k seeriovemu vykonavani T1->T2->T3, urceni uzamykani mutexu, pokud transakce chteji zapisovat na stejne misto zaroven
44
Seriovy rozvrh
Takovy planovani transakci, ze se vubec neprolinaji, tedy vykona se zcela T1, pak zcela treba T3, pak cela T2 atd... Muzeme vytvorit az N! rozvrhu z N transakci (jejich promichavani). Dle vlastnosti ACID by nemelo zalezet na poradi serioveho rozvrhovani. Pokud zalezi, tak jsou transakce na sobe zavisle a mely by byt spojeny do jedne. Pokud teda T1 pracuje s hodnotu A, a pak po ni T2 prepisuje hodnotu A, tak zalezi na poradi -> nejsou nezavisle -> mely by se sloucit do jedne transakce..
45
Proc prolinat transakce, i kdyz kazdy zaznam vede na SEKVENCNI chronologii (v databazich neexistuje skutecny pralelni transakcovani)
1. Muzeme zrychlit vypocty na non-db objektech, treba aritmetiku, logovani, vypisovani - neblokuje to, tedy jedna transakce nam nezahltni cely system a nebudeme furt cekat jen na jednu 2. Interaktivitu a responsivita apliakce - rychlejsi casti transakce se provedou rychleji a necekame na jednu blokujici operaci, vetsi pruchod transakci
46
Serializovatelnost transakce
Schedule (plán) je serializovatelný, pokud jeho výsledek odpovídá nějakému sériovému plánu. Tedy: jako by se transakce provedly jedna po druhé, bez prokládání. Zajišťuje, že se databáze po vykonání transakcí dostane do konzistentního stavu. 🔷 Podmínky: Uvažujeme pouze potvrzené (committed) transakce. Databáze je statická – nemění se zvenčí během plánování. Nedatabázové operace (např. výstup na konzoli) se nepočítají do konzistence. Zajistuje to Izolaci a Konzistenci z ACID vlastnosti Je to vlastnost plánu transakcí, který zajišťuje, že výsledek odpovídá nějakému sériovému (neprokládanému) provedení. Chrání konzistenci a izolaci podle ACID. V praxi se používá jednodušší konfliktní serializovatelnost, protože úplné testování je výpočetně složité. - spolu se zamykacimi nastroji a zjistovani deadlocku
47
4 (3) druhy chyb pri prolinani transakci
1. read-read - ok 2. wirte-read - T2 cteni necomittovanych dat, tedy T2 cte tzv "dirty-read", precetlo data, ktera nebyly commitovany, tedy databaze je v nekonzistentnim stavu a pokud T2 commitne svoje zmeny - nekonzistentni stav db 3. read-write - T1 ma tzv "neopakovatelny read", jeho data nejsou aktualni 4. write-write - prepisovani dat
48
Konfliktne ekvivalentni plany
Pokud maji stejne konfliktni pary ve stejnem poradi
49
Konfliktne serializovatelny plan
Plán je konfliktně serializovatelný, pokud se dá uspořádat jako sériový plán bez změny pořadí konfliktních operací. To se testuje pomocí tzv. precedence graphu (graf závislostí transakcí) – pokud nemá cyklus, plán je konfliktně serializovatelný. T1: READ(A) T2: WRITE(A) T1: WRITE(A) Konflikt: T2 zapisuje do A pred A - nekonzistence Oprava: prevedu na seriovy plan, ale zachovam poradi konfliktu: T2: WRITE(A) T1: READ(A) T1: WRITE(A) - zachoval jsem poradi konfliktu, ale uz je to konzistentni stav. Konfliktne seriolizovatelny plan mi tedy prohodi poradi na seriovy plan tak, aby zachoval chronologii konfliktu a tak predejde nekonzistentnim stavum (uz ale nereseni ihned prepisovani hodnot treba). Toto ale funguje pouze nezrusene transakce, pro staticke databaze bez dynamickeho pridavani
50
Jak rozpoznam konfliktni serializovatelnost transakci?
1. Postavim precedencni graf - uzly jsou transakce - hrany jsou konfilkty vuci jinym transakcim (wr, rw, ww) - tzn jakakoliv oeprace nad spolecnymi dat, kde alespon jedna transakci ma read 2. Pokud je graf acyklicky -> je konfliktne serializovatelny
51
Unrecoverable (nevratny) plan schedule
Unrecoverable schedule nastane, když transakce čte data od jiné transakce, která později abortuje – změny nelze vrátit u již potvrzené (committed) transakce → porušení durability. Recoverable schedule zaručuje, že transakce commitne až po commitnutí všech transakcí, od kterých četla změny → databáze zůstává konzistentní. Tedy pokud T1 upravuje nejak data, pak T2 je cte (a commitne), ale T1 abortuje - musi dojit ke kaskadovemu abortu - ale to uz nejde, protoze T2 mezitim commitla uz upravene zmeny. recoverable zaruci to, ze pokud Ti pracuje s daty, ktere byly pred tim modifikovany Tj, tak Ti muze commitnout AZ PO COMMITU Tj. ➡️ Pokud umožníme čtení jen z commited transakcí, vyhneme se kaskádovým abortům (cascade aborts).
52
Proc pouzvame transakcni protokoly?
A: Protokoly řídí pořadí operací tak, aby byla zajištěna ACID vlastnosti a vysoký výkon. Transakční plánovač pracuje dynamicky (nezná celý plán dopředu) a v reálném čase na základě větvení v kódu. 📌 Typy protokolů: PESIMISTICKÉ řízení (pro vysoce souběžné systémy): Zámky (locking protocols) – např. dvoufázové zamykání (2PL) Časová razítka (timestamp protocols) OPTIMISTICKÉ řízení (pro méně souběžné systémy): transakce se provádějí bez omezení, testují se až před commitem ➡️ Bez protokolu by transakce mohly porušit izolaci, způsobit konflikty a nekonzistenci
53
Zamykaci protokoly
Predchazeji konfliktum paralelniho ctenu a zapisu jednoho zdroje pomoci uzamykani tohoto zdroje, dokud se na nem neprovede konzistentni uprava, az pote k nemu muze pristoupit jina transakce, ktera mezitim musela cekat na uvolneni zdroje. Exclusive Lock X(A) - zamek pouze pro jednoho pouzivatele Shared Lock S(A) - zamek pro vice uzivatelu ale pouze na cteni Unlock U(A) 1PL - One phase locking protocol - viz vyse - pouze jedna akce na uzamceni/uvolneni zamku - nezarucuje konfliktni serializovatelnost, protoze se uvolneni muze provest prilis brzo a dojit k nekonzistencim, proste se prohodi poradi - treba deadlock asi - negarantuje recoverable plan 2PL - Two Phase Locking Protocol - aplikuej 2 pravidla na sestaveni uzamykaciho protokolu 1. Pro praci s objektem A si nejdriv transakce vyzada a dostane zamek na A 2. Pokud transakce uvolnila zamek, uz nemuze zazadat o novy/jiny - tedy 2PL nejdriv pouze hromadi zamky, pak nad objekty provadi operace, pak jakmile uvolni jeden zamek - uz nesmi dostat zadny jiny, tedy postupne pouze uvolnuje zamky - dve faze - rust zamku - uvolnovani zamku - na konci transakce NEMUSI UVOLNOVAT ZAMEK 2PL zarucuje acyklicnost grafu precedence - ale porad negarantuje recoverable plan STRIKTNI 2PL- 2. podminka je upresnena, ze pri terminaci tranakce (commit nebo abort) UVOLNI VSECHNY SVOJE ZAMKY - zarucuje konfliktne seriolizovatelnost, recoverable plan a dokonce i zamzeuje kaskadovym abortum
54
1PL vs 2PL vs striktni 2PL hlavni rozdil zamku
1PL: Zámky lze libovolně získávat a uvolňovat kdykoliv během transakce → ❌ žádná záruka serializovatelnosti ani obnovitelnosti. 2PL: Transakce může získávat zámky, dokud neuvolní první – pak už může jen uvolňovat → ✅ zaručuje konfliktní serializovatelnost. Strict 2PL: Zámky se uvolňují až po commitu nebo abortu → ✅ zaručuje konfliktní serializovatelnost i ✅ obnovitelnost (recoverability, bez kaskádových abortů).
55
Deadlock a jeho detekce
Transakce cekaji na uvolneni zamku kazdy nejak cyklicky... Ani striktni 2PL nepredejde deadlocku Detekce pomoci: - wait-for graph - dynamicka struktura pro urceni cekajicich transakci na vzajmene zamky - uzly jsou transakce - hrany jsou cekajici zamky na jine transakce - cyklus -> deadlock Detekce pomoci opakovane kontroly cyklu v tomto grafu Reseni - kontrola grafu opakovana a v pripade nalezu - restart nejmin prioritni transakce (treba co drzi nejmin zamku neo provedla nejmin operaci...) Predejiti - pomoci priority transakci Tedy: Pokud T1 chce zamek od T2, tak spravce zamku si vybere podle dvou strategii: 1. Wait-die: jestli T1 ma vyssi prioritu, tak ceka na uvolneni od T2. Pokud T2 ma ale vyssi prioritu, tak T1 je aborted a restaartovano 2. Wound-wait: jestli T1 ma vyssi prioritu, tak T2 je aborted, jinak T1 je aborted Predejde to deadlocku, protoze najednou jedna transakce ma "pravo" abortvoat tu druhou, takze muze nasilne odebrat zamek
56
Phantom
Phantom nastane, když transakce T1 zamkne řádky dle podmínky (např. salary > 5000), ale jiná transakce T2 mezitím vloží nový řádek, který by tam patřil (např. Anna s platem 6000). T1 pak pracuje s neúplnými daty, což vede k nekonzistenci výsledků a porušení izolace. - treba T1 si vybrala nejake radky podle podminky a MYSLI SI ze ma VSECHNA DATA - meztim T2 tam ale neco prida, co by spadalo pod oblast zajmu T1 - T1 treba provadi nejakou statistickou analyzu vyberu a nova hodnota od T2 by ji ovlivnila, ale T1 o ni nevi nic, pribyla bokem, takze poruseni konzistence pravidel a radku tabulky. 🔐 Prevence: Zamknutí celé tabulky Používá se, když nejsou indexy. Zámek celé tabulky zabrání přidávání nových řádků. ➤ Nevýhoda: velmi omezuje paralelismus – ostatní transakce musí čekat. Index locking Funguje, pokud existuje index na sloupci z podmínky (např. salary). Zamknou se jen příslušné části indexu (např. pro salary > 5000), tedy zamykam uz logickou jednotku, ale jednu ➤ Jemnější přístup, zachovává výkon a izolaci, ale platí jen pro jednoduché podmínky. Predicate locking Zamyká logické množiny (např. „všichni s platy > 5000“)., tedy zamykam logickou jednotku ale uz vic ➤ Teoreticky ideální, ale prakticky téměř nepoužitelné kvůli náročnosti implementace.
57
Optimisticke (nezamykaci) protokoly
🧠 Kdy použít? Používají se, když se transakce málokdy dostávají do konfliktu, a zámky by jen zbytečně zpomalovaly systém. 🔄 3 fáze optimistického protokolu: Read fáze Transakce čte z databáze, ale zápisy ukládá jen lokálně (do svého workspace). Validation fáze Při požadavku na commit požádá transakce správce o ověření. Kontrola konfliktů s jinými transakcemi: Pokud konflikt existuje ➝ transakce je zrušena a restartována. Pokud není ➝ pokračuje dál. Write fáze Lokální změny jsou zapsány do databáze.
58
Jak je naivne implementovany query select, project, distinct, joins, sorting...
Selection - obycejna iterace pres vsechny radky a jejich kontrola Projkce - to samy, ale jeste odstraneni duplikatu Distinct - sesortit vsechno a pak odstranit duplikaty Joins - iterace pres vsechny mozne kombinace tabulek jako inner loop Sorting - quicksort, heap sort, bubble... Problemy - atomicita pristupu - musela by se zamykat cela tabulka pri obecejnem selectu - pomale disky - prohledavani je pomale bez cache - omezena pamet => potrebujeme vylepsovat
59
obecne optimalizace dotrazu
Techniky, jak co nejefektivneji provest dany dotaz na databazi vzdy se musi znat kontext: - pamet - algoritmus - operace - cena - znat topologiie tabulek, relaci, datovych typu - integreujiich podminek - klice - organizaace dat fyzicky - heap, sorted, hasd - indexovaci struktury B+-stromy...
60
Hlavni kriterium pri "nakaldnosti" dotazu
Kolik bloku budu muset nacist do pameti. Pokud prochazim tabulku sekvencne, tak nacitam kazdy radek za sebou jako blok nejakych dat z disku -> tedy nactu VSECHNY zaznamy tabulky a porovnam je -> treba 5000 nactenych bloku -> 5000 cteni z disku. Indexovani - vytvorim usporadany rejstrik na urcity sloupce a hodim ho vedle do B-stromu. Ten ma logaritmickou hloubku, a treba kdyz hledam podle mesta, tak mesto praha najdu za 3 sestupy (tedy nasel jsem uz blok dat, ktery je Praha a odkazuje na vsechny zaznamy z tabulky z Prahy jako listy, treba 50 lidi), tzn jsem precetl pouze 3 az 50 bloku misto 5000.
61
❓ Co je cílem optimalizace SQL dotazů?
✅ Vybrat takový evaluační plán, který minimalizuje náklady (obvykle počet čtení z disku). Databáze porovnává možné způsoby provedení dotazu a vybírá ten nejefektivnější podle dostupných statistik.
62
❓ Jaké statistiky databáze sleduje pro relaci (tabulku)?
n_R – počet řádků s_R – velikost jednoho řádku b_R = ⌊B / s_R⌋ – blokovací faktor (kolik řádků vejde do bloku) p_R = ⌈n_R / b_R⌉ – počet bloků v tabulce V_{R.A} – počet různých hodnot ve sloupci A
63
❓ Jak funguje sekvenční scan (full table scan)?
✅ Čte se každý blok tabulky jeden po druhém. Náklad = p_R čtení z disku. Používá se, když není k dispozici vhodný index, nebo dotaz vrací hodně dat.
64
❓ Co je index (např. B+-strom)?
✅ Index je pomocná struktura mimo tabulku, která zrychluje hledání podle určitého sloupce. Je seřazený (např. podle city) a obsahuje ukazatele na odpovídající řádky v tabulce. B+-strom je běžný typ indexu.
65
❓ Jak funguje přístup přes B+-strom index?
✅ Projde se cesta stromem k listům (např. 2–3 bloky) V listech najdeme ukazatele na řádky s hledanou hodnotou Načteme jen ty bloky, kde tyto řádky jsou (např. 30 bloků) → Místo 5000 bloků stačí načíst třeba jen 33
66
❓ Kdy se vyplatí index a kdy ne?
Vyplatí se, když hledám málo řádků (vysoká selektivita) Nevyplatí se, když dotaz vrací velkou část tabulky Při rozsáhlém dotazu může být sekvenční scan rychlejší
67
Jak je uvnitr implementovan join zakladne a vylepsene?
Pres vsechny radky T1: nacti radek t1 Pres vsechny radky T2: nacti radek t2 pro kazdy sloupce t1: pro kazdy sloupec t2: porovnej podminku t1 = t2: pokud ano => pridej do join vysledku Mensi tabulka by mela byt vzdy outer loop Vylepseni metody podle znalosti struktury a ulozeni tabulky T1 a T2: ✅ 🔹 Optimalizace JOIN podle struktury tabulek: 1 .Index Nested Loop Join Pokud má T2 index na spojovací atribut A Místo procházení celé T2: pro t1.A se jen hledá v indexu T2 Odhad: n1 * (hloubka indexu + 1) → Rychlejší než full scan 2. Sort-Merge Join Obě tabulky se seřadí podle A (nebo už jsou) Prochází se současně a párují se odpovídající hodnoty O(n log n) kvůli řazení, ale výhodné pro velké tabulky 3. Hash Join Načte se menší tabulka do paměti jako hash tabulka podle A Druhá tabulka se prochází a hledá se odpovídající řádky přes hash Efektivní pro rovnostní spojení (t1.A = t2.A) 4. Zig-zag Join (index join) Obě tabulky mají index / jsou seřazené Při spojení se skáče mezi strukturami podle spojovací hodnoty → Vhodné, pokud je malý počet různých hodnot (VRA)
68
Vyhodnoceni dotazu
Vyhodnocujici plan se zvoli podle 1. Stromu dotazu 2. Algoritmu kazdeho korku stromu - volba podle kontextu, pameti a struktury souboru - vypocte se celkova cena dotazu - hlavne pocet cteni (pomoci statistik) Treba query: Movie ( id, Ɵtle, year, … ) Actor ( movie, actor, character, … ) FK: ( movie ) ⊆ Movie ( id ) Actors and characters they played in movies created in 2020 SQL: SELECT title, actor, character FROM Movie JOIN Actor ON (id = movie) WHERE year = 2020 Strom: listy - tabulky vnitrni uzly - operace listy - movie, actor 1. vnitrni uzel - join podle movie id 2. selection - year = 2000 3. projection - vyber sloupcu vysledku - title, actor, character Pote se spocita "globalni statistika" kazdeho kroku - tedy treba tabulka movie je sorted file, + jeji statistika, a ma treba B+-strom index na year + jeho statistika - to samy se urci treba pro tabulku actor - treba heap file Potom se urci kazdy vnitrni uzel podle jeho algoritmu a narocnosti - spocita se na konci celkova narocnost - pro optimalizaci muzeme preusporadat operace, nebo zavest pipelining (tedy vysledek uzlu je rovnou posilan do dalsiho uzlu bez zapisu na disk) - tim muzeme zmensit vyrazne narovnost a cenu dotazu Nejde nejdriv najit vsechny mozne kombinace provedeni dotazu - prilis casove narovne - zvoli se spis heuristika a optimalizace: 1. Algebraicka - na zakaldae stromovych algoritmu a algebraickych vlastnosti operaci - komutativita, asociativita atd... 2. Statisticka optimalizace - vypocet ceny ze statistikc a histogramu 3. Syntakticka optimalizace - jestli dotaz nejde provest jinym dotazem
69
Jake jsou problemz nenormaliyovanzch tabuelk_
1. data redundancy - neco se opakuje a zabira misto 2. data jsou na sobe zavisla mezi sloupci - treba pozice urcuje plat, to komplikuje modifikaci, protoze pokud smazeme jednu pozici tak prijdeme o informaci i platu - zavislost, pripadne uprava se musi provest ne na jednom miste ale vsude 3. zbytecne null hodnoty
70
Funkcni zavislost sloupce X a sloupce Y v relaci R (tabulce)
Funkcni zavislsot je omezeni integrity mezi atributy, rika to: Hodnota jednoho nebo vice sloupcu X JEDNOZNACNE URCUJE hodnoty sloupcu Y X->Y Typy: 1. Elementratni - vpravo je jen jeden atribut, vlevo muze byt vic - treba sloupecA, sloupecB -> sloupecC 2. Slozita - vpravo vice atributu 3. Ekvivalence plati Klic je specialni druh funkcni zavislosti - jeden klic urci VSECHNY OSTATNI atributy Funkcni zavislosti slouzi jako omezeni dat (neco jako CHECK OPTION pri vkladani). Tedy pokud mi pozice urcuje plat, tak nemohu vlozit stejnou pozici ale s jinym platem, je to poruseni omezeni funkcni zavislosti
71
Armstrongovy axiomy
Pravidla ktera popisuji logicke odvozovoani novych funkcnich zavislosti ze zadane mnoziny zavislosti. Dulezite pro praci s normalnimi formami, optimalizaci databaze a kontrolu integrity K čemu Armstrongovy axiomy slouží? - Testování platnosti funkčních závislostí - Odvozování nových FDs z existujících - Minimalizace množiny FDs (tzv. pokrytí) - Zjištění klíčů a superklíčů - Normalizace tabulek (3. NF, BCNF...) 1) Trivialita Pokud Y ⊆ X, pak X → Y (např. ABC → A) 2) Transitivita Pokud X → Y a Y → Z, pak X → Z 3) Kompozice Pokud X → Y a X → Z, pak X → YZ (zavedeni sjednoceni) 4) Dekonstrukce Pokud X → YZ, pak X → Y a X → Z (rozbiti sjednoceni) F = {ab → c, ac → d, cd → ed, e → f} We could derive, e.g.,: ab → a (trivial) ab → ac (composition with ab → c) ab → d (transitivity with ac → d) ab → cd (composition with ab → c) ab → ed (transitivity with cd → ed) ab → e (decomposition) ab → f (transitivity)
72
Closer (uzaver) mnoziny funkc. zavislosti F
je F+ = Mnozina vsech odvoditelnych funk. zavislsoti ze zadane mnoziny - exponencialne mnoho
73
Cover (pokryti) mnoziny funkc. zavislosti
Mejme dve mnoziny funkcnich zavislosti: F a G. Rekneme, ze G je cover F p.t.k maji stejne uzavery, tedy maji stejna odvoditelna pravidla, neboli rikaji totez z pohledu funkc, zaviuslosti: F+ = G+ Cover muze byt i redundantni, rozsireni F, nebo naopak byt redukovany a vynechat odvoditelna pravidla z F. Kanonicke pokryti - co nejjednodussi verze bez redundanci, a bez slozitych uprav, tedy pouze elementarni zavislosti, pomoci dekompozice
74
Zjisteni, zda F je pokrytim G a naopak
Staci tedy pomoci pravidel F dojit do G a naopak. (delam jakousi syntaktickou ekvivalenci dvou mnozin formuli, ale ne pomoci pravidel vyrokove logiky ale Armstrongovych axiomu) Tedy F+=G+ p.t.k z F se dostanu do G a z G se dostanu do F: R1(A,F), R2(A,G), A = {a,b,c,d}, F = {a → c, b → ac, d → abc}, G = {a → c, b → a, d → b} For checking that G+ = F+ we do not have to establish the whole covers, it is sufficient to derive F from G, and vice versa, i.e., F’ = {a → c, b → a, d → b} – decomposition G’ = {a → c, b → ac, d → abc } – transitivity and composition  G+ = F+ Schemas R1 and R2 are equivalent because G is cover of F, while they share the attribute set A.
75
Redukovane pokryti funkcnich zavislosti
Je to takove pokryti, ktere nema redundantni pravidla Tedy pravidlo je redundantni, pokud jeho vyhozeniim nezmenime UZAVER, tedy to pravbidlo je odvoditelny ze zbytku Non-redundant pokryti je takkove, kde odstranenim libovolneho dalsiho pravidla uz ziskame mensi UZAVER R(A,F) A = {a,b,c,d}, F = {a → c, b → a, b → c, d → a, d → b, d → c} FDs b → c, d → a, d → c are redundant after their removal F + is not changed, i.e., they could be derived from the remaining FDs b → c derived using transitivity a → c, b → a d → a derived using transitivity d → b, b → a d → c derived using transitivity d → b, b → a, a → c
76
Atributovy uzaver
atributy odvodidelne z X pomoci pravidel F - pokud X je cela mnozina abecedy => X je superklic (vsechny atributy) Superklic - mnozina atributu X, pro kterou plati X+=A (urci vsechny atributy) Klic = minimalni superklic (zadny atribut uz nejde vyhodt) Redundantni atribut: - takovy, jehoz odebranim nezmenime odvoditelnost nejakeho atributu - tedy aX -> Y, a pokud X->Y (bez a) => pak a je reduntnantni Redukovane pokryti atributu - nema redudnantni atributy Muze exisotvat vice klicu, klicovy atribut = atribut v nejakem klici Example – attribute closure R(A,F), A = {a,b,c,d}, F = {a → c, cd → b, ad → c} {a}+ = {a,c} it holds a → c (+ trivial a → a) {b}+ = {b} (trivial b → b) {c}+ = {c} (trivial c → c) {d}+ = {d} (trivial d → d) {a,b}+ = {a,b,c} a → c (+ trivial) {a,d}+ = {a,b,c,d} ad → c, cd → b (+ trivial) {c,d}+ = {b,c,d} cd → b (+ trivial)
77
Minimal Cover funkčních závislostí?
Minimal cover (minimální pokrytí) je ekvivalentní množina funkčních závislostí, která je: 1. Bez redundantních atributů (na levé straně FD), 2. Bez redundantních závislostí (žádná FD není zbytečná), 3. V elementárním tvaru – na pravé straně jen jeden atribut (tzv. canonical cover). Treba: abcd → e, e → d, a → b, ac → d POSTUP: 1: Rozlož složené závislosti Rozděl každou FD typu X → YZ na: X → Y X → Z 🧪 Příklad: a → bc ⇒ a → b, a → c 2: Odeber redundantní atributy z levé strany U každé FD X → A: Zkus odebrat jeden atribut z X. Spočítej closure z upravené množiny. Pokud stále platí X' → A, pak je atribut redundantní. 🧪 Příklad: abc → d Zkus ac → d ⇒ pokud ac+ obsahuje d, odeber b. 3: Odeber redundantní celé FDs Dočasně vynech FD f. Spočítej closure ostatních FDs. Pokud z nich lze f odvodit, je redundantní a můžeš ji odstranit. 🧪 Příklad: Z {a → b, b → c, a → c} Odeber a → c, zbytek ⇒ a → b → c ⇒ a → c je redundantní. ⚠️ Pozor na pořadí! Nejprve zjednodušuj atributy vlevo, Poté odebírej celé FDs. Nesprávné pořadí může vést k chybnému výsledku.