[Bazy danych] Relacje, schematy, operacje algebraiczne

Chimera-1996
Użytkownik
Użytkownik
Posty: 107
Rejestracja: 9 gru 2015, o 17:06
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 2 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Chimera-1996 »

Potrzebuję pomocy w zadaniach z informatyki. Nie mam pojęcia jak się za nie zabrać. Te zadania trzeba rozwiązać ręcznie, nie na komputerze. Będę bardzo wdzięczna za pomoc.

Dane są relacji oraz ich schematy:
Studenci(Indeks, Nazwisko, Imię, Data_ur)
Pracownicy (Nr, Nazwisko, Imię, Data_ur)
Przedmioty (NrPrzedm, Nazwa)
Zaliczenia(Indeks, NrPrzedm, Ocena).
a) Poniższe operacje zapisz za pomocą operacji selekcji, projekcji oraz iloczynu
kartezjańskiego:
· Studenci ⋈ Zaliczenia;
· Studenci ⋈ Data_ur < Data_ur Pracownicy;
b) Za pomocą algebry relacji zrealizuj następujące zadania:
· utworzyć relacje zawierającą: nazwisko i imię wszystkich studentów;
· utworzyć relacje zawierającą: nazwisko i imię wszystkich pracowników urodzonych po
#1956-01-01#;
· utworzyć relacje zawierającą: nazwisko i imię wszystkich studentów w wieku 20 lat;
· utworzyć relacje zawierającą: nazwisko i imię wszystkich studentów i pracowników;
· utworzyć relacje zawierającą: nazwisko i imię wszystkich pracowników, którzy
studiują (przyjąć, że student i pracownik o tym samym nazwisku oraz imieniu to jedna
i ta sama osoba);
Ostatnio zmieniony 22 kwie 2017, o 13:42 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Gouranga
Użytkownik
Użytkownik
Posty: 1592
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Gouranga »

Ale co konkretnie masz zrobić? Zapisać zapytania SQL czy coś rysować czy co? Bo generalnie takie bzdury jak robienie baz danych na kartce do niczego ci się w życiu nie przydadzą, to się robi na kompie na żywych danych.
Chimera-1996
Użytkownik
Użytkownik
Posty: 107
Rejestracja: 9 gru 2015, o 17:06
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 2 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Chimera-1996 »

To zadanie muszę po prostu rozwiązać, nie rysować, na kartce napisać rozwiązania (nie na komputerze). Tylko nie mam pojęcie jak się za to zabrać, więc prosiłabym o pomoc.
Gouranga
Użytkownik
Użytkownik
Posty: 1592
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Gouranga »

ok to zacznijmy od pierwszego, zaliczenia i studenci, ponieważ student może mieć kilka zaliczeń, ale jedno zaliczenie należy do jednego studenta (+ nie każdy student musi zaliczyć) to łatwiej będzie wylistować zaliczenia i z nich wyciągnąć dane studentów
samo wyciągnięcie zaliczeń jest proste:

Kod: Zaznacz cały

SELECT * FROM zaliczenia;
będziemy musieli do tego dociągnąć kilka danych z tabeli o studentach i tu uwaga, ponieważ w obu tabelach jest kolumna indeks, to musimy jawnie wskazywać, o którą chodzi, dlatego będziemy podawać formę "tabela.kolumna":

Kod: Zaznacz cały

SELECT zaliczenia.*, studenci.* FROM zaliczenia INNER JOIN studenci ON zaliczenia.indeks = studenci.indeks;
zauważ też, że dajemy select z obu tabel ale FROM tylko z zaliczeń, bo kluczowa dla nas jest lista zaliczeń, studentów dołączamy
INNER JOIN można napisać jako samo JOIN i też zadziała, ale lepszą praktyką jest ten INNER wpisać, istnieje też LEFT JOIN i on w zasadzie też by tu zadziałał, ale różnica jest taka, że INNER wypisze tylko te, gdzie dla zaliczenia znaleziono studenta, tu wiadomo, że każde zaliczenie ma studenta, ale np. w bazie mieszkań i właścicieli może być mieszkanie, które nie ma właściciela, i wówczas LEFT pokaże też te niczyje, INNER nie, taka dygresja

tyle tylko, że to dalej za mało, bo musimy dodać jeszcze dane przedmiotu, więc robimy tak:

Kod: Zaznacz cały

SELECT zaliczenia.*, studenci.*, przedmioty.* FROM zaliczenia INNER JOIN studenci ON zaliczenia.indeks = studenci.indeks INNER JOIN przedmioty ON zaliczenia.nrprzedm = przedmioty.nrprzedm;
spróbujesz następne analogicznie?
Chimera-1996
Użytkownik
Użytkownik
Posty: 107
Rejestracja: 9 gru 2015, o 17:06
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 2 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Chimera-1996 »

