hackmd Flashcards
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