Kwerenda : Podać numery dostawców którzy dostarczają
Transkrypt
Kwerenda : Podać numery dostawców którzy dostarczają
Kwerenda : Podać numery dostawców którzy dostarczają przynajmniej jedna cześć, którą dostarcza przynajmniej jeden dostawca który dostarcza przynajmniej jedną część czerwoną. SELECT NAZWISKO FROM D WHERE D# IN (SELECT D# FROM DC WHERE C# = ’CZ’) • Druga wersja z kwantyfikatorem ANY: SELECT NAZWISKO FROM D WHERE D# = ANY (SELECT D# FROM DC WHERE C# = ‘CZ’) • Relacje D I DC są złączone ze względu na wspólny element SELECT NAZWISKO FROM D,DC WHERE D.D# = DC.D# AND C#=’CZ’ • Kwantyfikator EXIST SELECT NAZWISKO FROM D WHERE EXIST (SELECT FROM DC WHERE D# = D.D# AND C#=’CZ’) • Przykład: zapytanie skorelowane SELECT NAZWISKO FROM D WHERE ‘CZ’ IN (SELECT C# FROM DC WHERE D#=D.D#) • Przykład z kwantyfikatorem ANY z tymże mamy tutaj to zapytanie skorelowane SELECT NAZWISKO FROM D WHERE ‘CZ’ = ANY (SELECT C# FROM DC WHERE D# = D.D#) • Przykład z group SELECT NAZWISKO FROM D, DC WHERE D.D# = DC.D# AND C#=’CZ’ GROUP BY NAZWISKO • Ad. Kwerenda podana na początku SELECT IN FROM DC WHERE C# IN (SELECT C# FROM DC WHERE D# IN (SELECT D# FROM DC WHERE C# IN (SELECT C# FROM C WHERE KOLOR=’RED’))) Złączenia zewnętrzne – dwie relacje oznaczające klientów banku (A- maja konto, B- biorą pożyczki), ostatni atrybut numer konta I numer pożyczki, należy je złączyć, wspólne atrybuty to nr klienta i nazwisko, pierwsze złączenie AxB to normalne według atrybutów K# i nazwisko, czyli to te osoby które posiadają i konto i pożyczka, drugie złączenie lewostronne czyli tylko Ci co maja konto ( wszystkie z A i niektóre z B) czyli do relacji dopisywany jest numer pożyczki(nie wszyscy biorą wiec będę puste pola tam), Parkera np. nie ma bo nie ma konta Potem złączenie prawostronne , mamy tutaj wszystkich co wzięli pożyczki(wszystkie krotki z relacji B) – wartości wystąpią przy numerze konta, Złączenie obustronne całkowite – wszystkie krotki z obydwu relacji A K# name Nr.k 1 Blake 1000 2 Smith 1203 3 Clark 1142 4 Davis 1358 5 Blair 1224 B K# name Nr.p 1 Blake 125 6 Lewis 132 7 Ray 141 4 Davis 115 8 Parker 105 Złączenia zostały złączone w SQL, rezultat złączenie występuje po słowie from Przykłady SELECT DISTINCT NAME FROM D NATURAL JOIN DC WHERE C#=’CZ’ JOIN – wg wszystkich atrybutów o takich samych nazwach bez natural trzeba zdefiniować wg czego następuje złączenie lub z ON SELECT DISTINCT NAME FROM D JOIN DC ON D.D# = DC.D# AND C#=’CZ’ Inne formy : Całkowite złączenie naturalne – czyli obustronne gdzie wystąpią krotki z obydwu relacji, potem left I right, takie wyrażenie mocze wystąpić po słowie from D NATURAL FULL OUTER JOIN DC D NATURAL LEFT OUTER JOIN DC D NATURAL RIGHT OUTER JOIN DC Powyższych złączeń nie można stosować na egzaminie, czyli jak będzie polecenie ze trzeba losować SQL to nie można stosować ten złączeń, D FULL OUTER JOINC ON DMIASTO=CMIASTO D LEFT OUTER JOIN C ON DMIASTO = CMIASTO D RIGHT OUTER JOIN C ON D MIAASTO=CMIASTO Operacje typu UPDATE – są to takie które cokolwiek zmieniają 1. tworzenie indeksu ( słowa kluczowe CREATE INDEX) – tworzymy index na atrybucie status w relacji D CREATE INDEX RANGA ON DCSTATION 2. drop oznacza usuniecie indexu, indexy spowalniają aktualizacje czyli wprowadzanie danych DROP INDEX RANGA Insert – wprowadzenie czegoś, tutaj konkretnych wartości, poniżej przepisanie(wykorzystanie już wprowadzonych i przepisanie ich do innej relacji) INSERT INTP D(D# NAZWISKO) INSERT INTO D.100 SELECT D#, NAZWISKO, MIASTO, FROM D WHERE STATUS>100 STATUS Delete – usuwa wszystko z dc DELETE FROM DC DELETE FROM D WHERE STATUS < 10 Definiowanie nowych tabel - R – nazwa nowej tabeli , A – atrybut, D – opis – description , <I,c> - warunki integralności – może być wiele od 1 do n Primary key – główny klucz Foreign key – obcy klucz Warunek opisany słowem checz ( p – oznacza warunek który musi być sprawdzony) CREATE TABLE R(A1D1,A2D2,….,ANDN) <i1c1> …… <in,cn>) Opis atrybutu (wiersza bo w jednym wierszu jest) może zawierać typ danych oraz dodatkowe informacje typu IS NOT NULL np. czy tez PRIMARY KEY(tylko jeden atrybut może mieć taki atrybut) Przykłady CREATE TABLE LEKI (NUMER INTEGER NOT NULL, NAZWA_HANDLOWA CHAR(20), PRODUCENT# INTEGER, POSTAC CHAR(20) DAWKA INTEGER PRIMARY KEY(NUMER)) Operacje typu update UPDATE DC SET ILOŚĆ=ILOSC+10 WHERE D#=’01’ (na egzaminie jak nie będziemy umieli rozwiązać zad w SQL to można podać instrukcje jakie są w SQL żeby to jakoś przejść) Zmiana schematu relacji Słowo ALTER – można dodawać atrybuty i można je usuwać, wreszcie można usuwać tabele ALTER TABLE LEKI ADD KRAJ CHAR(20) ALTER TABLE LEKI DROP POSTAC DROP TABLE LEKI Więzy klucza obcego można definiować poprzez umieszczenie następującego opisu wiersza PRODUCENT# INTEGER REFERENCES FARM(P#) CZYLI TO ZNACZY ZE WARTOSCI ATRYB UTU PRODUCENT # NALEŻY DO OPISU ATRYBUTY P# RELACJI farm Relacja – nie ma nazwy atrybutu, bo kluczem relacji d jest d # , c c# więc tu mamy takie same nazwy , a skoro są takie same nazwy to nie trzeba oznaczać) CREATE TABLE DC (D# INT REFERENCES D C# INT REFERENCES C ILOSC INT PRIMARY KEY(D#,C#)) Inny sposób definiowania klucza obcego FOREIGN KEY(D#) REFERENCES D Inne formy – możemy w wierszu relacji(atrybutowym) napisać SPRAWDZ ZE ATRYBUT DECK ZNAJDUJE SIĘ W TAKIM I TAKIM ZBIORZE CHECK (DEG IN(‘Bach’,’Most’,’Dac’)) Sprawdza czy dawka jest większa od zera CHECK(DAWKA>0) Sprawdź czy nazwisko znajduje się w zbiorze określonym przez kwerendę CHECK(B_NAME IN (SELECT B_NAME FROM B) PRODUCENT # INTEGER CHECK(PRODUCENT # IN (SELECT P# FROM FARM)) Inna forma definiowania więzów klucza obcego, sprawdzamy czy wartość atrybuty znajduje się w zbiorze będącym odpowiedzią dla atrybutu Alternatywa dla tego jest za pomocą klucza obcego z references – poprzedni sposób jest o wiele lepszy, bo tutaj tylko sprawdzi wartość atrybutu producent ale jeśli ten numer nie będzie spełniał warunku to operacja zostanie odrzucona, natomiast ten warunek pozwoli na zmianę relacji, nie dotyczy relacji farm ( relacja lekka) Tam definiował relacje pomiędzy obydwoma polami ( a nie jak tu na jedno narzucony warunek) PERESPEKTYWY SA to relacje wirtualne tzn. nie zawierają żadnych danych, definiują obraz bazy danych widziany przez użytkownika Tworzymy ja za pomocą instrukcji CREATE VIEV Tutaj powstaje perspektywa o nazwie D_L zawierająca krotki opisujące dostawców mieszkających w Londynie CREATE VIEW D_L AS SELECT # FROM D WHERE MIASTO=’LONDYN” Nazwa perspektywy może pojawić się wszędzie tam gdzie występuje nazwa relacji Dalej mamy przykład tego – chcemy znaleźć nazwiska dostawców o statusie większym niż 100 SELECT NAME FROM D_L WHERE STATUS>100 (system sam wykona odpowiednie przekształcenia – zamiast D_L from, no i że miasto = Londyn) Trudniej jest używać perspektyw przy wprowadzaniu nowych krotek CREATE E VIEW RANGA AS SELECT C#, STATUS FROM DC,D WHERE DC.D#=D.D# perspektywa ranga została zdefiniowana za pomocą dwóch relacji a poprzednia za pomocą jednej I to jest bardzo duża różnica, Dla każdej dostarczanej części podawany jest status jej dostawcami, wiec łączymy relacje z dostawcami i mamy odpowiedni atrybut przypuśćmy ze za pomocą tej perspektywy wprowadzamy krotkę C5 20. wymaga to wprowadzenia do relacji d krotki NULL NULL 20 NULL oraz do DC krotki NULL C5 NULL. Przypuśćmy ze następnie usiłujemy wykonać kwerendę za pomocą tej perspektywy. Krotka C5 20 nie będzie należeć do odpowiedzi Otóż wyznaczenie odpowiedzi wymaga realizacji złączenia, są tu łączone krotki z atrybutami o wartościach NULL. Zgodnie z zasada działań na wartościach pustych NULL /= NULL. 5 jest NULL 5<NULL – niewiadomo – relacja UNKNOWN Miejsce bazy danych w systemie informatycznym Model związków encji jest jednym z narzędzi projektowania systemów, drugim narzędziem SA diagramy przepływu danych DFD (DATA FLOW DIAGRAM) Elementy diagramu DFD 1) procesy – zadania spełniane przez system 2) magazyny danych – SA to dane w spoczynku 3) przepływy – dane w ruchu 4) terminatory – obiekty z którymi kontaktuje się system(obiekty zewnętrzne) Przebieg procesu projektowania OPIS PROJEKTU OMF OML NML NMF OML – MODEL (o- obecny n – nowy, f – fizyczny lub l- logiczny) OMF - służy implementacji dla informatyka który ma rozpoznać obiekt, uwzględnia szczegóły implementacyjne systemu, OML - uwzględnia wymagania użytkownika bez szczegółów implementacyjnych, czyli to co system robi a nie to co jak robi NML – nowy model logiczny – opisuje to co system ma robić NMF – szczegóły implementacyjne nowego systemu Jeżeli OML = NML to celem projektowania jest poprawienie implementacji systemu Na czym polega ta różnica ?? – opis tego co się dzieje wraz z opisem szczegółów implementacyjnych, przychodzą zamówienia i przyjmuje je Jerzy(powiedziana tez nazwa procesu – osoba realizująca pewne zadanie), dalej komputer, - urzędnik sprzedaży, urzędnik wysyłki ktoś kto produkuje wysyłkę i ktoś kto produkuje i wysyła faktury, segregator – magazyn danych i w nim tez plik zamówień Niżej to samo tylko bez szczegółów implementacyjnych – PRZYJM ZAM – przyjmij zamówienie, nie ma już podanej osoby jest tylko wpisane w nazwie zadanie procesu, mamy tylko utwórz dokument wysyłki i utwórz fakturę Model podstawowy systemu – skalda się z !) Diagramu kontekstowego 2) listy zdarzeń podstawowych na które system ma reagować 3) celu systemu 1) Diagram kontekstowy – zawiera jeden proces oznaczający system oraz terminatory z którymi się system kontaktuje Mamy następujące terminatory – klienci drukarnia kierownictwo księgowość Mogą ale nie musza być etykietowane tak jak tutaj SA niektóre, klient przychodzi i kontaktuje się z systemem wysyłając zamówienie a potem on dostaje fakturę Wyróżniamy zdarzenia(na które system ma reagować) sterowane przepływem oraz zdarzenia temporalne Te pierwsze to zdarzenia asynchroniczne – mogą pojawić się w dowolnej chwili(mieć miejsce w dowolnej chwili) na przykład- przychodzi pacjent do ośrodka zdrowia i trzeba wszystko opisać, jak go obsłużyć – trzeba to dokładnie opisać jako jeden z wariantów, następnie obsługa zdarzenia może wymagać kontaktu z innym terminatorem czyli wysłania do niego przepływu i oczekiwania odpowiedzi, może to też wymagać przeczytania danych z magazynu danych Zdarzenia temporalne mają miejsce w ściśle określonych chwilach. Przyjmuje się ze w systemie znajduje się zegar, przykład – na godzinę 14 musi być gotowy raport dla księgowości, tutaj nie ma żadnego przepływu który by to zdarzenie uruchamiał (poprzednio żeby zaistniało zdarzenie musiał istnieć przepływ) Dla każdego zdarzenia tworzymy diagram, zawiera on jeden proces oraz odpowiednia ilość terminatorów i magazynów danych Terminator w postaci pacjenta, przychodzi pacjent ale może w rożnym celu Np umówić się na wizytę więc trzeba przeczytać magazyn danych w postaci kalendarza wizyt i przypisać mu, może przyjść do lekarza – informacja o lekarzach, na badania – inf. o badaniach, może przyjść zapłacić rachunki Magazyny danych stanowa interfejs miedzy procesami opisującymi poszczególne zdarzenia – diagramy dla wszystkich zdarzeń umieszcza się na jednym rysunku . ze względu na brak czytelności tego rysunku kolejnym etapem jest łączenie procesów. Powstają w ten sposób procesy wyższego rzędu (skomplikowany rysunek – nie przepisany) Uzupełnieniem opisu procesu jest specyfikacja Strukturalny język naturalny – połączenie cech języka naturalnego i języka programowania(łatwy i zrozumiały z precyzyjnym) – narzucono w nim ograniczenia na postać formułowanych zdań - są to zdania w trybie rozkazującym (tak aby osoba nie znająca się mogła zrozumieć) Zd-1 Zd-2 … Zd-n IF war-1 Zd-1 Zd-2 ELSE Zd-2 Zd-4 Zd-5 ENDIF DO WHILE war-1 Zd-1 Zd-2 Zd-3 …………………………. Za pomocą takich zdań można zdefiniować specyfikacje – specyfikacja procesu polegającego na przenoszeniu pacjenta do archiwum (jego danych) 2 magazyny danych pacjenci i karty pacjentów, mamy z nich przenieść rekordy do archiwum ale trzeba przewidzieć sytuacje awaryjne kiedy nie ma odpowiedniego rekordu, zarówno magazynie danych pacjenci jak i karty pacjentów i jednocześnie poinformować użytkownika dlatego generowana jest odpowiedz BEGIN ZNAJDŹ pacjenta w PACJENCI Z pasującym ID_pacjenta IF nie znaleziono rekord Odpowiedz=”nie ma pacjenta” ELSE ZNAJDZ kartepacjenta w KARTY PACJENTOW z pasującym ID_pacjenta IF nieznaleziono rekordu Odpowiedz=”nie ma karty pacjentow” ELSE Przenieś rekord pacjenta do archiwum Przenieś karte pacjenta do archiwum Odpowiedz=”informacja przeniesiona’ ENDIF WYSWETL odpowiedz ENDIF