środa, 25 marca 2026

SQL - Wprowadzenie - Składnia języka SQL

 Składnia języka SQL

W języku SQL występuje 5 głównych kategorii syntaktycznych:

  1. identyfikatory, czyli nazwy obiektów
  2. literały, czyli stałe
  3. operatory, czyli spójniki
  4. słowa kluczowe, czyli wyrazy interpretowane przez serwer bazodanowy w określony sposób
  5. komentarze, ignorowane przez serwery bazodanowe 
Instrukcja języka SQL zaczyna się poleceniem (słowem kluczowym) określającym operację, która ma być wykonana, następnie występują z reguły dookreślające tę operację klauzule.

Identyfikatory


Każdy z obiektów (baza, tabela, kolumna) musi mieć niepowtarzalną nazwę, czyli swój identyfikator. 

Identyfikatory muszą być zgodne ze zdefiniowanymi w standardzie języka SQL regułami, takimi jak:
  1. nie mogą składać się z więcej niż znaków
  2. mogą zawierać litery, cyfry oraz symbole: @, $, #. Pozostała symbole, w tym znak spacji, są niedozwolone
  3. mogą zaczynać się literą, ale nie cyfrą. Identyfikatory zaczynające się jednym z dwóch dozwolonych symboli mają specjalne znaczenie:
    • identyfikator rozpoczynający się symbolem @ oznacza zmienną
    • identyfikator rozpoczynający się symbolem # oznacza obiekt tymczasowy
  4. nie mogą być słowami kluczowymi języka SQL
Dodatkowo identyfikatory powinny być zgodne z poniższymi konwencjami nazewniczymi:
  1. Powinny być krótkie, ale jednoznacznie opisywać dany obiekt. Np. tabela zawierająca zamówienia z roku 2026 powinna nazywać się nie Z26, ale raczej Zamowienia2026.
  2. Wielkość liter powinna być zgodna z przyjętymi w ramach projektu regułami. Na przykład zasada mówiąca o tym, że każdy wyraz (z wyjątkiem pierwszego) powinien zaczynać się od wielkiej litery, np. danePersonalnePracownikow
  3. Przedrostek nazw widoków, funkcji użytkownika, procedur składowanych czy wyzwalaczy powinien wskazywać na typ obiektu, np. udf funkcja użytkownika (User Define Function), usp - procedura użytkownika (Trigger).

Literały


Wszystkie cyfry, ciągi znaków i daty, jeżeli nie są identyfikatorami, są traktowane jako stałe, czyli literały. W języku SQL ciągi znaków umieszcza się w apostrofach. 


Operatory


Operatory odgrywają rolę spójników. Operatory dzielą się na:
  1. arytmetyczne, do których należą: iloczyn *, iloraz /, modulo %, suma + i różnica -.
  2. znakowe, do których nalezą: konkatenacja (złączanie ciągów znaków) +, symbol wieloznaczny (zastępujący dowolny ciąg znaków) % i symbol wieloznaczny (zastępujący jeden znak) _.
  3. logiczne, do których należą: koniunkcja AND, alternatywa OR i negacja NOT.
  4. porównania, do których należą: = równy, < mniejszy niż, > większy nić, <= mniejszy lub równy, >= większy lub równy, i różny != (lub <>).
  5. charakterystyczne dla języka SQL. Takie jak m.in.: IN -przynależność do zbioru, BETWEEN...AND -przynależność do domkniętego przedziału, LIKE -zgodność ze wzorem, CASCADE -kaskadowe wykonanie operacji, APPLY -wywołanie funkcji tabelarycznej.

Słowa kluczowe


Słowa kluczowe to zastrzeżone, mające ściśle określone znaczenie ciągi znaków. Należą do nich:
  1. instrukcje języka SQL, takie jak SELECT czy CREATE.
  2. klauzule języka SQL, np. WHERE lub JOIN
  3. nazwy typów danych, np. INT lub CHAR
  4. nazwy funkcji systemowych, takie jak ISNULL() lub ABS()
  5. terminy zarezerwowane dla przyszłego użycia w danym serwerze bazodanowym.
Lista najczęściej spotykanych słów kluczowych jest dostępna w dodatkach.

Komentarze


W języku SQL występują dwa rodzaje komentarzy:
  1. Podwójny znak myślnika oznacza komentarz w wierszu. Cześć wiersza, która znajduje się za znakami --, jest traktowana jako komentarz.
  2. Znaki /* oznaczają początek bloku komentarza, a znaki */ jego koniec. Wiersze znajdujące się pomiędzy tymi znakami są traktowane jako komentarz.

środa, 4 marca 2026

SQL - Wprowadzenie - Normalizacja

 Normalizacja

Zgodnie z definicją zamieszczoną w Encyklopedii PWN, normalizacja może być rozumiana jako:

[...] działalność mająca na celu uzyskanie optymalnego w danych okolicznościach stopnia uporządkowania w określonym zakresie (przez ustalenie postanowień przeznaczonych do powszechnego i wielokrotnego stosowania, a dotyczących problemów istniejących lub możliwych do wystąpienia), w szczególności opracowywanie, publikowanie i wdrażanie norm;

Normalizacja to proces dostosowywania schematu bazy danych do wymogów modelu relacyjnego. Jego głównym celem jest wyeliminowanie anomalii wynikających z nadmiarowości danych, które mogłyby doprowadzić do utraty spójności danych. Podczas normalizacji zmienia się strukturę tabel tworzy nowe tabele i określa łączące je relacje, ale nie usuwa się ani nie modyfikuje przechowywanych w bazie informacji.

