Jezyk zapyta dla obiektowego mo Nieznany

background image

Język zapytań dla obiektowego modelu baz danych


Język OQL (Object Query Language)



Podstawowa klauzula:

SELECT

FROM

WHERE

background image


Przykład:

Diagram klas przedstawiający korporację:



background image

Pytanie 1:
Podaj wszystkie firmy, których wszystkie oddziały są zlokalizowane w tym samym miejscu co
zarząd.

SELECT Firma
WHERE EACH Oddziały-Lokalizacja = Lokalizacja



Pytanie 2:
Podaj wszystkie firmy, których co najmniej jeden oddział jest zlokalizowany w tym samym
miejscu co zarząd.

SELECT Firma
WHERE EXISTS Oddziały-Lokalizacja = Lokalizacja


Pytanie 3:
Podaj wszystkie firmy, których oddziały są fabrykami samochodów lub ciężarówek.

SELECT Firma
WHERE EACH Oddziały-Funkcja IS-IN („Fabryka samochodów”, „Fabryka ciężarówek”)

Ścieżka:


Do kojarzenia klas służy ścieżka o postaci:

atrybut1 – atrybut2 – atrybut3 – …


lub

zmienna – atrybut1 – atrybut2 – atrybut3 – …






background image

Zmienna:


1. Zmienna związana przez predykat przynależności

.


Pytanie 4:
Podaj wszystkie firmy mające co najmniej jeden oddział, w którym jest zatrudniony co
najmniej jeden pracownik, którego miejscem zamieszkania jest Rzym i który jest właścicielem
samochodu Ferrari”.

SELECT C
FROM Firma: C, Oddział: D, Pracownik: E
WHERE D IS-IN C-Oddziały AND

E IS-IN D-Personel AND

E-Właściciel_pojazdu-Producent-Nazwa = “Ferari” AND

E-Adres = „Rzym”



Bardziej uproszczona postać:

SELECT C
FROM Firma: C, E IS-IN C-Oddziały-Personel
WHERE E-Właściciel_pojazdu-Producent-Nazwa = “Ferari” AND

E-Adres = „Rzym”



background image

2. Zmienna referencyjna


Pytanie 5:
Podaj wszystkie firmy mające co najmniej jeden oddział, w którym jest zatrudniony co
najmniej jeden pracownik, którego miejscem zamieszkania jest Rzym i który jest właścicielem
niebieskiego samochodu wyprodukowanego przez firmę zlokalizowaną w Mediolanie.

SELECT C
FROM Firma: C, E IS-IN C-Oddziały-Personel, D IS E-Właściciel_pojazdu
WHERE E-Adres = „Rzym” AND

D-Kolor = “niebieski” AND

D-Producent-Lokalizacja = „Mediolan”

background image

3. Zmienna referencyjna może określać zbiór


Pytanie 6:
Podaj wszystkie firmy, w których wszyscy pracownicy jeżdżą samochodami ze zbioru (Fiat,
Ferrari) lub ze zbioru (Ford, Opel, Nissan).

SELECT C
FROM Firma: C, S IS C-Oddziały-Personel-Właściciel_pojazdu
WHERE S-Producent-Nazwa IS-SUBSET (“Fiat”, “Ferrari”) OR

S Producent-Nazwa IS-SUBSET (“Ford”, “Opel”, “Nissan”)

Hierarchia klas:


Użytkownik powinien mieć możliwość decydowania o tym, czy dziedzina zapytania ma być
pojedyncza klasa, czy hierarchia klas zakorzeniona w danej klasie.

Pytanie 7:
Podaj wszystkie firmy, które są zlokalizowane w Rzymie.

SELECT Firma*
WHERE Lokalizacja = „Rzym”


Można wykluczyć z hierarchii klasę (klasy)

background image

Pytanie 8:
Podaj wszystkie firmy oprócz firm produkujących ciężarówek, które są zlokalizowane w
Rzymie.

SELECT Firma* DIFFERENCE Firma Ciężarówek
WHERE Lokalizacja = „Rzym”




Materiał opracowany na podstawie:

Won Kim: Wprowadzenie do obiektowych baz danych. WNT 1996.

background image

Ćwiczenia:

1. Podaj wszystkie firmy, których prezes mieszka w tym samym miejscu co zarząd firmy.

2. Podaj wszystkie firmy, których wszyscy pracownicy mają samochody produkowane

przez ich firmy.

3. Podaj pracowników, którzy mają samochody o kolorze czerwonym

4. Podaj oddziały, których pracownicy mają wiek w przedziale 20-30.








background image

Więzy integralności



Więzy integralności: są to warunki, które mają być spełnione przez dane. Jeśli wszystkie
więzy są spełnione przez dane, wówczas mówimy, że stan bazy danych jest spójny.

W modelu relacyjnym więzy są najczęściej wyrażane za pomocą formuł logicznych.
Natomiast w modelu obiektowym, ze względu na złożoność danych, więzy integralności są
wyrażane za pomocą języka zapytań.

Rodzaje więzów integralnościowych:

1. Więzy dotyczące dziedzin atrybutów

2. Więzy dotyczące obiektów z jednej klasy

3. Więzy dotyczące relacji między klasami

background image



Metody:

- Firma: Liczba_Odziałów(): Int; Osobowość_prawna(): Boolean




background image

Język OCL (Object Constraint Language)

Język OCL (Object Constraint Language) jest językiem specyfikacji do zapisu ograniczeń
w modelu obiektowym. Jest on częścią języka UML - standardu przeznaczonego do
analizy i projektowania obiektowego.

1. Niezmienniki klas

