Wprowadzenie do Baz Danych Wojciech Gańcza Plan Rodzaje danych Porównanie danych opisowych ze strukturalizowanym Pole, kolumna, tablica Indeksy Bazy zawierające więcej tabel – złączenia Widoki i zapytania (kwerendy) Czym są hurtownie danych Hierarchie drzewiaste XML Hierarchie wielokrotne i rozmyte Rodzaje danych Różne informacje zapisujemy w różny sposób stosując różne typy danych: Rozmiar ubrań określa się numerem Kolor – nazwą – ale z konkretnej grupy słów Tytuł książki – to tekst Numer telefonu – czy jest liczbą czy tekstem ? Data może być różnie zapisywana, ale zawsze określa konkretny dzień. Nawet liczby mogą być różnego typu – całkowite, rzeczywiste (z określoną lub nieokreśloną precyzją) Rodzaje danych (2) To wszystko były proste informacje, a co jeśli mamy do czynienia z informacjami bardziej złożonymi ? Jak zapisać informacje o osobie, samochodzie, książce czy filmie? Informacje takie są mogą być zapisane na dwa sposoby: Jako opis tekstowy Jako grupa prostych informacji z których każda opisuje jakiś aspekt (imię, tytuł, ISBN, nazwisko reżysera itp.. Opis Opis tekstowy ma wiele zalet – potrafi oddać nastrój i jest ograniczony jedynie inwencją osoby przygotowującej dane. Ma też wady – trudno w nim znaleźć konkretną informację. Jest subiektywny Może być niezrozumiały dla osoby która nie specjalizuje się w dziedzinie jakiej dotyczy Trudno się go poprawia Opis (2) Dane opisowe często się pojawiają tam gdzie trudno określić strukturę danych. W ten sposób zapisuje się informacje o podjętych metodach leczenia, zabiegach konserwatorskich czy opisach dzieł sztuki określających nie tylko ‘fizyczne’ cechy dzieła. Format taki mają także opisy celów lub podejmowanych działań Dane opisowe nie są proste do porównywania a ich automatyczne porównywanie jest niemożliwe Dane złożone Dane możemy zapisać jako zestaw danych prostych. Przykłady: karta biblioteczna, dowód rejestracyjny, dowód osobisty. Niestety takie opisy nie pozwalają na całkowite poznanie opisywanego przedmiotu, ale dają się łatwo przetwarzać na komputerach Tego typu opisy znakomicie sprawdzają się w statystyce, ekonomii, finansach Nie są idealnym wyborem w przypadku dzieł sztuki Podstawowe pojęcia Element opisu który jest prostą daną – nazywamy polem. Mole musi mieć określony typ – wskazujący jakie dane mogą być w nim przechowywane, oraz nazwę – by można było określić o jaką część informacji chodzi. Zbiór wszystkich pól które opisują pojedynczy element – to rekord. Wszystkie rekordy tego samego typu (to znaczy zawierające takie same pola) tworzą tabelę Pola o tej samej nazwie – to kolumna Przykład tabeli Przykładów nie trzeba długo szukać – wystarczy zajrzeć do dowolnego katalogu na komputerze – i zobaczymy spis informacji o każdym pliku: Jego nazwę Typ Ilość zajmowanego miejsca Datę utworzenia W niektórych systemach – także uprawnienia Zwróćmy uwagę że te informacje mogą być różnie prezentowane Programy Wiele programów pozwala na tworzenie baz danych: MS Access (będziemy na nim pracować) MS SQL Server My SQL – darmowy, prosty serwer baz danych (linux, windows) Baza danych programu MS Works Open Office Oracle – poważny serwer baz danych Postgress Zadanie 1 Otwórz program MS Access Utwórz nową bazę danych Utwórz tabelę w której można zapisać zbiór filmów Sprawdź jakie typy pól są przez program MS Access obsługiwane. Indeksy Dane powinny być przeglądane w określonej kolejności (zazwyczaj nie w tej w jakiej były wprowadzane) Sortowanie danych jest czasochłonne Można byłoby trzymać dane w postaci już posortowanej – ale co zrobić jeśli potrzebujemy jednocześnie różne kolejności rekordów ? Pomocne są tu indeksy – pamiętające kolejności rekordów Indeksy (2) Można utworzyć wiele indeksów do jednej tabeli Indeksować można pojedyncze pola lub ich grupy Indeksy mogą także pilnować unikalności danych – nie pozwalając dodać powtarzających się (w indeksie) danych Nie trzeba wskazywać jaki indeks powinien być użyty – baza danych sama decyduje o ich stosowaniu (i zazwyczaj stosują je dobrze). Dodanie indeksu zwiększa szybkość pracy. Wiele tabel W naszej bazie filmów wiele informacji się powiela – nazwisko reżysera, wytwórnia itp.. Wpisywanie tych samych danych nie ma sensu i prowadzi do błędów Idealnie byłoby gdybyśmy mogli odnieść się do danych już raz wpisanych Muszą to być dane które można uzupełniać – nie może to być więc okrojony typ prosty – ale referencja do innej tabeli Wiele tabel (2) Jeśli umieścimy dane w innej tabeli – to musimy się do nich w jakiś sposób odwołać Jedynym rozwiązaniem jest podanie unikalnego identyfikatora rekordu do którego się odwołujemy Złączenia Złączenia (relacje) pozwalają określić jak tabele się do siebie odwołują Zazwyczaj łączymy tabele korzystając z klucza podstawowego określonego jako pole automatycznie numerowane (liczba całkowita) Możemy połączyć wiele tabel. Bazy danych które korzystają z mechanizmu złączeń określane są jako relacyjne bazy danych Kolejne pojęcia Krotka (encja) – to grupa pól opisująca pojedynczy element danych. Krotki są podstawowymi cegiełkami z których budowane są dane. Dobrze jest jeśli rekord odpowiada krotce – nie ma wtedy redundancji danych W praktyce – stosuje się to gdy nie ma przeciwwskazań związanych z wydajnością Zadanie 2 Dodaj do bazy tabelę Artyści zawierającą dane aktorów i reżyserów W tabeli zawierającej filmy – dodaj pole „reżyser” odwołujące się do nowej tabeli Zapytania (kwerendy) Wyświetlanie tabel w całości nie jest specjalnie użyteczne. W przypadku tabel złączonych – dobrze jest wyświetlić informacje z pól obu tabel – na przykład tytuł filmu i nazwisko reżysera. Do przygotowania takich widoków służą kwerendy czyli zapytania. W programach bazodanowych zapytania formułuje się w języku SQL. Kwerendy (2) W wielu programach zapytania może utworzyć klikając myszką – bez konieczności wpisywania poleceń SQL Zapytania mogą wybierać konkretne kolumny do wyświetlenia. Możliwe jest także: Filtrowanie Agregowanie Przeliczanie danych Wyniki zapytań mogą być używane tak samo jak tabele. Zadanie 3 Dodaj zapytanie które wyświetli tytuły filmów i ich reżyserów – posortowane po tytułach. Kwerendy (3) Kwerendy pozwalają na różne spojrzenia na dane Jeśli przygotujemy tabelę zawierającą słownik (na przykład angielsko – polski) – to możemy zbudować dwa zapytania które zwrócą słownik polskoangielski i angielsko-polski (oba odpowiednio posortowane) Jakakolwiek zmiana danych – jest od razu widoczna w wynikach zapytań Dla wyników zapytań nie można stosować indeksów. Kwerendy (4) Stosowanie zapytań ma wiele zalet – ale program musi przeglądać wiele tabel by zbudować odpowiedź. Jeśli w zapytaniu agregujemy dane lub je przeliczamy – to obliczenia są wykonywana za każdym razem gdy żądamy wyników. W przypadku bardzo dużych ilości danych – jest to bardzo nieefektywne Lepiej pamiętać w bazie już przeliczone wartości Hurtownie danych W hurtowniach danych wszystkie potrzebne dane są obliczone i gotowe do użycia Dane w hurtowniach mają dużą redundancje ale są dostępne Dane są pamiętane w.g. pewnych hierarchii – związanych z grupowaniem Hierarchie przypominają katalogi znane z systemu operacyjnego – zawsze wiadomo do jakiego elementu wyższego rzędy należy bieżący element. Hurtownie danych (2) Zadanie 4 Dodaj do bazy filmów tabelę na kategorie filmów i wpisz przykładowe kategorie Stwórz hierarchię kategorii – tak by jedna kategoria mogła zawierać inne Drzewa hierarchii Łatwo przygotować hierarchię drzewiastą która pozwala na: Przypisanie do każdej kategorii Przypisanie tylko do kategorii końcowych Może to wymagać dodania relacji do nowych tabel, lub autorelacji do tabeli kategorii Może też komplikować zapytania jeśli będziemy chcieli wyświetlać także podhierarchie przy wyszukiwaniu danych Hierarchie drzewiaste Takie hierarchie często spotyka się w życiu: Klasyfikacja roślin Klasyfikacja filmów w wideotece (półkami) Hierarchia pracowników w zakładzie pracy W wielu przypadkach są one naturalne, ale nie wszędzie. Podobnie jak nie zawsze baza złożona z tabel ma sens. Czasem dane dotyczące pojedynczego elementu mają strukturę drzewiastą XML Jeśli dane mają bardziej złożoną strukturę – to możemy użyć skomplikowanego modelu relacyjnego albo… Użyć innego typu bazy danych: Bazy obiektowej Bazy wiedzy Bazy wiedzy – pozwalają na miękką definicje poszczególnych rekordów – poszczególne rekordy mogą mieć różną strukturę (różny zestaw pól) XML (2) Wydawałoby się, że trudno nad tym zapanować – ale możemy zapisać dane postaci dokumentu XML W tym formacie – wszystkie dane pamiętane są jako tekst, ale dodana jest do niech struktura przy pomocy znaczników – podobnych trochę do znaczników języka HTML Dowolny element danych może zawierać dowolne inne elementy – nie jest tu jednak dozwolona rekurencja HML (3) Hierarchie wielokrotne Często musimy określić kilka wartości według których klasyfikujemy dane W przypadku filmów – jak zaklasyfikować komedię kryminalną? Jako komedie w kategorii kryminałów czy raczej jako kryminał w kategorii komedii? Pomocne są hierarchie wielokrotne – pozwalające na przypisanie wielu cech do jednego elementu Ale jak to zrealizować w praktyce? Zadanie 5 Dodaj tabelę pozwalającą na połączenie filmu i kategorii tak by stworzyć relację wiele – do wielu Dodaj zapytanie wyświetlające wyłącznie komedie Hierarchie wielokrotne Możemy oczywiście połączyć możliwość przypisania do wielu elementów hierarchii wraz z możliwości budowania hierarchii drzewiastych Wartościami elementów hierarchii mogą być wartości które nie są konkretnymi wartościami (takie jak kilka, trochę, mało, średnio) – tworząc atrapę hierarchii rozmytej Prawdziwe hierarchie rozmyte – są jak na razie domeną AI Pojęcie bazy rozproszonej Poszczególne bazy można byłoby zintegrować tak by stworzyć jedną wspólną bazę. Można to zrobić przez wyznaczenia jednego serwera i skopiowanie danych Lub przez stworzenie katalogu elementów zawierającego informację: w jakich bazach znajdują się szczegółowe dane Architektura bazy rozproszonej Podział danych Dane w poszczególnych bazach mogą mieć taką samą strukturę, a jedynie różną zawartość (na przykład dane bibliotek zawierających opisy posiadanych książek) Mogą również zawierać dane na różnym stopniu szczegółowości (na przykład dane osobowe) Powody podziału danych Podział danych powinien być naturalny Dane najczęściej używane powinny być przechowywane lokalnie i dostępne przez lokalny serwer bazy danych Dostęp do danych globalnych wymaga obciążenia wielu serwerów oraz sieci Fragmentacja pozioma Poszczególne bazy mają taką samą architekturę, lecz różnią się zawartością Pozy mogą być połączone przez dodanie rekordów (UNION) Istnieje kryterium selekcji pozwalające stwierdzić czy rekord znajduje się w bazie lokalnej Fragmentacja pozioma (2) Fragmentacja pionowa Każdy fragment stanowi podzbiór atrybutów logicznych całej kolekcji danych Każdy fragment musi zawierać klucz główny Scalenie bazy – poprzez złączenie 1:1 Pozwala na ukrycie części danych przed użytkownikami lokalnymi i współbieżną modyfikacje danych Fragmentacja pionowa (2) Fragmentacja mieszana Przyszłość Coraz więcej danych jest dostępnych w postaci elektronicznej Dane są przetwarzane automatycznie w coraz bardziej skomplikowany sposób Pojawiają się nowe metody zarządzania danymi Lepiej tego nie przegapić Formułowanie zapytań W bazach danych Wojciech Gańcza Zapytanie Zapytanie (kwerenda) - czynność polegająca na zbieraniu lub poszukiwaniu informacji w bazach danych Zapytanie może być formułowane różnie w zależności od rodzaju serwera który przeszukujemy Zapytania tworzone są w specjalnych językach zapytań SQL Język SQL jest najbardziej popularnym językiem zapytań Obecnie wszystkie języki pozwalają na użycie języka SQL. Doczekał się on standardu z którym serwery baz danych są dość dobrze zgodne Znając podstawy SQL możemy pracować na dowolnym serwerze baz danych SQL(2) Język ten obecnie jest traktowany jako język programowania choć stworzony powstał jako interface użytkownika. W dzisiejszych czasach więcej się wymaga od komputerów niż od użytkowników więc większość serwerów udostępnia interface pozwalający na budowę zapytań przy w prostszy sposób (np. Konstruktor kwerend w programie MS Access) Przykładowa baza Id Klinta Nazwisko Klienta Imię Klienta Telefon Klienta Miasto Klienta 01 Nowak Jan 3752669 Wrocław 02 Kowalski Tadeusz 3865738 Kluczbork 03 Mucha Stanisław 5647890 Wrocław 04 Kozłowski Lech 6759870 Wrocław 05 Lewandowska Anna 4509679 Oleśnica 06 Kozłowski 0978654 Wrocław Andrzej Przykład zapytania Szukam numerów telefonów moich klientów z Wrocławia SELECT Nazwisko Klienta, Imię Klienta, Telefon Klienta FROM Klienci WHERE Miasto Klienta = "Wrocław" ORDER BY Nazwisko Klienta, Imię Klienta Składniki zapytania SQL SELECT – wybiera pola do wyświetlenia FROM – definiuje tabele lub zestaw tabel (łączonych operatorem JOIN) WHERE – pozwala na podanie warunków jakie mają spełniać wyświetlane rekordy ORDER BY – podaje kolejność w jakiej rekordy będą wyświetlane. Sortowanie odbywa się po wymienionych polach Składniki polecenia SQL (2) GROUP BY – pozwala na agregację danych. Jeśli nie chcemy wyświetlać rekordów a jedynie zbiorcze dane (na przykład ilość abonentów w poszczególnych miastach) – możemy określić według zawartości których pół nastąpi grupowanie HAVING – działa jak WHERE, ale na polach wyliczonych przez agregację Przykład zapytania SELECT count(*) as Liczba, Miasto Klienta FROM Klienci GROUP BY Miasto Klienta HAVING count(*) < 10 Zapytanie zwraca listę miejscowości mających mniej niż 10 wpisów w tablicy abonentów Zapytania Pracując z różnymi systemami nie musimy znać ich wewnętrznej budowy oraz sposobu pamiętania danych w tabelach W większości wypadków poszukiwań podajemy jedynie warunki jakie mają spełniać poszukiwane elementy Zapytania - przykłady Poszukiwanie plików na dysku komputera (eksplorator windows) Poszukiwanie artykułów w sieci (http://www.google.pl/) Wyszukiwanie książek w bibliotece (http://www.bu.uni.wroc.pl/katalog/) Wyszukiwarki Większość wyszukiwarek udostępnia kilka interfejsów Prosty – pozwalający na określenie czego i ewentualnie gdzie szukamy Zaawansowany – pozwalający na skonstruowanie zapytań zawierających bardziej złożone warunki Każda wyszukiwarka zawiera instrukcję obsługi (Pomoc, Help, Manual) Wyrażenia Porównanie – wykonywane jest domyślnie. Jeśli podamy słowo – poszukiwane będą rekordy lub dokumenty zawierające podane słowo Jeśli umieścimy w zapytaniu kilka słów – będą one traktowane jak zbiór warunków a nie fragment tekstu Wyrażenia (2) AND (+) – wymusza występowanie obu słów (często jest to domyślny operator i nie trzeba go pisać) OR– musi wystąpić co najmniej jedno słowo NOT (-) – dokumenty zawierające podane słowo nie będą wyświetlane NEAR – słowa podzielone tym operatorem musza występować blisko siebie Wyrażenia (3) „ … ” – ciąg tekstów będzie traktowany jak pojedynczy warunek – porównywane jest cały tekst Do budowy bardziej komplikowanych wyrażeń można używać nawiasów. Wyrażenia w nawiasach traktowane są jak pojedyncze wyrażenie Wyrażenia regularne Jeśli nie znamy dokładnie wyrażenia którego szukamy, można użyć wyrażeń regularnych zawierających tzw. symbole wieloznaczne. * - zastępuje dowolny ciąg znaków ? – zastępuje dowolny jeden znak Znaki używane jako wieloznaczniki są różne w zależności od języka zapytań. Często dostępne są także inne symbole Przykłady zapytań Ala ma kota oraz psa – szukacz znajdzie dokumenty, w których występują wszystkie słowa. "Ala ma kota" oraz psa – Szukacz znajdzie dokumenty, w których występuje fraza Ala ma kota oraz występują oba pozostałe słowa. Ala ma kot* – Jak wyżej, ale słowo zakończone gwiazdką może wystąpić z dowolną końcówką. Gwiazdkę w pytaniu można umieścić na końcu słowa zawierającego co najmniej trzy litery lub cyfry. Przykłady zapytań (2) Ala ma [kota kotka koty kotki] – Szukacz znajdzie dokumenty, w których na pewno występuje Ala oraz ma i w których występuje co najmniej jedno ze słów z wnętrza nawiasu (którekolwiek). Ala ma [kota kotka koty kotki] [psa psy psów] – Szukacz znajdzie dokumenty, w których występują pierwsze dwa słowa i w których występuje co najmniej po jednym ze słów z wnętrza każdego z nawiasów. Google Biblioteka Explorator MS Windows