Pytanie 18. Zapisać tablicę prawdy dla funkcji XOR, AND, OR.
Tablica prawdy - jest to (najczęściej) tabela, która ukazuje jak przy danych stanach logicznych ustawionych na wejściach bramki będzie ustawione wyjście bramki.
Stan logiczny - w bramkach logicznych można spotkać się z dwoma możliwymi stanami: jedynką logiczną "1" lub zerem logicznym "0".
A,B - Wejście
Y- Wyjście
OR „lub”
Jest to tzw. bramka sumy logicznej. W przypadku tej bramki wystarczy aby choć na jednym z jej wejść pojawił się stan "1" i wtedy na wyjściu również pojawi się jedynka logiczna "1".
A |
B |
Y |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
AND „i”
Bramka ta realizuje tzw. iloczyn logiczny. Na wyjściu stan "1" występuje tylko i wyłącznie wtedy gdy na wszystkich wejściach bramki ustawiony jest również stan logiczny "1". Bramka ta posiada co najmniej dwa wejścia - może jednak posiadać ich więcej - teoretycznie nieskończenie wiele. W praktyce spotyka się bramki posiadające do 8 wejść. Natomiast wyjście wszystkie bramki mają tylko jedno.
A |
B |
Y |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
XOR „Wyłącznie lub”
Alternatywa wykluczająca (alternatywa rozłączna, różnica symetryczna, suma modulo 2, kontrawalencja, XOR, exclusive or, EOR) to logiczny funktor zdaniotwórczy (dwuargumentowa funkcja boolowska) . Różnica symetryczna zdań
jest prawdziwa wtedy i tylko wtedy, gdy dokładnie jedno ze zdań p,q jest prawdziwe:
A |
B |
Y |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
Pytanie 17. Omówić możliwe problemy z integralnością w bazie danych.
Integralność
Przez integralność bazy danych rozumiana jest jej zgodność ze stanem fragmentu rzeczywistości, jaki reprezentuje.
Oznacza to, ze dane przechowywane w bazie danych są prawdziwe lub, inaczej mówiąc, w bazie nie
są przechowywane dane fałszywe.
W relacyjnym modelu danych integralność jest utrzymywana przy pomocy tak zwanych wewnętrznych reguł integralności: integralności encji i integralności referencyjnej.
Reguły te nie wystarczają jednak do zapewnienia integralności w każdym przypadku. Często atrybuty różnych lub tych samych relacji mogą pozostawać we wzajemnej zależności niemożliwej do zdefiniowania przy pomocy mechanizmu kluczy. Dlatego wprowadzono pojecie dodatkowych więzów integralności, pozwalających zachować integralność dziedziny, nazywana także niekiedy integralnością semantyczna.
Integralność encji
Jest to reguła mówiąca o tym, ze każda tabela w bazie danych musi mieć klucz główny.
Integralność encji zapewniana jest na etapie definiowania schematu bazy danych poprzez wymóg określenia atrybutu będącego kluczem głównym. Prawidłowo działający system zarządzania bazy danych nie dopuści do złamania tej reguły poprzez powtórzenie wartości atrybutu wybranego na klucz główny relacji.
Integralność referencyjna
Jest to reguła, która określa stany, w jakich może znajdować sie wartość klucza obcego. Dopuszczalne są tylko dwa takie stany: wartość klucza obcego przybiera wartość klucza głównego lub wartość null. Drugi przypadek oznacza, ze związek pomiędzy niektórymi z obiektów reprezentowanych w dwóch powiązanych kluczami relacjach jest nieznany lub takiego związku nie ma. Jest to jednak rzadki przypadek i zazwyczaj konieczne jest raczej zapewnienie, ze taki stan klucza obcego nie wystąpi. Podobnie jak w przypadku integralności encji możliwe jest określenie na etapie definiowania schematu bazy danych, ze dany klucz obcy nie może przybierać
wartości null. Zachowanie integralności referencyjnej wymaga szczególnej uwagi podczas usuwania i aktualizacji poszczególnych pól. Dla każdego związku pomiędzy relacjami w bazie danych konieczne jest zdefiniowanie sposobu postępowania w takim przypadku.
Jeśli z bazy danych biblioteki usuwany jest autor lub zmianie ulega wartość klucza głównego relacji przechowującej informacje o autorach, co dzieje sie z napisanymi przez niego książkami?
Istnieją trzy możliwości, wybór najwłaściwszej w danym przypadku należy rozważyć projektując
bazę danych (model relacyjny nie narzuca żadnej z tych metod postępowania):
Zmiany ograniczone (ang. restricted)
Nie jest możliwe usuniecie komórki zawierającej wartość klucza głównego ani zmiana tej wartości jeżeli odwołuje sie do niej jakikolwiek klucz obcy.
W podanym przykładzie w celu usunięcia z bazy danych autora należy najpierw usunąć z niej jego książki.
Zmiany kaskadowe (ang. cascades)
Usuniecie tabelki z autorem powoduje usuniecie wszystkich innych w bazie danych odwołujących sie do niej poprzez wartość klucza obcego.
Podobnie zmiana wartości klucza głównego powoduje kaskadowa zmianę wartości
wszystkich odwołujących sie do niej kluczy obcych.
W tym przypadku w przykładowej bazie danych podczas usuwania danych autora usunięte zostałyby wszystkie książki jego książki. Należałoby jeszcze sprawdzić, czy książka nie miała kilku autorów, taka pozycja nie może być usunięta. Jeżeli do klucza głównego relacji przechowującej informacje o książkach odwołują sie klucze obce innych relacji, pola o wartościach klucza obcego odpowiadających wartości klucza głównego usuwanego pola i również zostaną usunięte.
Zmiany powodują ustawienie wartości klucza obcego na null (ang. nullifies)
Usuniecie lub zmiana wartości klucza głównego powoduje ustawienie wartości wszystkich kluczy obcych odnoszących sie do usuniętej wartości klucza głównego na null.
Przyjecie tej metody powoduje, ze usuniecie autora spowoduje pozostawienie informacji o jego książkach w bazie danych, jednak wartość klucza obcego odnoszącego sie do klucza głównego w relacji autorów wynosić będzie null.
Integralność semantyczna
Istnieją związki pomiędzy obiektami wymagające zdefiniowania dodatkowych reguł integralności, nazywanych także integralnością dziedziny.
Rozważmy bazę danych służąca przychodni przechowywaniu danych o pacjentach.
Przykładem związku, którego nie można odzwierciedlić w bazie danych posługując sie integralnością
referencyjna może być zależność pomiędzy grupa krwi rodziców i ich dzieci. Kolejnym przykładem może być niepodważalna reguła, iż data zabiegu czy wizyty któregokolwiek z pacjentów nie może być wcześniejsza od daty jego narodzin. Jest to oczywiste, ale cóż stałoby na przeszkodzie pomyłkowemu wpisaniu pacjentowi daty wizyty z wieku XVIII gdyby do bazy danych przychodni nie zostały wprowadzone zasady określające z jakiego zakresu może pochodzić data wizyty?
Aby zapobiec nieprawidłowym stanom bazy danych wprowadza sie tak zwane ograniczenia (ang. constraints) definiujące dodatkowe więzy pomiędzy obiektami. Ograniczenia musza być brane pod uwagę podczas każdej operacji zmieniającej stan bazy danych.
// Informacje dodatkowe :
Redundancja - nadmiarowość.
Anomalie
• Anomalia istnienia
- istnienie danych jednego obiektu jest uwarunkowane istnieniem danych innego obiektu,
choć same obiekty mogą istnieć niezależnie
• Anomalia wstawiania
- wstawienie danych jednego obiektu wymaga wstawienia danych innego lub użycia w ich
miejsce wartości null, co jednak może powodować problemy z kluczem głownym
• Anomalia usuwania
- usunięcie danych jednego obiektu powoduje zniknięcie danych innego
(ryzyko utraty danych!)
• Anomalia modyfikacji
- modyfikacja danych obiektu wymaga rownoczesnej zmiany wartości w wielu krotkach
(ryzyko utraty spojności danych!)
Normalizacja - zajmuje się klasyfikacją struktury bazy danych - jest to proces uściślania i
korygowania bazy danych, polegający na rozdzieleniu wstępnie zaprojektowanych
schematów relacji na mniejsze, gromadzące wybrane atrybuty. Proces ten w swym założeniu
eliminuje możliwość utraty informacji podczas dekompozycji relacji, a jego efektem
końcowym jest reprezentowanie wszystkich zależności funkcyjnych w pojedynczych
relacjach. Kolejnymi etapami normalizacji, jest przekształcanie aktualnej postaci bazy danych
do kolejnych tzw. postaci normalnych (ang. Normal Form)
1. Pierwsza postać normalna (1NF) - każde pole musi być atomowe (niepodzielne)
Zakłada atomiczną postać każdego z atrybutów, a zatem wyeliminowanie atrybutów
wielowartościowych. Normalizacja na tym etapie polega na przekształceniu encji na mniejsze encje, a
tym samym opisanie kilkoma prostymi atrybutami mniejszej encji, aniżeli opis atrybutem złożonym
encji przed normalizacją. (np. „rozbicie” atrybutu adres na atrybuty: ulica, miasto, kod itp.)
2. Druga postać normalna (2NF) - każde pole nie będące kluczem musi zależeć od
klucza podstawowego.
Zakłada spełnienie warunków 1NF oraz dodatkowo wymaga aby każdy atrybut niekluczowy był w
pełni funkcyjnie zależny od klucza głównego, a nie innego podzbioru atrybutów. Proces normalizacji na
tym etapie polega na usunięciu wszystkich częściowych zależności funkcyjnych, czyli zależności od
fragmentu klucza głównego, które powodują redundancję oraz występowanie anomalii przy
aktualizacji.
3. Trzecia postać normalna (3NF) - pole nie będące kluczem nie może zależeć od
innego pola nie będącego kluczem.
Zawiera w sobie warunki 2NF, ponadto wymaga aby wszystkie pośrednie zależności (czyli między
atrybutami nie wchodzącymi w skład klucza głównego) zostały usunięte, czyli aby wyeliminować
zależności atrybutów nie będących kluczami głównymi.
Integralność ma zapewnić, by zmiany bazy danych polegały na przechodzeniu przez kolejne poprawne stany dyskretne.
Replikacje - baza danych powinna być zbiorem nie powtarzających się faktów (każdy element danych na temat obiektów i związków między obiektami powinien w bazie występować tylko raz) - brak replikacji ułatwia utrzymanie integralności.
Transakcje powodujące zmianę stanu bazy danych (zmieniające informacje) są zagrożeniem dla integralności bazy danych. Należy dopuszczać do realizacji tylko te transakcje, które nie doprowadzają do zaprzeczenia faktów.
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.
Tryb połączeniowy:
• Połączenie zawsze aktywne
• Dane zawsze aktualne
• Dla aplikacji o krótkich transakcjach i kilku równoległych połączeniach
Tryb bezpołączeniowy:
• Brak stałego połączenia z bazą danych
• Dane zapisywane w pamięci głównej
• Możliwy konflikt danych pomiędzy bazą danych a danymi lokalnymi
• Dla aplikacji o wielu równoległych i długo trwałych połączeniach
Tryb połączeniowy :
Pomiędzy obiektem DataReader a źródłem danych jest utrzymywane aktywne połączenie. Każde wywołanie metody Read()zwraca wiersz danych ze źródła.
Cechą charakterystyczną tego modelu jest fakt, że wczytuje on dane ze zbioru utworzonego za pomocą polecenia SQL'owego po jednym rekordzie, sekwencyjnie i tylko w trybie do odczytu.
Niemożliwa jest bezpośrednia aktualizacja danych lub ich dodawanie. Relacje pomiędzy klasami DataReader, Command, Connection przedstawione są poniżej :
Connection :.
Open - otwiera połączenie z baza
Close - zamyka połączenie
Dispose - zwalnia zasoby przydzielone dla obiektu połączenia.
Dispose() automatycznie wywołuje metodę Close().
State - zwraca status połączenia Przykład: if (polaczenie state == ConnectionState.Open)
Command
ExecuteReader - // wykonuje zapytanie
ExecuteNonQuery - //wykonuje składowane procedury
ExecuteXmlReader - // wykonuje polecenie SQL (zwracany wynik:obiekt XmlReader)
Prepare - // pozwala na umieszczenie wyniku polecenia SQL w pamięci podręcznej
Dispose - // zwalnia zasoby obiektu, automatycznie wywołuje metodę Close()
DataReader
Read - // przesuwa wskaźnik rekordu na pierwszy wiersz
HasRows - // sprawdza, czy obiekt zawiera jakieś wiersze Przykład: if (DataReader.HasRows)
IsClosed - //sprawdza, czy obiekt jest zamknięty Przykład: if (DataReader.IsClosed == false)
NextResult - //przejście do kolejnego wyniku
Close - //zamyka obiekt
SingleResult - //zwraca skalar
SingleRow - //zwraca jeden wiersz
SequentialAccess -// pozwala na dostęp do danych zwróconych przez polecenie SQL
CloseConnection - //zamyka połączenie
// Przykład dodatkowy :
Przykład :
<html>
<head>
<title>Wybierz klientow</title>
</head>
<body>
<script runat="localhost" language="C#">
void Page_Load (Object Source, EventArgs E) {
SqlConnection objPolaczenie = new SqlConnection // connection
("server=(local);uid=sa;pwd=;database=Sklep;");
objPolaczenie.Open();
SqlCommand objPolecenie = new SqlCommand("SELECT * FROM // command
Klient ORDER BY nazwisko DESC", objPolaczenie);
objPolecenie.Prepare();
SqlDataReader objDane =
objPolecenie.ExecuteReader(CommandBehavior.CloseConnection);
while (objDane.Read() == true) // dataReader
{
Response.Write (objDane[2].ToString() + "<BR>");
}
objDane.Close();
objDane = null;
objPolecenie.Dispose();
objPolecenie = null;
objPolaczenie.Close();
objPolaczenie= null;
}
</script>
</body>
</html>
Tryb bezpołączeniowy :
Polecenie SQL ładuje dane z zewnętrznego źródła do pamięci podręcznej na maszynie klienta.
Program manipuluje zbiorem wynikowym na maszynie lokalnej, a aktualizacje przekazuje z danych w buforze do źródła danych. W modelu tym połączenie jest otwierane tylko na czas wczytania
danych ze źródła i dokonania aktualizacji. W ten sposób zostają zwolnione zasoby serwera.
Kluczowe składniki modelu bezpołączeniowego to DataAdapter i DataSet.
Obiekt DataAdapter pośredniczy w wymianie danych pomiędzy źródłem a buforami klienta.
Obiekt DataSet funkcjonuje w pamięci klienta jako relacyjna baza danych i zawiera co najmniej jeden obiekt DataTable.
Obiekt DataTable zawiera wiersze i kolumny danych, które pochodzą z tabel w źródłowej bazie danych.
Klasa DataAdapter udostępnia takie ważne metody jak Fill() i Update().
Metoda Fill()przekazuje zapytanie do bazy danych i zapisuje zwrócony zbiór w wybranym obiekcie DataTable. Metoda Update()służy do wykonywania operacji wstawiania, aktualizacji i usuwania danych wg zmian dokonanych w obiekcie DataSet.