hackmd Flashcards
(47 cards)
Spójność danych
to cecha, która zapewnia, że dane w systemie są kompletne, zgodne i poprawne w odniesieniu do ustalonych reguł oraz założeń logicznych.
Model wymiarowy opracowany przez Kimballa:
a) Powstał wcześniej niż model relacyjny.
b) Jest modelem biznesowym, a nie technicznym.
c) Został opracowany z myślą o analizowaniu nieustrukturyzowanych i częściowo ustrukturyzowanych danych.
B
Systemy bazodanowe łączą tabele:
a) Zawsze zaczynając od najmniejszej.
b) Wybierając sposób złączenia na podstawie oszacowanej selektywności, czyli liczby dopasowanych wierszy.
c) Wszystkie na raz.
B
Relacja
w modelu relacyjnym - dwuwymiarowa tabela, która operuje na prostych typach danych, gdzie każda relacja składa się ze stałej liczby atrybutów (kolumn) i dowolnej liczby krotek (wierszy)
Związek
jest pewnym powiązaniem między encjami, charakteryzuje się liczebnością/krotnością, i opcjonalnie nazwą.
Klucze
Klucz główny - powinien być: unikatowy, jak najmniejszy, stabilny
Klucz biznesowy - pochodzi z danych źródłowych
Klucz obcy
Opcje klucza obcego: NO ACTION, CASCADE, SET NULL, SET DEFAULT
Postacie normalne
1NF - Tabela jest w 1NF, jeżeli wszystkie atrybuty wielowartościowe zostały usunięte
2NF - Tabela jest w 2NF, jeżeli jest w 1NF i wszystkie częsciowe zależności funkcyjne zostały wyeliminowane.
3NF - Tabela jest w 3NF, jeżeli jest w 2NF i wszystkie pośrednie zależności funkcyjne
Normalizacja
Normalizacja - wyeliminowanie wynikających z nadmiarowości danych anomalii, które mogłyby doprowadzić do utraty spójności danych.
Anomalie:
Anomalia modyfikacji
Anomalia usunięć
Redundancja
Denormalizacja
ma na celu wprowadzenie kontrolowanej nadmierności do bazy danych w celu przyspieszenia odczytu danych.
Generalizacja
łączenie podobnych obiektów (entity) w jedną encję, co stanowi podzestaw relacji pomiędzy tabelami
Bazy relacyjne
Baza relacyjna - baza danych w której dane przestawione są w postaci relacji - dwuwymiarowych tabel.
W bazie danych w modelu relacyjnym dane grupowane są w relacje, reprezentowane przez (nieuporządkowane) tabele o stałej ilości kolumn (atrybutów) oraz dowolnej liczbie wierszy (krotek, rekordów informacji). Każda tabela ma zdefiniowany klucz (mogący składać się z jednego lub więcej atrybutów), który jednoznacznie identyfikuje dany wiersz w tabeli (relacji). Wyszukiwanie danych w takiej bazie polega na odnalezieniu odpowiedniego klucza i identyfikacji danego wiersza za jego pomocą.
W relacyjnej bazie danych wyróżnia się trzy typy relacji między tabelami:
1 do 1
wiele do wielu
1 do wielu
Widok wirtualny
to standardowy widok w SQL Server, który nie przechowuje danych fizycznie. Jest zdefiniowany za pomocą zapytania SQL i generowany dynamicznie za każdym razem, gdy jest wywoływany.
Create view NazwaWidoku as select * from Pracownicy
Ograniczenia widoków
-Brak możliwości modyfikacji danych w widokach złożonych - Widoki zawierające funkcje agregujące (SUM, AVG, COUNT), klauzule DISTINCT, GROUP BY, HAVING, UNION lub podzapytania w SELECT, nie pozwalają na operacje modyfikacji danych (INSERT, UPDATE, DELETE).
-Brak wsparcia dla parametrów - Widoki w SQL Server nie mogą przyjmować parametrów wejściowych (w przeciwieństwie np. do procedur składowanych).
-Ograniczenia wynikające z klauzuli SELECT - Widok nie może zawierać klauzuli ORDER BY, chyba że jest używana razem z klauzulą TOP.
-Widoki nie mogą zawierać funkcji zmiennych wierszowo (np. NEWID() w SELECT).
-Widoki a uprawnienia - Widoki dziedziczą uprawnienia z tabel źródłowych. Użytkownik potrzebuje odpowiednich uprawnień do tabel źródłowych lub może zostać ograniczony wyłącznie do widoku.
-Brak wsparcia dla tymczasowych obiektów - Widoki nie mogą odnosić się do tabel tymczasowych (#TabelaTymczasowa lub @ZmiennaTabelaryczna).
Widok zmaterializowany
jest strukturą przechowującą dane fizycznie, w przeciwieństwie do standardowych widoków wirtualnych.
CREATE VIEW SalesSummary WITH SCHEMABINDING AS SELECT ProductID, SUM(SalesAmount) AS TotalSales FROM Sales GROUP BY ProductID; ---- LUB CREATE MATERIALIZED VIEW tickets_view AS SELECT ticket_no, passenger_name FROM tickets WITH DATA;
Indeks klastrowany/grupowany
indeks jest obiektem bazy danych, który optymalizuje czas wykonywania zapytania do niej. Indeks klastrowany fizycznie sortuje dane wg kolumny, na której został założony (dane te wchodzą w skład indeksu). Wyszukiwanie odbywa się podobnie jak w przypadku encyklopedii: najpierw wyszukuje się hasła na liście słów kluczowych, a następnie lokalizuje strony danych, które zawierają wyszukiwane rekordy z danymi. Indeks klastrowany powstaje zazwyczaj przy okazji tworzenia klucza głównego tabeli.
CREATE CLUSTERED INDEX IDX_Pracownicy_Id ON Pracownicy(Id);
Indeks nieklastrowany/niegrupowany
nie zawiera w swojej strukturze całych rekordów, a jedynie wszystkie wartości z kolumny indeksowanej. Na poziomie liści znajdują się wszystkie wartości z kolumny indeksowanej posortowane alfabetycznie. Na poziomach znajdujących się wyżej znajdują się pierwsze pozycje ze stron o jeden poziom niżej. Poziom liści oprócz wartości z kolumny indeksowanej zawiera odsyłacze bezpośrednio do rekordów w nieposortowanej strukturze tabeli.
CREATE NONCLUSTERED INDEX IX_NazwaIndeksu ON NazwaTabeli (NazwaKolumny);
Indeks kolumnowy
zaawansowany mechanizm indeksowania danych w systemach baz danych, który przechowuje dane w formie kolumn zamiast tradycyjnego przechowywania wierszowego (row-based storage). Jest on szczególnie przydatny w analitycznych zapytaniach, takich jak te występujące w hurtowniach danych, gdzie głównym celem jest szybkie przetwarzanie dużych ilości danych i agregacje.
Korzyści indeksów kolumnowych:
-Szybsze zapytania analityczne - Indeksy kolumnowe są zoptymalizowane dla zapytań typu SELECT, szczególnie z operacjami agregacji, takich jak SUM, AVG, COUNT.
-Zmniejszenie rozmiaru danych - Dzięki kompresji kolumnowej dane zajmują mniej miejsca na dysku i w pamięci.
-Lżejsze operacje I/O - Mniejsze ilości danych są odczytywane z dysku, co zmniejsza obciążenie operacjami wejścia/wyjścia.
-Lepsza skalowalność - Indeksy kolumnowe umożliwiają przetwarzanie ogromnych wolumenów danych w sposób wydajny.
CREATE COLUMNSTORE INDEX IND_OrderProducts
ON OrderProducts (Id,OrderId,
Indeks rzadki
ma wpisy tylko dla wybranych rekordów (np. pierwszego w bloku) i jest typowy dla indeksów nieklastrowanych. Jest mniej pamięciożerny, ale wolniejszy przy wyszukiwaniu.
CREATE INDEX IND_Shipments_ShippingCost
ON Shipments(ShippingCost)
WHERE
Indeks gęsty
- ma wpis dla każdego rekordu tabeli i jest stosowany w indeksach klastrowanych. Jest szybki w wyszukiwaniu, ale bardziej obciąża pamięć.
CREATE INDEX IND_Customers_Id
ON Customers(Id);
Jakie kolumny indeksujemy
kolumny, które służą do wyszukiwania danych,
kolumny, w których wartości są unikalne lub rzadko się powtarzają,
kolumny, w których chcemy wymusić unikalność wartości (także klucze główne),
kolumny, które są wykorzystywane do złączeń (klucze obce).
Jakich kolumn nie indeksujemy
kolumn o dużych rozmiarach (w szczególności tzw. LOBów - ang. Large OBject),
kolumn o dużej powtarzalności wartości (np. kolumna Płeć),
kolumn nie wykorzystywanych w zapytaniach do wyszukiwania rekordów.
Zalety i wady indeksów
Zalety indeksów:
przyspieszają wyszukiwanie danych,
przyspieszają zapytania wymagające sortowania,
pozwalają wymuszać unikalność kolumn.
Wady indeksów:
planowanie i utrzymanie indeksów bywa pracochłonne,
mogą spowodować spowolnienie wykonywania operacji wstawiania i modyfikacji
danych,
wymagają dodatkowego miejsca na dysku twardym.
Klastrowanie
polega na grupowaniu obiektów (rekordów, wierszy, lub innych elementów) w zbiory, które są podobne według określonych kryteriów. Celem klastrowania jest odkrycie ukrytych wzorców, struktur lub relacji w danych przechowywanych w bazach danych, co umożliwia bardziej efektywną analizę i eksplorację informacji.
Klastrowanie wewnątrzplikowe
polega na grupowianiu rekordów obok siebie wenątrz jednego pliku i umieszczaniu rekordów obok siebie z jednej tabeli.