[ Pobierz całość w formacie PDF ]
.Jednakże nie wyświetliłaby zamówieńnieprzyporządkowanych do żadnego z klientów.u Prawe sprzężenie zewnętrzne  linia przedstawiająca to sprzężenie również będzie zakończona strzałką z jednejstrony.Ten typ relacji również pozwala jednej ze stron dominować.Dominująca strona relacji wskazuje na stronępodporządkowaną.Kwerenda z Klientami i Zamówieniami, gdzie występowałoby prawe sprzężenie zewnętrzne(linia sprzężenia skierowana w stronę tabeli Klienci), wyświetlałaby wszystkie złożone zamówienia, niezależnie odtego, czy były składane przez określonych klientów.Jednakże nie wyświetliłaby klientów, którzy nie składalizamówień.Rozwijane listy w tym oknie dialogowym umożliwiają określenie, których tabel i pól po odpowiedniej stronie sprzężeniema dotyczyć.Jest to nowe rozwiązanie.Wcześniej, lewa i prawa strona relacji były przedmiotem zmian w zależności odsposobu zbudowania kwerendy.W większości przypadków, integralność referencyjna wymusza użycie prawego bądzlewego sprzężenia zewnętrznego.To tak, jakbyś mógł otrzymać klientów, którzy nie składali zamówień, ale nie mógłjednocześnie otrzymywać zamówień, do których nie ma przyporządkowanych klientów.Jeśli uda Ci się otrzymać nie-przyporządkowane rekordy w wyniku zarówno prawego jak i lewego sprzężenia zewnętrznego tej samej relacji, to znaczy,że coś jest nie w porządku z integralnością danych.Rekordy znajdujące się po podporządkowanej stronie relacji i nieposiadające pary po stronie dominującej nazywamy rekordami osieroconymi.Rekordy zagubione są zazwyczaj niewidocz-ne podczas zwykłych operacji dokonywanych na bazie danych, jednakże wywołują statystyczne niezgodności w sytuacji,gdy kwerenda oparta jest na podporządkowanej tabeli, bez użycia tabeli dominującej.Innymi słowy, raporty ozamówieniach poszczególnych produktów mogą nie zgadzać się z raportami o zamówieniach według klientów.Ważne, by nie myliły Ci się pojęcia lewe sprzężenie i prawe sprzężenie.Może się zdarzyć, że w tabeli QBE lewe sprzężeniebędzie wskazywać w prawo, a prawe w lewo.Jest to mylące zwłaszcza wtedy, gdy już kontrolujesz to, co jest po prawej i toco po lewej stronie.Najważniejsze, byś pamiętał, że dominująca strona wyświetla wszystkie rekordy, nawet jeśli nieodpowiadają one żadnym rekordom ze strony podporządkowanej. 60Część I f& Projektowanie bazy danychInna z opcji w tym oknie dialogowym umożliwia tworzenie za jego pomocą kolejnej relacji.Kliknięcie przycisku Nowespowoduje wyświetlenie okna dialogowego, z poziomu którego możesz niespodziewanie ustanowić relację międzyistniejącymi tabelami.Poniższe rysunki przedstawiają różne rezultaty kwerendy opartej na tabelach Klienci i Zamówienia.Rezultaty sprzężeniawewnętrznego znajdują się na rysunku 4.4, a odpowiadające mu wyrażenie SQL na wydruku 4.1.Rysunek 4.4.Dziesięciu klientówz najmniejszą ilościązamówieńw sprzężeniuwewnętrznymWydruk 4.1.Wyrażenie SQL dla kwerendy z rysunku 4.4SELECT TOP 10 Klienci.NazwaFirmy, Count(Zamówienia.IDzamówienia) AS PoliczOfIDzamówieniaFROM Klienci INNER JOIN Zamówienia ON Klienci.IDklienta = Zamówienia.IDklientaGROUP BY Klienci.NazwaFirmyORDER BY Count(Zamówienia.IDzamówienia);Kwerenda ta przedstawia ilość zamówień każdego z klientów i używa sprzężenia wewnętrznego, więc wyświetlane sąjedynie rekordy mające swoje odpowiedniki po obu stronach relacji.Porównaj te wyniki z wynikami na rysunku 4.5 i wydrukiem 4.2.Rysunek 4.5.Dwunastu klientówz najmniejszą ilościązamówieńw sprzężeniuzewnętrznymWydruk 4.2.Wyrażenie SQL dla kwerendy z rysunku 4.5SELECT TOP 10 Klienci.NazwaFirmy, Count(Zamówienia.IDzamówienia) AS PoliczOfIDzamówieniaFROM Klienci LEFT JOIN Zamówienia ON Klienci.IDklienta = Zamówienia.IDklientaGROUP BY Klienci.NazwaFirmyORDER BY Count(Zamówienia.IDzamówienia);Rysunek 4.4 wygląda zwyczajnie; wszystko wydaje się być w porządku, ale rezultaty kwerendy nie są prawdziwe.Sprzężenie wewnętrzne na rysunku 4.5 wskazuje, iż istnieją dwaj klienci, którzy nie składali żadnych zamówień i nie zostaliuwzględnieni w rezultatach kwerendy ze sprzężeniem wewnętrznym.Ponieważ pole wyświetlane po stronie Zamówieniajest sumowane, pokazywany rezultat to zero.Normalnie, brakujący rekord po stronie podporządkowanej byłbyprzedstawiony jako Null.Kwerenda pokazująca rekordy nie posiadające swoich odpowiedników to po prostu sprzężenie zewnętrzne z kryteriumklucza obcego ustawionym na Null.Bez takiego ustawienia kryterium mógłbyś pośród wszystkich rekordów przeoczyćtych kilka pustych pól.Przykład takiej sytuacji przedstawia rysunek 4.6 i wydruk 4.3.Rysunek 4.6.Klienci, którzy nieskładali zamówieńWydruk 4.3.Wyrażenie SQL dla kwerendy z rysunku 4.6SELECT Klienci.NazwaFirmy, Zamówienia.IDzamówienia 61Rozdział 4.f& Zaawansowane kwerendyFROM Klienci LEFT JOIN Zamówienia ON Klienci.IDklienta = Zamówienia.IDklientaWHERE (((Zamówienia.IDzamówienia) Is Null));Kwerenda wyświetla dwa rekordy zamiast dziesięciu lub dwunastu, jak to miało miejsce w przypadku braku ustawieniakryterium Null na kluczu obcym.Podsumowując, nie wystarczy, że właściwe pola w odpowiednich tabelach połączone są relacją.Typ tej relacji musi byćodpowiedni, by zapewnić zgodny z prawdą zestaw rezultatów kwerendy.Dwie kwerendy oparte na tych samychtabelach i polach mogą dawać zupełnie różne rezultaty, jeśli typ relacji między polami jest różny.Wyrażenia SQL kwe-rend na rysunkach 4.4 i 4.5 różnią się tylko jednym słowem (spójrz na rysunki 4.7 i 4.8) [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • necian.htw.pl