Normalizacja baz danych ma wiele zalet:

  • zmniejsza ryzyko niespójności danych;
  • upraszcza operacje dodawania, odczytu, aktualizacji i zapisu do bazy danych;
  • pozwala łatwiej pogrupować dane (np. poprzez wyodrębnienie nowych tabel);
  • zmniejsza ostateczny rozmiar bazy danych poprzez usunięcie duplikatów;
Normalizacja baz danych ma również istotne wady. Sztywne trzymanie się zasad normalizacji może powodować powstawanie dużej ilości relacji między tabelami, co sprawia, że proste zapytanie SELECT może zmienić się w skomplikowane zapytanie zawierające wiele klauzul JOIN oraz wykorzystujące wiele tabel pośrednich. Takie zapytanie może okazać się bardziej czasochłonne i wymagające dla silnika bazodanowego.


Pierwsza postać normalna

Głównym celem doprowadzenia do pierwszej postaci normalnej jest wyeliminowanie  nieatomowych atrybutów (tabela jest zgodna z 1PN, jeśli wszystkie jej kolumny przechowują atomowe, niepodzielne wartości).  Na przykład kolumnę Adres należy rozbić na kilka kolumn przechowujących kod, nazwę miasta i ulicę, a kolumnę Osoba - na dwie zawierające osobno Imię i Nazwisko. 

Za atomowe wartości należy przyjąć takie, które mogą być użyte w przyszłości do:

  • wyszukiwani, np. znalezienia osoby o podanym nazwisku
  • sortowania, np. przygotowania listy osób ułożonej alfabetycznie według imion
  • grupowania, np. policzenia osób mieszkających w poszczególnych miastach.
Ponadto, aby tabela mogła spełnić wymogi pierwszej postaci normalnej, musi posiadać kolumnę klucza podstawowego.


Druga postać normalna


Doprowadzenie tabeli do drugiej postaci normalnej polega na usunięciu z niej kolumn, które zależą funkcyjnie od części klucza podstawowego (tabela jest zgodna z 2PN, jeżeli znajduje się już w  pierwszej postaci normalnej i wartości wszystkich niekluczowych kolumn zależą od całego klucza podstawowego). W praktyce oznacza to, że jeśli klucz podstawowy tabeli jest prosty (założony na pojedynczej kolumnie), a nie złożony (założony na kilku kolumnach) i tabela jest w 1PN, to spełnia ona też automatycznie wymogi drugiej postaci normalnej. 


Trzecia postać normalna


Doprowadzenie tabeli to trzeciej postaci normalnej polega na znalezieniu i usunięciu przechodnich zależności pomiędzy atrybutami ( tabela jest zgodna z 3PN, jeżeli jest już w drugiej postaci normalnej i wartości jej kolumn nie są zależne od niekluczowych atrybutów). 

Doprowadzenie tabel do trzeciej postaci normalnej polega na:
  1.  Utworzenie tabel słownikowych, np. tabeli z nazwami miast. Takie tabele zawierają listy (słowniki) używanych w bazie terminów, dzięki czemu zamiast każdorazowo posługiwać się danym terminem, wystarczy użyć jego identyfikatora.
  2. Utworzeniu tabel łącznikowych, czyli takich, które umożliwiają budowanie relacji typu "wiele do wielu". Na przykład jeżeli założymy, że ta sama osoba może zapisać się jednocześnie na kilka kursów, a na ten sam kurs może zapisać się wiele osób, powinniśmy utworzyć nową tabelę KursOsoba i umieścić w niej klucze obce tabel Osoby i Kursy oraz atrybuty konieczne dla połączenia kursanta z jego zajęciami. 


Postać Boyce-a-Codda


Kolejną (czasami nazywaną postacią trzy i pół) postacią normalną jest postać Boyce-a-Codda (BCNF). Jej formalna definicja brzmi następująco: tabela jest zgodna z BCNF, jeżeli jest już w trzeciej postaci normalnej i dla każdej nietrywialnej zależności między podzbiorami jej atrybutów zbiór będący wyznacznikiem jest jej zbiorem identyfikującym. 


Czwarta postać normalna 


Omówione do tej pory postacie normalne definiowane były za pomocą pojęcia zależności funkcyjnej, czyli zależności, w której na podstawie wartości jednej kolumny (lub kolumn) można wnioskować wartość innych kolumn. Normalizując tabele zgodnie z tymi postaciami, minimalizowaliśmy liczbę powtarzających się wartości.

W definicji 4PN termin "zależność funkcyjna" jest zastąpiony terminem "zależność wielowartościowa"  (tabela jest zgodna z 4PN, jeżeli jest już w postaci Boyce'a-Codda i nie występują w niej zależności wielowartościowe). Wyobraźmy sobie tabelę Produkty, w której w kolumnie Nazwa zapisane są nazwy rożnych przedmiotów (np. krzesło, lornetka i tak dalej). W kolejnych kolumnach znajdują się wartości różnych atrybutów tych przedmiotów, np. w kolumnie Obicie kolor obicia, a w kolumnie Ogniskowa dane o ogniskowej obiektywu. Jako różne przedmioty mają rżzne cechy wiele komórek takiej tabeli będzie pustych. Powodem takiej anomalii jest występowanie  zależności wielowarstwowej, czyli takiej, w której na podstawie jednej kolumny  (nazwy przedmiotu) można wnioskować o wielu kolumnach. Aby doprowadzić  tabelę do postaci zgodnej z czwartą postacią normalną, należy ją rozbić na osobne tabele, których kolumny będą zawierały wyłącznie nazwy cech obiektów danego typu. 

SQL - Wprowadzenie - Składnia języka SQL

  Składnia języka SQL W języku SQL występuje 5 głównych kategorii syntaktycznych: identyfikatory, czyli nazwy obiektów literały, czyli stałe...