3
1
dydaktyka/chris/MIN_2017/Zajecia_5.md

192 lines
6.6 KiB
Markdown
Raw Normal View History

2021-10-04 16:58:37 +02:00
## Nieprecyzyjne zapytania do bazy danych {#nieprecyzyjne_zapytania_do_bazy_danych}
### Podstawa teoretyczna {#podstawa_teoretyczna}
#### Pojęcie zmiennej lingwistycznej {#pojęcie_zmiennej_lingwistycznej}
*Zmienna lingwistyczna* - zmienna przyjmujaca wartości lingwistyczne,
opisana czwórką:
(nazwa, uniwersum, termy, interpretacje termów)
gdzie:
- nazwa - nazwa zmiennej lingwistycznej, np. temperatura (wody)
- uniwersum - zbiór dopuszczalnych wartości zmiennej lingwistycznej,
np: od 0 do 100
- termy (zbiór wartości) - wartości lingwistyczne przyjmowane przez
zmienną, np. okolo 30, zimna, gorąca
- interpretacje - zbiory rozmyte definiujące termy
### Zadanie 1: {#zadanie_1}
Zamodeluj zmienne lingwistyczne:
- prędkość samochodu
- czas oczekiwania w restauracji
- liczba znajomych na fejsbuku
### Zadanie 2: {#zadanie_2}
Dana jest następująca baza danych zawierająca informacje o filmach
[filmy_create_insert.sql](attachment:chris/MIN_2016/Zajecia_5/filmy_create_insert.sql "wikilink")\]:
\|\|id\|\|tytul\|\|rezyser\|\|kraj\|\|rok_produkcji\|\|budzet\|\|czas\|\|gatunek\|\|
\|\|1\|\|Odlot\|\|Peter Docter, Bob
Peterson\|\|USA\|\|2009\|\|175000000\|\|96\|\|animacja\|\|
\|\|2\|\|Bękarty wojny\|\|Quentin
Tarantino\|\|USA/Niemcy\|\|2009\|\|70000000\|\|153\|\|akcja\|\|
\|\|3\|\|Gdzie Jest Nemo?\|\|Andrew Stanton , Lee
Unkrich\|\|USA\|\|2003\|\|94000000\|\|100\|\|animacja\|\|
\|\|4\|\|Prosta historia\|\|David
Lynch\|\|USA\|\|1999\|\|10000000\|\|112\|\|obyczajowy\|\| \|\|5\|\|Życie
jest piękne\|\|Roberto
Benigni\|\|Włochy\|\|1997\|\|57000000\|\|116\|\|dramat, komedia\|\|
\|\|6\|\|Kill Bill\|\|Quentin
Tarantino\|\|USA\|\|2003\|\|41000000\|\|111\|\|akcja\|\|
\|\|7\|\|Chłopaki nie płaczą\|\|Olaf
Lubaszenko\|\|Polska\|\|2000\|\|NULL\|\|100\|\|komedia sensacyjna\|\|
Zaproponuj koncepcję rozwiązania, które umożliwi wyszukiwanie filmu w
tej bazie według kryteriów nieprecyzyjnych.
Przeanalizuj m.in. następujące problemy:
- jak mogą wyglądać przykładowe zapytania nieprecyzyjne?
([odpowiedz](ania/TZN330/Zaj2BD/odp1 "wikilink"))
- czego może dotyczyć nieprecyzyjność?
([odpowiedz](ania/TZN330/Zaj2BD/odp2 "wikilink"))
- jak zamodelować nieprecyzyjność?
([odpowiedz](ania/TZN330/Zaj2BD/odp3 "wikilink"))
- jak wyznaczyć i zaprezentować odpowiedź na zapytanie nieprecyzyjne?
([odpowiedz](ania/TZN330/Zaj2BD/odp4 "wikilink"))
### Zadanie 3: {#zadanie_3}
Opracuj dokładną koncepcję realizacji zapytań typu:
1. Podaj tytuły filmów *niskobudżetowych*.
`2. Podaj informacje o filmach `*`nowych`*`.`
Zaimplementuj rozwiązanie w postaci funkcji SQL.
(szkielet rozwiązania:
[rozmyte_zapytania_2.sql](attachment:chris/MIN_2016/Zajecia_5/rozmyte_zapytania_2.sql "wikilink"))
Odpowiedź bazy danych powinna być podobna do poniższych:
1. Podaj tytuły filmów *niskobudżetowych*:
\|\|id\|\|tytul\|\|rezyser\|\|kraj\|\|rok_produkcji\|\|budzet
(mln)\|\|czas\|\|gatunek\|\|stopien_spelnienia\|\| \|\|4\|\|Prosta
historia\|\|David
Lynch\|\|USA\|\|1999\|\|10\|\|112\|\|obyczajowy\|\|0.8\|\| \|\|6\|\|Kill
Bill\|\|Quentin
Tarantino\|\|USA\|\|2003\|\|41\|\|111\|\|akcja\|\|0.18\|\|
`2. Podaj informacje o filmach `*`nowych`*`:`
\|\|id\|\|tytul\|\|rezyser\|\|kraj\|\|rok_produkcji\|\|budzet
(mln)\|\|czas\|\|gatunek\|\|stopien_spelnienia\|\|
\|\|1\|\|Odlot\|\|Peter Docter, Bob
Peterson\|\|USA\|\|2009\|\|175\|\|96\|\|animacja\|\|0.9\|\|
\|\|2\|\|Bękarty wojny\|\|Quentin
Tarantino\|\|USA/Niemcy\|\|2009\|\|70\|\|153\|\|akcja\|\|0.9\|\|
\|\|3\|\|Gdzie Jest Nemo?\|\|Andrew Stanton , Lee
Unkrich\|\|USA\|\|2003\|\|94\|\|100\|\|animacja\|\|0.3\|\| \|\|6\|\|Kill
Bill\|\|Quentin
Tarantino\|\|USA\|\|2003\|\|41\|\|111\|\|akcja\|\|0.3\|\|
#### Wskazówki
1. Na potrzeby zamodelowania zbioru rozmytego należy wykorzystać wzór
na prostą przechodzącą przez dwa punkty (xa, ya) i (xb, yb):
```{=html}
<!-- -->
```
y - ya = (yb - ya)/(xb-xa) * (x-xa)
1. Procedura dodaj_term(\@nazwa_zmiennej varchar(100), \@term
varchar(100), \@a int, \@b int, \@c int)
`Tworzy zmienną i dodaje do niej termy: Dodaje term - @term do zmiennej lingwistycznej - @nazwa_zmiennej`
`Kodowanie zbioru rozmytego realizującego term:`
- - jeżeli a=b to jest to funkcja typu z
- jeżeli b=c to jest to funkcja typu s
- w p.p. jest to funkcja trójkątna unimodalna
`Przykład: `\
exec dodaj_term 'budzet', 'niski', 0,0, 50000000
exec dodaj_term 'budzet', 'sredni', 0, 50000000, 100000000
exec dodaj_term 'budzet', 'wysoki', 50000000, 100000000, 100000000
1. Należy zaimplementować funkcję dbo.fuzzy(\@x real, \@nazwa
varchar(100),\@term varchar(100))
`która będzie korzystać z definicji zmiennych lingwistycznych z tabeli zmienne_lingwistyczne (wypełnionej przy użyciu procedury dodaj_term). Ma ona zwracać wartość funkcji przynależności (@membership) dla zadanego x.`
`W podanym szkielecie zwraca 1 dla x<b oraz 0 w p.p.`
1. Do realizacji warunków w SQL służy dyrektywa case. Poniżej podano
przykład jej użycia:
```{=html}
<!-- -->
```
select @zmienna = case
when pole_a=pole_b AND pole_b<>pole_c then
case
when @zmianna_x < pole_b then 1.0
when @zmianna_x > pole_b then 1.0
else 0.0
end
when pole_aa<>pole_b then
case
when @zmianna_x < a then 0.0
when @zmianna_x < b then (1.0/pole_b)
end
end
from tabela
`gdzie "pole_a", "pole_b", "pole_c" za polami z rekordu tabeli "tabela" pobranymi przez to zapytanie, "zmianna_x" oraz "zmienna"  wcześniej zdefiniowanymi zmiennymi, a wartość "zmienna" zostanie zwrócone jako wynik zapytania dla każdego rekordu.`
**`Należy`` ``zwrócić`` ``uwagę`` ``na`` ``sposób`` ``zapisu`` ``wartości`` ``po`` ``słowie`` ``"then"`**
### Zadanie 4: {#zadanie_4}
Zaimplementuj rozmyty operator \"około\".
Wykorzystaj go do odpowiedzi na zapytania:
1. Znajdź filmy trwające *około* 100 min
`2. Znajdź filmy powstałe `*`około`*` 2000 roku`
(szkielet rozwiązania:
[rozmyte_zapytania_1.sql](attachment:chris/MIN_2016/Zajecia_5/rozmyte_zapytania_1.sql "wikilink"))
### Zadanie 5: {#zadanie_5}
Korzystając z wyniku zadania 3 wyznacz stopień spełnienia nastepujących
warunków:
1. film jest niskobudżetowy i nowy
`2. film jest niskobudżetowy lub nowy`\
`3. film jest nowy ale nie jest niskobudżetowy`\
`4. film nie jest nowy`
### Zadanie 6: {#zadanie_6}
Zaproponuj i zrealizuj mechanizm umożliwiający nieprecyzyjne
formułowanie zapytań o gatunki filmowe