- Dla dowolnej klasy można podać jej niezmiennik (ang. invariant) w

postaci zbioru wyrażeń.

- Każde wyrażenie niezmiennicze jest wyrażeniem boolowskim, tzn.

może być wartościowane jako prawda lub fałsz.

- Dla więcej niż jednego wyrażenia przyjmuje się, że niezmiennik

jest koniunkcją tych wyrażeń.

- Niezmiennik danej klasy oznacza, że wszystkie obiekty tej klasy

spełniają zadany niezmiennik.

- Niezmiennik oznaczamy słowem kluczowym inv.

Przykład:

context

Pracownik inv:

wiek > 17
wiek < 65

Niezmiennik ten oznacza, że dla wszystkich obiektów klasy
Pracownik wartość atrybutu wiek jest większa od 17 i jest mniejsza od
65.

background image

2. Odwołania do atrybutów i metod

W wyrażeniach możemy odwoływać się do wartości atrybutów klasy
oraz do rezultatów działania takich operacji, które nie mają skutków
ubocznych.

context Firma inv:

- self.nazwa <> ' ' and self.lokalizacja <> ' ' ;
- nazwa <> ' ' and lokalizacja <> ‘Wrocław’;
- self.Liczba_Odziałów() >= 10;
- Liczba_Odziałów() >= 10;
- self.Osobowość_prawna();
- Osobowość_prawna() and lokalizacja <> ‘Wrocław’;

Słowo kluczowe self wskazuje na dowolny obiekt zadany przez
kontekst (tutaj obiekt klasy Firma). Można je pomijać, o ile wyrażenie
pozostaje jednoznaczne.

background image

3.

Odwołanie do obiektu powiązanego przez nawigację

Poprzez użycie ścieżek.

context

Firma inv:

self.prezes.nazwisko <> '' ;

self.prezes.wlaściciel_pojazdu.produc
ent.nazwa = self.nazwa ;

background image

4.

Odwołanie do kolekcji obiektów

Powiązanie może odnosić się do wielu obiektów danej klasy, zgodnie z
krotnością zapisaną na końcu powiązania. Odwołania przy użyciu takiego
powiązania dotyczą wówczas kolekcji obiektów. Za pomocą operatora
kolekcyjnego '->' zapisujemy operacje, które wykonujemy na kolekcji obiektów.

context

Firma inv:

self.Oddziały -> size() <= 5

Niezmiennik określa, że liczba elementów kolekcji (tzn. liczba oddziałów) nie
przekracza 5. Size() jest standardową operacją na kolekcji

.

background image

5.

Iteracje po elementach kolekcji

Wybrane operacje kolekcyjne (np. select, forAll, exists) obliczają zadane
wyrażenie dla wszystkich elementów kolekcji. Możliwe są trzy formy składni
tych operacji:

- kolekcja -> operacja (element:Typ | <wyrażenie>)
- kolekcja -> operacja (element | <wyrażenie>)
- kolekcja -> operacja (<wyrażenie>)

Na przykład operacja select sprawdza wszystkie elementy kolekcji i zwraca
kolekcję tych elementów, które spełniają zadane wyrażenie boolowskie.

samochód -> select (a: Pracownik | a.właściciel_pojazdu.kolor
= ‘niebieski’) ;

wiek-pr -> select (a: Pracownik | a.wiek < 50) ;

background image

6. Warunki początkowe i końcowe transakcji

context Klasa::Metoda(): Boolean

pre: warunek przed transakcją
post: warunek po transakcji

Przykład:

context Faktura::Czy_wystawić(x): Boolean

Faktura_K -> select (a: Faktura | a.Klient.Id = x.Klient.Id

AND NOT Płatość(a));

pre: isEmpty(Faktura_K)
post: x.brutto < 50.000

background image

7. Operacje na typach kolekcyjnych

size()

- liczba elementów w kolekcji

count(obiekt)

- liczba wystąpień obiektu

includes(obiekt) - True, jeśli obiekt jest elementem

isEmpty()

- True, jeśli brak elementów

sum()

- suma wszystkich elementów (np. Real lub Integer)

exists(wyrażenie)

- True, jeśli wyrażenie jest spełnione przynajmniej
przez jeden element

forAll(wyrażenie)

- True, jeśli wyrażenie jest spełnione przez wszystkie
elementy

select(wyrażenie) - kolekcja elementów spełniających wyrażenie

union(kolekcja)

- łączy zbiór ze zbiorem lub wielozbiorem, ciąg z
ciągiem

background image

Warunek 1:
Wiek prezesa nie może przekroczyć 50.


Warunek 2:
Samochód prezesa musi być wyprodukowany przez swoją firmę.


Warunek 3:
Prezes powinien mieszkać w tym samym miejscu co siedziba zarządu

Warunek 4:
Liczba pracowników każdego z oddziałów nie może przekroczyć 50.


Wyszukiwarka

Podobne podstrony:
Ochrona odgromowa obiektow budo Nieznany
BIZNESPLAN dla programu promocj Nieznany (11)
1 Identyfikacja obiektow sterow Nieznany (2)
angielski dla sanitariuszy id 6 Nieznany
edukacja dla bezpieczenstwa id Nieznany
Etnografia dla terapeutow demo Nieznany
Programowanie Obiektowe ZadTest Nieznany
materialy dla studentow polisac Nieznany
Materialy dla uczestnikow K id Nieznany
instrukcja bhp dla schronu opl Nieznany
Jezyk C Efektywne programowanie obiektowe cpefpo
przenikanie dla przegrody plask Nieznany
Programowanie obiektowe(cw) 2 i Nieznany

więcej podobnych podstron