Dzięki, ale nie ma innego sposobu rozwiązywania tego typu zadań? Bo to jest tak rozwiązane bardziej komputerowo, a tu chyba nie o to chodzi. U mnie na zajęciach nie było mowy o czymś takim jak select, inner join itd. dlatego wydaje mi się, że to powinno być jakos inaczej rozwiązane.
Niestety nie mam jak pokazać przykładowego rozwiązywania, bo nie posiadam takiego.
Gouranga
Użytkownik
Użytkownik
Posty: 1592
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Gouranga »

Jak chcecie rysować na kartkach to narysujcie sobie domek, pieska i samochód z dwóch kółek i prostokąta, ten sam poziom naukowy będzie... Ja ci to mogę pokazać tak, jak się to robi normalnie w warunkach, w których ma to jakiś sens, jeśli nie chodzi o zapytania SQL, to nic innego nie ma sensu.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Afish »

Musisz to zrobić zgodnie z algebrą, definicje operacji masz chociażby tutaj ... d&part=Ch2
ponadto w Complete Book autorstwa Ullmana jest rozległy rozdział o algebrze relacji.
Gouranga pisze:Ja ci to mogę pokazać tak, jak się to robi normalnie w warunkach, w których ma to jakiś sens, jeśli nie chodzi o zapytania SQL, to nic innego nie ma sensu.
To tak, jakby powiedzieć, że całkować można tylko numerycznie, bo całkowanie symboliczne nie ma sensu. SQL to jedynie język służący do fizycznej realizacji operacji definiowanych w algebrze relacji czy logice datalog, gdyby go nie było, to teoria baz danych ciągle miałaby się dobrze.
Chimera-1996
Użytkownik
Użytkownik
Posty: 107
Rejestracja: 9 gru 2015, o 17:06
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 2 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Chimera-1996 »

A mógłbyś mi chociaż rozwiązać parę przykładów z zadania powyżej, żebym zobaczyła jak do tego podejść, jak to rozwiązywać? Bo nie mam pojęcia.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Afish »

No dobra, to zacznijmy od \(\displaystyle{ \text{Studenci} \Join \text{Zaliczenia}}\).

Mamy dwie relacje, chcemy policzyć ich złączenie naturalne, które działa następująco: bierzemy iloczyn kartezjański relacji, zostawiamy tylko te krotki, w których kolumny o pasujących nazwach są równe, pozbywamy się zduplikowanych nazw kolumn.

Mamy następujące operacje w algebrze: przemianowanie, selekcja, projekcja. Ta pierwsza operacja bierze relację i zmienia nazwy kolumn. Druga operacja odfiltrowuje krotki na podstawie warunku. Trzecia operacja bierze relację i dodaje/usuwa/modyfikuje kolumny.

W naszym przykładzie chcemy najpierw pozmieniać nazwy części kolumn (aby uniknąć duplikatów), potem złączyć zbiory iloczynem kartezjańskim, potem odfiltrować niepasujące krotki, a potem usunąć zduplikowane kolumny.

Krok 1: zmiana nazw kolumn
Mamy takie relacje:
\(\displaystyle{ S = \text{Studenci}( \text{Indeks, Nazwisko, Imie, Data\_ur} ) \\
Z=\text{Zaliczenia}(\text{Indeks, NrPrzedm, Ocena})}\)

