Baza danych

RIZzVtuCKPzQ9

Plik bazy SQLite3 pracownicy.db
Plik DB o rozmiarze 24.00 KB w języku polskim

Baza danych przygotowana w systemie bazodanowym SQLite3 zapisana jest w pliku pracownicy.db, który pobieramy i zapisujemy w wybranym katalogu. Do zarządzania bazą użyjemy programu SQLiteStudio, ale można do tego celu użyć również wiersza poleceń bazy SQLite3. Informacje na temat tych narzędzi zawarte zostały w materiale Definiowanie schematu bazy danych w języku SQL, etap IIPkXbedRKMDefiniowanie schematu bazy danych w języku SQL, etap II.

Na początku poznajmy schemat bazy.

Ćwiczenie 1

Po uruchomieniu programu SQLiteStudio wybierz polecenie Bazy danych | Dodaj bazę danych i wskaż położenie pliku pracownicy.db. Następnie połącz się z bazą, dwukrotnie klikając nazwę bazy w panelu Bazy danych.

Następnie kliknij dwa razy nazwę tabeli pracownicy, w zakładce Struktura zobaczysz nazwy i typy danych pól zawartych w tabeli. Po wybraniu zakładki Dane zobaczysz przechowywane w tabeli wartości. Jeżeli klikniesz zakładkę DDL, zobaczysz polecenie SQL, które zostało użyte do utworzenia danej tabeli.

Zmiana schematu bazy

Baza zawiera dane na temat pracowników pewnej firmy. W tabeli pracownicy zawarte są informacje osobowe. Łatwo zauważyć, że część informacji dotycząca nazw miast i kodów pocztowych powtarza się. Odwołując się do zasad normalizacjinormalizacjanormalizacji, warto utworzyć nową tabelę słownikową z danymi miast i połączyć ją relacją z tabelą pracownicy.

W przypadku danych w omawianej bazie kody pocztowe są takie same dla każdego miasta, dlatego umieścimy je razem z nazwami miast w jednej tabeli. Gdyby tak nie było lub też chcielibyśmy, żeby baza była przygotowana na przechowywanie danych zgodne z zasadami normalizacji, kody pocztowe należałoby zapisać w osobnej tabeli. Taka tabela musiała by również zawierać identyfikatory miast, do których przynależą kody pocztowe.

W programie SQLiteStudio przywołujemy okno edytora SQL, wybierając polecenie Narzędzia | Otwórz edytor SQL. Wpisujemy i wykonujemy pierwszą instrukcję:

Linia 1. CREATE TABLE miasta otwórz nawias okrągły. Linia 2. id podkreślnik miasta INTEGER PRIMARY KEY AUTOINCREMENT przecinek. Linia 3. nazwa VARCHAR otwórz nawias okrągły 30 zamknij nawias okrągły NOT NULL przecinek. Linia 4. kod CHAR otwórz nawias okrągły 6 zamknij nawias okrągły DEFAULT apostrof apostrof. Linia 5. zamknij nawias okrągły średnik.

W wyniku kwerendy powstanie tabela miasta. Pierwsze pole będzie kluczem głównym. W drugim zapiszemy nazwy, w trzecim kody pocztowe miast.

Do nowej tabeli dodamy dane pobrane z tabeli pracownicy, przy użyciu podzapytania SELECT. Będą to niepowtarzające się nazwy miast i ich kody pocztowe.

Linia 1. INSERT INTO miasta otwórz nawias okrągły nazwa przecinek kod zamknij nawias okrągły. Linia 2. SELECT DISTINCT miasto przecinek kod FROM pracownicy średnik.
Ważne!

Przy używaniu powyższego polecenia należy pamiętać, że obie tabele muszą mieć tę samą strukturę, jeśli chodzi o typy wybieranych pól.

Ćwiczenie 2

Kliknij dwukrotnie tabelę miasta, a następnie kartę Dane, żeby zobaczyć wprowadzone wartości. Następnie wykonaj kwerendę:

Linia 1. SELECT asterysk FROM miasta średnik.

W tabeli pracownicy stworzymy nowe pole id_miasta, które posłuży do utworzenia relacji z tabelą miasta:

Linia 1. ALTER TABLE pracownicy ADD id podkreślnik miasta INTEGER średnik.

Używamy klauzuli ALTER, która pozwala na:

  • zmianę nazwy tabeli,

  • dodawanie, usuwanie lub zmienianie pól tabeli,

  • dodawanie i usuwanie ograniczeńograniczeniaograniczeń nakładanych na pola tabeli.

