PYTANIE nr 13
Wyjaśnić pojęcie klucza głównego i obcego w bazach danych.
Baza danych - zbiór powiązanych ze sobą logicznie danych, zorganizowany zgodnie z określonym modelem danych.
Klucze są podstawową koncepcją w teorii baz danych. Zapewniają tabelom możliwość skorelowania ze sobą dwóch lub więcej tabel. Nawigacja w bazie danych zależy od możliwości identyfikacji określonego wiersza w tabeli za pomocą klucza głównego.
Klucz główny - to jedna lub więcej kolumn tabeli, w których wartości jednoznacznie identyfikują każdy wiersz w danej tabeli.
Klucz główny jest wybierany ze zbioru kluczy kandydujących.
Klucz kandydujący to kolumna lub zbiór kolumn, które mogą występować jako jednoznaczny identyfikator wierszy w tabeli. W każdej relacji może istnieć wiele kluczy kandydujących.
Klucz obcy - jest kolumną lub grupą kolumn tabeli, która czerpie swoje wartości z tej samej dziedziny co klucz główny tabeli powiązanej z nią w bazie danych.
Ważne jest to, iż wartość klucza obcego nie może istnieć bez powiązania z kluczem głównym.
Podstawowe zasady zarządzania i identyfikacji kluczy:
KLUCZ GŁÓWNY: |
KLUCZ OBCY: |
Każda tabela w bazie danych musi posiadać klucz główny unikalnie identyfikujący wiersz. |
Tabela nie musi zawierać klucza obcego, ale może też zawierać kilka kluczy obcych. |
Klucz główny nie może się powtarzać. Może być co najwyżej jedna wartość atrybutu klucza głównego w danej tabeli. |
Wartości klucza obcego mogą się powtarzać dla wielu rekordów w tabeli. |
Wartości klucza głównego nie może być NULL |
Każda wartość klucza obcego może być albo równa jakiejś wartości klucza głównego występującej w tabeli powiązanej, lub (ewentualnie) NULL |
Wartość pusta (NULL) – reprezentuje wartość atrybutu, która w danej chwili nie jest znana lub nie może zostać ustalona.
Pytanie 15.
W oparciu o jaki język, najczęściej obecnie, odbywa się komunikacja pomiędzy serwerem bazodanowym i aplikacją kliencką. Omówić podstawowe instrukcje tego języka.
Obecnie najczęściej używanym językiem służącym do komunikacji serwer aplikacja jest SQL (ang. Structured Query Language) jest najbardziej znanym językiem zapytań, zaimplementowanym w praktycznie wszystkich istniejących na rynku systemach relacyjnych baz danych.
Instrukcje języka SQL podzielić można na kilka typów:
- instrukcje wyszukiwania danych
SELECT – wybranie konkretnych danych z bazy
- instrukcje tworzenia bazy (Data Description Language)
CREATE – stworzenie bazy danych lub tabeli np.: CREATE DATABESE nazwa_bazy;
DROP – usunięcie bazy, tabeli
- instrukcje modyfikacji danych (Data Modification Language)
UPDATE – zmiana danych
INSERT – wstawienie danych
DETELE – usunięcie danych
- instrukcje do określania praw dostępu i więzów integralności (Data Control Language) –
GRANT – nadanie uprawnień
np.: GRANT INSERT,SELECT,UPDATE,CREATE,DELETE,EXECUTE on nazwa_bazy to nazwa_użytkownika;
REVOKE – usuwanie uprawnień
Pytanie 16.
Wyjaśnić różnice pomiędzy współpracą aplikacji klienckiej z serwerem bazodanowym w trybie połączeniowym i bezpołączeniowym. Omówić sposób implementacji tych dwóch filozofii w .NET.
Implementacja filozofii połączeniowej jak i bezpołączeniowej odbywa się poprzez zbiór klas i interfejsów ADO.NET służących do łączenia się i obsługiwania baz danych poziomu aplikacji napisanych w technologii .NET
Dostawca danych - pośredniczy w wymianie danych pomiędzy obiektami DataSet a bazami danych
ODBC Data Provider (przestrzeń nazw System.Data.Odbc) - zwykle złuży do operacji na starszych wersjach baz danych
OleDb Data Provider (przestrzeń nazw System.Data.OleDb) - do baz danych z aplikacji takich jak Excel czy Access korzystających z technologii OleDB
Oracle Data Provider (przestrzeń nazw System.Data.OracleClient) - do baz Oraclowych
SQL Data Provider (przestrzeń nazw System.Data.SqlClient) - do baz z systemem SQL
W dostawcach danych znajdują się następujące obiekty:
Connection (SqlConnection, OleDbConnection, OdbcConnection, OracleConnection) — reprezentuje połączenie z konkretną bazą danych. Posiada wszystkie informacje potrzebne do połączenia się z bazą, uwierzytelnienia jako określony użytkownik i prowadzenia dalszej komunikacji,
Command (SqlCommand, OleDbCommand, OdbcCommand, OracleCommand) — służy do wykonywania poleceń dotyczących danych zgromadzonych w bazie. Polecenie może zostać zdefiniowane albo jako zapytanie SQL, które ma zostać wykonane, albo jako nazwa procedury przechowywanej zapisanej w bazie. Komunikacja z bazą danych odbywa się za pośrednictwem obiektu Connection,
DataReader (SqlDataReader, OleDbDataReader, OdbcDataReader, OracleDataReader) — służy do odczytu danych zwróconych w wyniku wykonania zapytania zapisanego w obiekcie Command. Dane przesyłane są porcjami — po jednym wierszu,
DataAdapter (SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter, OracleDataAdapter) — pośredniczy w komunikacji pomiędzy obiektem DataSet a bazą danych. Łączenie z bazą następuje tylko wtedy gdy pobieramy dane, lub gdy je synchronizujemy.
DataSet - Reprezentuje zbiór pobrany z bazy danych. W tym kontenerze znajdują się tabale z danymi wyciągnietymi z bazy. Jeśli chcemy cos zmieniać to wszystkie operacje wykonujemy właśnei na tym obiekcie, a nastepnie synchronizujemy dane z bazą za pomocą klasy DataAdapter
Tryb połączeniowy:
Wszelkie polecenia wykonuje się bezpośrednio na źródle danych. Połączenie musi cały czas być aktywne. W tym trybie korzystamy głównie z klas Command oraz DataReader.
Tryb bezpołączeniowy:
Idea jest bardzo prosta: połącz się z bazą, pobierz odpowiedni zbiór danych i zapisz go do pamięci operacyjnej. Rozłącz się z bazą i wykonuj wszystkie operacje na wcześniej pobranych danych. Następnie połącz się znów z bazą i dokonaj synchronizacji danych. Do obsługi pamięci stosuje się klasę DataSet, a do łączenia się i synchronizacji stosuje się klasy DataAdapter. Trzeba dodać, że klasa DataSet jest niezależna od providera.