Chcemy w relacji Zaliczenia zmienić nazwę kolumny, aby móc potem wykonywać selekcję. Otrzymujemy:
\(\displaystyle{ Z' = \rho_{Zaliczenie\_Indeks / Indeks}(Z)}\)
Czyli zmieniamy nazwę Indeks na Zaliczenie_Indeks, w efekcie nasza relacja ma kolumny (Zaliczenie_Indeks, NrPrzedm, Ocena).
Zważ, że notacji jest sporo, niektórzy zapisują z ukośnikiem (wikipedia), inni ze strzałką, więc upewnij się, jaką masz notację na zajęciach.

Krok 2: liczymy iloczyn relacji
Wyliczamy \(\displaystyle{ X = S \times Z'}\), w efekcie otrzymujemy relację z kolumnami (Indeks, Nazwisko, Imie, Data_ur, Zaliczenie_Indeks, NrPrzedm, Ocena).

Krok 3: selekcja
Teraz wykonujemy warunek złączenia naturalnego. W naszym przypadku mieliśmy tylko jedną kolumnę o wspólnej nazwie (Indeks), a skoro już zmieniliśmy nazwę i nie mamy niejednoznaczności, możemy wykonać selekcję:
\(\displaystyle{ F = \sigma_{\text{Indeks} = \text{Zaliczenie \_ Indeks} } (X)}\)
Gdybyśmy nie zrobili kroku pierwszego, to mielibyśmy niejednoznaczność w nazwie Indeks.

Krok 4: pozbycie się nadmiarowej kolumny
Złączenie naturalne zostawia tylko jedną kolumnę z każdej pary kolumn o tej samej nazwie, więc musimy pozbyć się kolumny Zaliczenie_Indeks:
\(\displaystyle{ R = \pi_{ \text{ Indeks, Nazwisko, Imie, Data\_ur, NrPrzedm, Ocena } }(F)}\)

Teraz składamy do kupy i zapisujemy w jednej linijce:
\(\displaystyle{ R = \pi_{ \text{ Indeks, Nazwisko, Imie, Data\_ur, NrPrzedm, Ocena } }(\sigma_{\text{Indeks} = \text{Zaliczenie \_ Indeks} } (S \times \rho_{Zaliczenie\_Indeks / Indeks}(Z)))}\)

I gotowe.

Zadanie a2 idzie bardzo podobnie, tylko masz dwie kolumny pasujące do złączenia naturalnego (Nazwisko i Imię), ponadto musisz dołożyć drugą selekcję (na datę urodzenia).

b1 idzie prosto z projekcji, b2 tak samo + selekcja, b3 analogicznie do b2, b4 to zwykły iloczyn kartezjański i projekcja, b5 to złączenie naturalne.

Zerknij też na wiki:

Kod: Zaznacz cały

https://en.wikipedia.org/wiki/Relational_algebra
, jest tam kilka przykładów rozpisanych.
Chimera-1996
Użytkownik
Użytkownik
Posty: 107
Rejestracja: 9 gru 2015, o 17:06
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 2 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Chimera-1996 »

1. A co oznacza \(\displaystyle{ \rho_}\) w tym zapisie? :

\(\displaystyle{ Z' = \rho_{Zaliczenie\_Indeks / Indeks}(Z)}\)

2. Czy muszę narysować tabelę do tego?:

\(\displaystyle{ X = S \times Z'}\)

3. Dlaczego otrzymujemy taką relację z kolumnami (Indeks, Nazwisko, Imie, Data_ur, Zaliczenie_Indeks, NrPrzedm, Ocena) skoro w Z' nie występuje ani NrPrzedm ani Ocena, a jedynie Zaliczenie_Indeks?

4. Tak po prostu możemy się pozbyć nadmiarowej kolumny? Dlaczego akurat pozbywamy się kolumny Zaliczenie_Indeks i na jakiej zasadzie się usuwa nadmiarowe kolumny?

Nadal nie rozumiem tego zadania... :/
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Afish »

1. Jakbyś przeczytała podane przeze mnie strony, to byś wiedziała, zresztą nawet w poprzedniej wiadomości wymieniłem wszystkie operacje.
2. Ja nie wymagam, to pytanie do autora zadania.
3. Przemianowanie zmienia tylko nazwę kolumn, nie dodaje, ani nie usuwa, więc \(\displaystyle{ Z'}\) ma trzy kolumny.
4. Zgodnie z definicją złączenia naturalnego pozbywamy się zduplikowanych kolumn.
Chimera-1996
Użytkownik
Użytkownik
Posty: 107
Rejestracja: 9 gru 2015, o 17:06
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 2 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Chimera-1996 »

Zaczęłam robić a2, ale nie wiem jak dalej.

\(\displaystyle{ S = \text{Studenci}( \text{Indeks, Nazwisko, Imie, Data\_ur} ) \\}\)
\(\displaystyle{ P=\text{Pracownicy}(\text{Nr, Nazwisko, Imię, Data\_ur})}\)

\(\displaystyle{ P' = \rho_{Pracownik\_Nazwisko / Nazwisko}(P)}\)
\(\displaystyle{ P'' = \rho_{Pracownik\_Imie / Imie}(P)}\)

I teraz mam policzyc dwa iloczyny relacji?

\(\displaystyle{ X = S \times P'}\)
\(\displaystyle{ X = S \times P''}\)

I potem jak to zrobić wszystko dalej?
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Afish »

Dalej nie wiesz, co to jest złączenie naturalne. Co jest w definicji niejasne?
Chimera-1996
Użytkownik
Użytkownik
Posty: 107
Rejestracja: 9 gru 2015, o 17:06
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 2 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Chimera-1996 »

Złączenie naturalne:
Afish pisze:bierzemy iloczyn kartezjański relacji, zostawiamy tylko te krotki, w których kolumny o pasujących nazwach są równe, pozbywamy się zduplikowanych nazw kolumn.
Dalej mam problem. Mógłbyś mi pomóc w tym przykładzie, bo nie wiem co robię źle?
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Bazy danych] Relacje, schematy, operacje algebraiczne

Post autor: Afish »

Nie pomogę Ci, dopóki nie będę wiedział, czego nie rozumiesz (poza ogólnikowym stwierdzeniem, że nie rozumiesz złączenia naturalnego), a cytowanie mnie nie jest odpowiedzią na moje pytanie. Dlaczego zdefiniowałaś relacje \(\displaystyle{ P'}\) i \(\displaystyle{ P''}\)?
ODPOWIEDZ