Bazy Danych

Opis zajęć i zasad

Zajęcia 10

Indeksy i ORM *

Ściągnij kod

NetBeans Project

Indeksy

Indeks jest specjalną strukturą danych wprowadzoną w celu zwiększenia prędkości wykonywania operacji na tabeli. Indeks w bazie danych jest odpowiednikiem spisu treści w książce.

Indeksy tworzymy poprze komendę CREATE

CREATE INDEX nazwa
ON Tabela (kolumny)

Podczas realizowania zapytania optymalizator (SQL Server) najpierw przeszukuje indeks, który jest uporządkowany, a następnie na podstawie indeksu odczytuje odpowiednie rekordy.

Indeksy dzielimy na główne (dla kluczy głównych), zgrupowane (dla nieunikalnych wartości grupujące te same wartości), niezgrupowany (podobnie jak zgrupowany tylko pamieta wszystkie pozycje elementów, jest gęstszy). Niezależnie od tego, czy indeksy są zgrupowane, czy niezgrupowane, najczęściej tworzone są w formie drzew zbalansowanych. Gwarantuje to logarytmiczny (względem rozmiaru) czas wykonywania podstawowych operacji takich jak wstawianie, wyszukiwanie czy usuwanie elementów.

W praktyce indeksy tworzymy dla:

Kolumn z ograniczeniem PRIMARY KEY.

Kolumn z ograniczeniem FOREIGN KEY oraz kolumn wykorzystywanych przy łączeniu tabel.

Kolumn przechowujących dane wykorzystywane jako argument wyszukiwania.

Kolumn przechowujących często sortowane dane.

JDBC

Java DataBase Connectivity - łącze do baz danych w języku Java. Aby móc posługiwać się bazą SQLite w Javie potrzebujesz tak naprawdę tylko jednej rzeczy - biblioteki ze sterownikiem konkretnej bazy danych. Dla MSSQL jest to JTDC lub Microsoft JDBC.

JTDS korzysta z autoryzacji serwera SQL server przez credentials konta windows.

Aby połączyć się z bazą danych inicjalizujemy sterownik "net.sourceforge.jtds.jdbc.Driver" oraz ustanawiamy połączenie z bazą danych za pomocą klasy DriverManager podając parametry. Następnie inicjalizujemy obiekt "statement" wykonujący wyrażenia sql za pomocą metody executeStatement(query) lub executeQuery(query) (w zależności od wykonywanego zapytania). Na końcu musimy pamiętać o zamknięciu elementów połączenia z bazą.

ORM

Object-Relational Mapping ORM – sposób odwzorowania obiektowej architektury systemu informatycznego na bazę danych (lub inny element systemu) o relacyjnym charakterze. Implementacja takiego odwzorowania stosowana jest m.in. w przypadku, gdy tworzony system oparty jest na podejściu obiektowym, a system bazy danych operuje na relacjach. Ułatwia to programistom pracę z bazą danych, często odbywa się to jednak kosztem wydajności zapytań do bazy danych. Największą zaletą ORM jest prostota użytkowania.

Przykładowo, aby zmienić hasło użytkownika w bazie danych użytkowników musimy wykonać poniższą operację:

public void changePassword(User u, String newPassword) {
        con.prepareStatement(UPDATE tab_users SET password = ? WHERE login = ?).
        setString(1, u.getPassword()).
        setString(2, u.getLogin()).execute();
}

Chcielibyśmy, aby taka operacja wyglądała następująco:

public void changePassword(User u, String newPassword) {
      u.setPassword(newPassword);
}

a więc bez konieczności „grzebania” w relacyjnej bazie danych.

Najbardziej popularną implementacją idei ORM dla javy jest Hibernate.

Elementy technologii ORM :
API (Application Programming Interface), czyli Interfejs programowania aplikacji) do zarządzania trwałością obiektów

Mechanizm specyfikowania metadanych opisujących odwzorowanie klas na relacje w bazach danych

Język lub API do wykonywania zapytań.

Praca z ORM:

Tworzymy model danych w obiektowym języku programowania.

Tworzymy schemat bazy danych odpowiadający temu modelowi (może się oczywiście okazać, że już mamy jakąś bazę danych, z którą musimy współpracować).

Definiujemy odwzorowanie bazy danych na model relacyjny. Tworzymy aplikację obiektową operującą na modelu obiektowym (tworząc kod aplikacji w zasadzie nie musimy się zastanawiać jak nasze obiekty zostaną zapisane).

W razie konieczności pobrania obiektów z bazy danych, bądź utrwalenia jakiegoś nowo utworzonego obiektu, czy też usunięcia utrwalonego obiektu posługujemy się odpowiednim API danego narzędzia ORM.

Zadanie Domowe

Prześlij zapisane w pliku tekstowym zapytanie z pliku zadanie.txt w kodzie ORM

Termin wykonania zadania: Sobota 10.12.2016 do godziny 24.00.

Rozwiązania proszę przesłać przez stronę:

Logujemy się jak na komputery Wydziałowe, przesyłamy plik (jeden wspólny dla wszystkich) z rozwiązaniami.

UWAGA! Rozwiązania można przesłać tylko raz.

*

Wykorzystano materiały z

https://msdn.microsoft.com/pl-pl/library/baza-danych-sql-server--indeksy--kiedy-i-jak-je-stosowac.aspx

https://msdn.microsoft.com/pl-pl/library/encyklopedia-sql--indeksowanie-tabel-indeks-klastrowy-i-nieklastrowy.aspx

https://blog.exaco.pl/indeksy-mssql-server/

http://www.sqlinsider.pl/2008/09/optymalizacja-cz1-indeksy.html

http://math.uni.lodz.pl/~kowalcr/Bazy/Temat8.pdf

http://zeszyty-naukowe.wwsi.edu.pl/zeszyty/zeszyt4/Mapowanie_Obiektowo-Relacyjne_ORM_-_Czy_Tylko_Dobra_Idea.pdf