3
1
dydaktyka/chris/MIN_2016/Zajecia_5.md

191 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

> Strona automatycznie zmigrowana z systemu Eduwiki z wykorzystaniem Pandoc
## 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
<attachment:filmy_create_insert.sql>:
\|\|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: <attachment:rozmyte_zapytania_2.sql>)
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: <attachment:rozmyte_zapytania_1.sql>)
### 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