Zamiast powtarzających się nazw i kodów pocztowych miast w tabeli pracownicy chcemy w każdym rekordzie zapisać identyfikator miasta. Użyjemy klauzuli UPDATE służącej do zmiany wartości przechowywanych w polach (kolumnach) bazy danych.

Linia 1. UPDATE pracownicy. Linia 2. SET id podkreślnik miasta znak równości otwórz nawias okrągły SELECT id podkreślnik miasta FROM miasta WHERE nazwa znak równości pracownicy kropka miasto zamknij nawias okrągły średnik.

Powyższy kod czytamy następująco: zaktualizuj tabelę pracownicy, zmień wartość w polu id_miasta na identyfikator miasta wybrany przez podzapytanie z tabeli miasta na podstawie dopasowania nazwy miasta z obu tabel. Zwróćmy uwagę, że zapytanie wykonuje się na wszystkich rekordach.

Ponieważ w tabeli pracownicy mamy już odniesienie do tabeli miasta, zbędne pola moglibyśmy usunąć, a na nowe pole id_miasta nałożyć ograniczenie:

Linia 1. ALTER TABLE pracownicy DROP COLUMN kod średnik. Linia 2. ALTER TABLE pracownicy DROP COLUMN miasto średnik. Linia 3. ALTER TABLE pracownicy. Linia 4. ADD FOREIGN KEY otwórz nawias okrągły id podkreślnik miasta zamknij nawias okrągły REFERENCES miasta otwórz nawias okrągły id podkreślnik miasta zamknij nawias okrągły średnik.

Jednak system bazodanowy SQLite3 nie wspiera powyższych operacji. Zamiast tego musimy utworzyć nową tabelę z odpowiednimi polami i zaimportować do niej dane z poprzedniej tabeli.

Zaczynamy od wykonania po kolei podanych trzech zapytań:

Linia 1. PRAGMA foreign podkreślnik keys znak równości 0 średnik. Linia 2. CREATE TABLE pracownicy podkreślnik tmp AS SELECT asterysk FROM pracownicy średnik. Linia 3. DROP TABLE pracownicy średnik.

Dokładne wyjaśnienie powyższych zapytań znajduje się w sekcji „Prezentacja multimedialna”.

Problem klucza obcego

Tabelę pracownicy utworzymy na nowo za pomocą poniższego kodu:

Linia 1. CREATE TABLE pracownicy otwórz nawias okrągły. Linia 2. id INTEGER PRIMARY KEY AUTOINCREMENT przecinek. Linia 3. imie TEXT przecinek. Linia 4. nazwisko TEXT przecinek. Linia 5. data DATE przecinek. Linia 6. ulica TEXT przecinek. Linia 7. id podkreślnik miasta INETEGER przecinek. Linia 8. FOREIGN KEY otwórz nawias okrągły id podkreślnik miasta zamknij nawias okrągły REFERENCES miasta otwórz nawias okrągły id podkreślnik miasta zamknij nawias okrągły. Linia 9. zamknij nawias okrągły średnik.

Zwróćmy uwagę na definicję klucza obcego, którego nie mogliśmy dodać wcześniej ze względu na brak tej opcji w bazach SQLite3. W nowej tabeli nie tworzymy również niepotrzebnych już pól kodmiasto.

Dane w nowej tabeli umieścimy za pomocą poniższej klauzuli:

Linia 1. INSERT INTO pracownicy. Linia 2. SELECT id przecinek imie przecinek nazwisko przecinek data przecinek ulica przecinek id podkreślnik miasta. Linia 3. FROM pracownicy podkreślnik tmp średnik.

W zapytaniu wybierającym nie możemy użyć selektora wszystkich pól, czyli znaku znaku „*”, musimy podać we właściwej kolejności nazwy kolumn, ponieważ nie chcemy kopiować danych dotyczących miast.

Tabelę tymczasową pracownicy_tmp możemy już usunąć:

Linia 1. DROP TABLE pracownicy podkreślnik tmp średnik.

Na koniec należy przywrócić kontrolę ograniczeń kluczy obcych i sprawdzić poprawność wykonanych operacji:

Linia 1. PRAGMA foreign podkreślnik keys znak równości 1 średnik.
Linia 1. SELECT imie przecinek nazwisko przecinek miasta kropka nazwa. Linia 2. FROM pracownicy. Linia 3. INNER JOIN miasta USING otwórz nawias okrągły id podkreślnik miasta zamknij nawias okrągły średnik.
RVPCuyApzRcWK
Kolejne zapytania wykonywane w bazie.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

normalizacja
normalizacja

normalizacja bazy danych – proces, którego celem jest usunięcie powtarzających się informacji z bazy danych

ograniczenia
ograniczenia

(ang. constraints) reguły definiujące i później wymuszające cechy wartości przechowywanych w danym polu