[ Pobierz całość w formacie PDF ]
.:ALTER DOMAIN DziedzinaFilmu SET DEFAULT 'nie matakiego tytułu';która spowoduje, że standardowa wartość ' nieznany' dla dziedziny DziedzinaFilmu z przykładu 5.35 zostanie zast~piona przez ' nie ma takiego tytułu'.Inne przykłady stosowania instrukcji modyfikujących poznamy przy okazji omawiania sposobów określania więzów dziedzinowych w rozdziale 6.Definicję dziedziny można usunąć ze schematu bazy danych, stosując instrukcję podobną do przedstawionej poniżej:DROP DOMAIN DziedzinaFilmu;W jej wyniku dziedzina wymieniona jako parametr nie będzie już dostępna w deklaracjach atrybutów.Jednakże te atrybuty, dla których przed usunięciem dziedziny określono typ przez jej nazwę, zachowują ten typ, a więc typ danych, oraz wartości domniemane pozostają dla tych atrybutów bez zmian.5.7.7.IndeksyIndeks określony na atrybucie A pewnej relacji jest mechanizmem, który pozwala na efektywne wyszukiwanie krotek o ustalonej wartości składowej atrybutu A.Indeksy pomagają przy szybkim przetwarzaniu tych zapytań, w których warunek wyszukiwania zawiera porównanie atrybutu A z pewną stałą liczbową, np.zawiera wyrażenie ft = 3 lub A <_ 3.Jeśli relacja zawiera bardzo dużo krotek, to badanie poszczególnych krotek po to, by znaleźć, być może, niewiele tych, które spełniają warunek, może okazać się kosztowne.Rozważmy przykład 5.1:5.7.DEFINIOWANIE SCHEMATU RELACJI W JĘZYKU SQL 33%SELECT EROM FilmWHERE nazwaStudia = `Disney' AND rok = 1990;Może okazać się, że filmów jest około 10 000, a tylko 200 było wyprodukowanych w 1990 r.Implementacja takiego zapytania przez sprawdzenie warunku klauzuli WHERE we wszystkich 10 000 krotkach jest, łagodnie mówiąc, naiwnością.Znacznie wydajniejszy sposób polega na przykład na wybraniu spośród 200 filmów wyprodukowanych w 1990 r.tych, które powstały w studiu Disneya.A jeszcze efektywniej byłoby, gdybyśmy w jednym kroku mogli uzyskać te 10 krotek, które spełniają jednocześnie oba warunki z klauzuli WHERE i były wyprodukowane w studiu Disneya w 1990 r.; ale to już byłoby wlęCej I11Ż można oczekiwać od typowych struktur danych.Mimo że tworzenie indeksów nie weszło do żadnego ze standardów SQL aż do wersji SQL2 ani też w SQL2, to większość systemów komercyjnych dołącza własne wersje poleceń, które są dla projektanta narzędziem do założenia indeksu na określonym atrybucie określonej relacji.Poniżej przedstawiamy bardzo typową składnię takiego polecenia.Jeśli na przykład chcemy założyć indeks na atrybucie rok w relacji Film, to możemy to zapisać w następujący sposób:CREATE INDEX IndeksRoku ON Film(rok);W wyniku tego polecenia na atrybucie rok w relacji Film zostanie utworzony indeks o nazwie IndeksRoku.Dzięki tak określonemu indeksowi wszystkie zapytania SQL, których warunek zawiera przyrównanie atrybutu rok do pewnej stałej wartości będą przetwarzane w ten sposób, że zostaną sprawdzone tylko te knotki relacji Film, których atrybut rok ma wartość spełniającąten warunek, co znajdzie odbicie w znacznym przyspieszeniu obliczenia wyniku zapytania.Często bywa-dostępny także indeks z wieloma atrybutami.Jego działanie polega na tym, że przy podanych wartościach atrybutów przeszukiwane są tylko knotki zawierające właśnie te wartości.Może się wydawać, że takie indeksy są mniej efektywne od indeksów z pojedynczym atrybutem, ponieważ nie zawsze są określone wartości wielu atrybutów i wówczas ten pierwszy rodzaj indeksu może nie mieć zastosowania.Ale w sytuacjach, kiedy warunki są określone dla wielu atrybutów, indeksy wieloargumentowe są znacznie wydajniejsze.PRZYKŁAD 5.36Ponieważ atrybuty tytuł i rok z relacji Film razem stanowią klucz tej relacji, zatem można się spodziewać, że albo wartości obu tych atrybutów są określone, albo nie jest określona wartość żadnego z nich.Poniżej przedstawiono typową deklarację indeksu założonego na dwóch atrybutach:CREATE INDEX IndeksKlucza ON Film(tytuł, rok);33 8 5.JĘZYK BAZ DANYCH SQLPonieważ para (tytuł, rok) jest kluczem, więc mamy pewność, że jeśli są dane obie wartości w tej parze, to szukając według indeksu, otrzymamy dokładnie jedną krotkę i będzie to oczekiwana krotka.Jeśli jednak w zapytaniu zostaną określone wartości obu atrybutów: tytuł i rok, ale dostępny będzie tylko indeks IndeksRoku, to szukając najlepiej jak się da, system odnajdzie wszystkie krotki z podaną wartością atrybutu rok, a następnie sprawdzi, które z nich zawierają podany tytuł.Jeśli z kolei indeks zostanie założony na atrybucie tytuł, to będziemy mieli lepszą sytuację niż gdy indeks jest określony dla roku.Wynika to z faktu, że w jednym roku produkuje się wiele filmów, ale istnieje niewiele filmów, które majątaki sam tytuł.W naszym konkretnym przykładzie wybranie wszystkich filmów o podanym tytule, a następnie sprawdzenie ich roku produkcji trwa tylko niewiele dłużej niż korzystanie z indeksu z wieloma atrybutami założonego na obu atrybutach klucza jednocześnie [ Pobierz całość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl matkasanepid.xlx.pl
.:ALTER DOMAIN DziedzinaFilmu SET DEFAULT 'nie matakiego tytułu';która spowoduje, że standardowa wartość ' nieznany' dla dziedziny DziedzinaFilmu z przykładu 5.35 zostanie zast~piona przez ' nie ma takiego tytułu'.Inne przykłady stosowania instrukcji modyfikujących poznamy przy okazji omawiania sposobów określania więzów dziedzinowych w rozdziale 6.Definicję dziedziny można usunąć ze schematu bazy danych, stosując instrukcję podobną do przedstawionej poniżej:DROP DOMAIN DziedzinaFilmu;W jej wyniku dziedzina wymieniona jako parametr nie będzie już dostępna w deklaracjach atrybutów.Jednakże te atrybuty, dla których przed usunięciem dziedziny określono typ przez jej nazwę, zachowują ten typ, a więc typ danych, oraz wartości domniemane pozostają dla tych atrybutów bez zmian.5.7.7.IndeksyIndeks określony na atrybucie A pewnej relacji jest mechanizmem, który pozwala na efektywne wyszukiwanie krotek o ustalonej wartości składowej atrybutu A.Indeksy pomagają przy szybkim przetwarzaniu tych zapytań, w których warunek wyszukiwania zawiera porównanie atrybutu A z pewną stałą liczbową, np.zawiera wyrażenie ft = 3 lub A <_ 3.Jeśli relacja zawiera bardzo dużo krotek, to badanie poszczególnych krotek po to, by znaleźć, być może, niewiele tych, które spełniają warunek, może okazać się kosztowne.Rozważmy przykład 5.1:5.7.DEFINIOWANIE SCHEMATU RELACJI W JĘZYKU SQL 33%SELECT EROM FilmWHERE nazwaStudia = `Disney' AND rok = 1990;Może okazać się, że filmów jest około 10 000, a tylko 200 było wyprodukowanych w 1990 r.Implementacja takiego zapytania przez sprawdzenie warunku klauzuli WHERE we wszystkich 10 000 krotkach jest, łagodnie mówiąc, naiwnością.Znacznie wydajniejszy sposób polega na przykład na wybraniu spośród 200 filmów wyprodukowanych w 1990 r.tych, które powstały w studiu Disneya.A jeszcze efektywniej byłoby, gdybyśmy w jednym kroku mogli uzyskać te 10 krotek, które spełniają jednocześnie oba warunki z klauzuli WHERE i były wyprodukowane w studiu Disneya w 1990 r.; ale to już byłoby wlęCej I11Ż można oczekiwać od typowych struktur danych.Mimo że tworzenie indeksów nie weszło do żadnego ze standardów SQL aż do wersji SQL2 ani też w SQL2, to większość systemów komercyjnych dołącza własne wersje poleceń, które są dla projektanta narzędziem do założenia indeksu na określonym atrybucie określonej relacji.Poniżej przedstawiamy bardzo typową składnię takiego polecenia.Jeśli na przykład chcemy założyć indeks na atrybucie rok w relacji Film, to możemy to zapisać w następujący sposób:CREATE INDEX IndeksRoku ON Film(rok);W wyniku tego polecenia na atrybucie rok w relacji Film zostanie utworzony indeks o nazwie IndeksRoku.Dzięki tak określonemu indeksowi wszystkie zapytania SQL, których warunek zawiera przyrównanie atrybutu rok do pewnej stałej wartości będą przetwarzane w ten sposób, że zostaną sprawdzone tylko te knotki relacji Film, których atrybut rok ma wartość spełniającąten warunek, co znajdzie odbicie w znacznym przyspieszeniu obliczenia wyniku zapytania.Często bywa-dostępny także indeks z wieloma atrybutami.Jego działanie polega na tym, że przy podanych wartościach atrybutów przeszukiwane są tylko knotki zawierające właśnie te wartości.Może się wydawać, że takie indeksy są mniej efektywne od indeksów z pojedynczym atrybutem, ponieważ nie zawsze są określone wartości wielu atrybutów i wówczas ten pierwszy rodzaj indeksu może nie mieć zastosowania.Ale w sytuacjach, kiedy warunki są określone dla wielu atrybutów, indeksy wieloargumentowe są znacznie wydajniejsze.PRZYKŁAD 5.36Ponieważ atrybuty tytuł i rok z relacji Film razem stanowią klucz tej relacji, zatem można się spodziewać, że albo wartości obu tych atrybutów są określone, albo nie jest określona wartość żadnego z nich.Poniżej przedstawiono typową deklarację indeksu założonego na dwóch atrybutach:CREATE INDEX IndeksKlucza ON Film(tytuł, rok);33 8 5.JĘZYK BAZ DANYCH SQLPonieważ para (tytuł, rok) jest kluczem, więc mamy pewność, że jeśli są dane obie wartości w tej parze, to szukając według indeksu, otrzymamy dokładnie jedną krotkę i będzie to oczekiwana krotka.Jeśli jednak w zapytaniu zostaną określone wartości obu atrybutów: tytuł i rok, ale dostępny będzie tylko indeks IndeksRoku, to szukając najlepiej jak się da, system odnajdzie wszystkie krotki z podaną wartością atrybutu rok, a następnie sprawdzi, które z nich zawierają podany tytuł.Jeśli z kolei indeks zostanie założony na atrybucie tytuł, to będziemy mieli lepszą sytuację niż gdy indeks jest określony dla roku.Wynika to z faktu, że w jednym roku produkuje się wiele filmów, ale istnieje niewiele filmów, które majątaki sam tytuł.W naszym konkretnym przykładzie wybranie wszystkich filmów o podanym tytule, a następnie sprawdzenie ich roku produkcji trwa tylko niewiele dłużej niż korzystanie z indeksu z wieloma atrybutami założonego na obu atrybutach klucza jednocześnie [ Pobierz całość w formacie PDF ]