Source: http://docplayer.pl/3690706-Korzy-ci-36-tworzenie-w-asnej-wtyczki-37-rozszerzanie-klas-wbudowanych-38-rozszerzenia-uniwersalne-40-wdra-anie-45-svn-externals-45.html
Timestamp: 2017-03-26 05:37:28
Legal References Found: Art.1
 art. 488
 art. 488
 art. 19
 art.4
 art.20
 art.4
 art.20
 Art.1
 art. 49
 art. 49
 art. 118

Document Content:
Korzy ci 36 Tworzenie w asnej wtyczki 37 Rozszerzanie klas wbudowanych 38 Rozszerzenia uniwersalne 40 Wdra anie 45 svn:externals 45 - PDF
Korzy ci 36 Tworzenie w asnej wtyczki 37 Rozszerzanie klas wbudowanych 38 Rozszerzenia uniwersalne 40 Wdra anie 45 svn:externals 45
Download "Korzy ci 36 Tworzenie w asnej wtyczki 37 Rozszerzanie klas wbudowanych 38 Rozszerzenia uniwersalne 40 Wdra anie 45 svn:externals 45"
1 Rails. Projektowanie systemów klasy enterprise Autor: Dan Chak T³umaczenie: Andrzej Gra yñski ISBN: Tytu³ orygina³u: Enterprise Rails Format: , stron: 328 Poznaj najbardziej zaawansowane tajniki Rails! Jak zorganizowaæ kod, wykorzystuj¹c system wtyczek lub modu³y? Jakie zalety posiada architektura SOA? Jak zwiêkszyæ wydajnoœæ Rails? Rynek szkieletów aplikacji internetowych jest niezwykle urozmaicony. Wœród wielu dostêpnych opcji mo na znaleÿæ tu rozwi¹zania przeznaczone dla projektów o ró nej skali z³o onoœci, zarówno te mniej, jak i bardziej popularne. Warto jednak siêgn¹æ po rozwi¹zanie absolutnie unikatowe i wyj¹tkowe Rails. Szkielet ten œwietnie sprawdza siê zarówno w projektach ma³ych, jak i tych klasy enterprise, a ponadto znany jest ze swoich mo liwoœci, wydajnoœci oraz elastycznoœci. Warto tak e podkreœliæ, e w pakiecie razem z nim dostaniemy liczn¹, chêtn¹ do pomocy spo³ecznoœæ u ytkowników! Autor ksi¹ ki porusza interesuj¹ce kwestie zwi¹zane z budow¹ zaawansowanych systemów informatycznych opartych o Rails. W trakcie lektury dowiesz siê, jak wykorzystaæ system wtyczek jako œrodek organizuj¹cy Twój kod oraz jak w tej roli sprawdz¹ siê modu³y. Kolejne rozdzia³y przynios¹ solidny zastrzyk wiedzy na temat tworzenia rozbudowanego i bezpiecznego modelu danych, dziedziczenia wielotabelarycznego oraz wykorzystania wyzwalaczy jako narzêdzia kontroli skomplikowanych zale noœci w danych. Dan Chak du y nacisk k³adzie na zagadnienia zwi¹zane z SOA (skrót od ang. Service Oriented Architecture) oraz wydajnoœci¹. Jest to genialna pozycja dla wszystkich programistów i projektantów uczestnicz¹cych w projekcie wytwarzanym z wykorzystaniem Rails. Komponenty aplikacji Organizacja kodu z wykorzystaniem wtyczek Rola modu³ów w porz¹dkowaniu kodu Budowa solidnego modelu danych Normalizacja modelu Obs³uga danych dziedzinowych Wykorzystanie wyzwalaczy w celu kontroli zale noœci w danych Dziedziczenie jedno- i wielotabelaryczne Zastosowanie modeli widokowych Architektura SOA Dostarczanie us³ug typu XML-RPC Us³ugi typu REST Zwiêkszenie wydajnoœci Rails Obowi¹zkowa pozycja dla wszystkich programistów i projektantów korzystaj¹cych z Rails!2 Spis tre ci Wst p Widok z góry Co to znaczy enterprise? 19 Powolny wzrost 21 Komponenty aplikacji 24 Warstwa danych 24 Warstwa aplikacyjna 26 Warstwa cache owania 29 System komunikacyjny 32 Serwer WWW 33 Zapora sieciowa Wtyczki jako rodek organizacji kodu...35 Korzy ci 36 Tworzenie w asnej wtyczki 37 Rozszerzanie klas wbudowanych 38 Rozszerzenia uniwersalne 40 Wdra anie 45 svn:externals Organizacja kodu za pomoc modu ów...47 Pliki i katalogi 47 Granice modu u wyznaczaj przestrze nazw 49 Mi dzymodu owe skojarzenia klas modelowych 50 Relacje wzajemne 51 Modularyzacja jako wst p do architektury us ugowej 51 Wymuszenie prawid owej kolejno ci adowania definicji klas 53 wiczenia 54 33 Refaktoring 54 Wyodr bnianie modu ów fizycznych 54 Uwalnianie metod u ytkowych Baza danych jak forteca Baza danych jako cz aplikacji 58 Jedno rodowisko wyznacza regu y 58 Nasi programi ci nie pope niaj b dów 58 Baza danych moja i tylko moja 59 Siadaj c na ramionach gigantów 59 Wybór w a ciwego systemu bazy danych 59 À propos migracji 60 Obalaj c mity 62 Raporty, raporty Budowanie solidnego modelu danych Bilety do kina 67 Na pocz tek bardzo prosto 68 Ograniczenia 70 Obalamy mity 78 Integralno referencyjna 78 Wprowadzenie do indeksowania Refaktoryzacja bazy do trzeciej postaci normalnej Trzecia posta normalna 87 Zacznij od normalizacji 91 Dziedziczenie tabel i domieszki 92 wiczenia 95 Refaktoryzacja Dane dziedzinowe Kody pocztowe i geograficzne dane dziedzinowe 99 Wzorzec projektowy strategia dla tabel dziedzinowych 101 Refaktoryzacja od samego pocz tku Klucze z o one i posta normalna DKNF Klucze naturalne korzy ci i k opoty 108 Wybór kluczy naturalnych 111 Siedz c ju na ramionach giganta 112 Migracja do postaci normalnej DKNF 113 Klucze wielokolumnowe i ich implementacja w Rails 116 Odroczona kontrola integralno ci referencyjnej 120 Co za co Spis tre ci4 wiczenia 123 Refaktoryzacja 124 Klucz jednokolumnowy 124 Klucz wielokolumnowy Wyzwalacze jako narz dzia kontroli skomplikowanych zale no ci wewn trz danych Kontrola ogranicze za pomoc wyzwalaczy 127 Anatomia funkcji w j zyku PL/pgSQL 130 To tylko a cuchy 131 Zmienne lokalne i przypisywanie im warto ci 131 Bloki 132 Dodatkowe cechy wyzwalacza 132 Wyzwalacz agodna zapora lub bezpiecznik 132 Instrukcje warunkowe Dziedziczenie wielotabelaryczne O co chodzi? 135 Polimorfizm co to jest? 137 Dziedziczenie a dane fizyczne 138 Dziedziczenie jednotabelaryczne 140 Dziedziczenie wielotabelaryczne 140 Alternatywa wy czaj ca dla zbioru kolumn 143 Implementacja MTI w Rails 145 Klasy-fabryki 151 wiczenia 152 Refaktoryzacja 152 Z STI do MTI 152 Z :polymorphic => true do MTI Modele widokowe Widoki 156 Definiowanie widoku 156 Definiowanie klasy modelowej na bazie widoku 157 Specyfika widoków 158 Dodawanie, modyfikowanie i usuwanie rekordów 159 Ograniczenia i klucze obce 159 Indeksowanie 160 wiczenia 161 Refaktoryzacja 161 Spis tre ci 55 12. Widoki zmaterializowane Regu y rz dz ce widokami zmaterializowanymi 164 Widok ród owy 165 Formatowanie widoku 166 Tabela docelowa 168 Funkcje od wie aj ce i uniewa niaj ce 169 Zarz dzanie zale no ciami czasowymi 171 Kto za to p aci? 172 Od wie anie i uniewa nianie sterowane wyzwalaczami 175 Tabela movie_showtimes 176 Tabela movies 178 Tabela theatres 178 Tabela orders 179 Tabela purchased_tickets 180 Ukrycie implementacji dzi ki widokowi uzgadniaj cemu 181 Periodyczne od wie anie 183 Indeksowanie widoku zmaterializowanego 184 To si naprawd op aca 185 Kaskadowe cache owanie widoków 186 wiczenia SOA zaczynamy Czym jest SOA? 189 Dlaczego SOA? 192 Wspó dzielenie zasobów 193 Redukcja obci enia baz danych 196 Skalowalno i cache owanie 202 Lokalna redukcja z o ono ci 202 Podsumowanie 205 wiczenia Specyfika SOA Specyfika us ug 207 Ukryta implementacja 207 Przyst pne API 210 Projektowanie API 211 Nie rozdrabniaj si 211 Ogranicz kontakty 213 Korzystaj ze wspó bie no ci 214 Tylko to i nic wi cej Spis tre ci6 REST, XML-RPC i SOAP 217 XML-RPC 217 SOAP Us ugi typu XML-RPC ActionWebService w Rails Definiowanie bariery abstrakcji 222 ActiveRecord jako warstwa modelu fizycznego 222 Warstwa modelu logicznego 224 Definiowanie API 229 Wi cej testów 233 Wtyczka kliencka 235 Wspó dzielony kod 236 Kliencka klasa-singleton 237 Testy integracyjne Przechodzimy na SOA Us uga zamówie OrdersService 242 Integracja z us ug MoviesService 252 Konsekwencje 254 Model obiektowy us ugi MoviesService 256 Podsumowanie Us ugi typu REST Podstawy REST 267 Zasoby i polecenia 267 Sprz t jest cz ci aplikacji 269 REST a SOA 270 REST a CRUD 270 Uniwersalny interfejs 271 HTTP+POX 273 Definiowanie kontraktu us ugi 274 Klient REST w Rails 276 REST czy XML-RPC? Us ugi webowe typu RESTful Sformu owanie zadania 279 Narz dzia 281 ROXML 281 Net::HTTP 283 Spis tre ci 77 Us uga MoviesWebService 284 Implementacja zasobów serwera 284 Implementacja akcji serwera 287 Implementacja klienta Cache owanie Dla przypomnienia cache owanie w warstwie fizycznej 296 Migawki 296 Funkcja od wie aj ca 297 Wyzwalacze uniewa niaj ce 297 Indeksowanie 298 Cache owanie modeli logicznych 298 Uwarunkowania 304 Pu apka nieaktualnych danych 307 Indeksowanie cache 310 Inne aspekty cache owania 311 Cache owanie planu realizacji 311 Cache owanie da 312 Cache owanie w Rails 313 Cache owanie fragmentów, akcji i stron 314 Skorowidz Spis tre ci8 ROZDZIA 8. Klucze z o one i posta normalna DKNF Nasz obecny model znacznie ró ni si od swego pierwowzoru z rysunku 5.1, do wiadczy bowiem szeregu przeobra e, polegaj cych na (przypomnijmy): rozszerzeniu definicji schematu o ograniczenia (constraints) narzucone na dopuszczaln posta danych, wymuszeniu kontroli integralno ci referencyjnej, skojarzeniu podstawowych indeksów z tabelami, usuni ciu redundancji danych drog dziedziczenia tabel i dziedziczenia klas modelowych oraz zamkni ciu definicji tych ostatnich w form wtyczek Rails, utworzeniu nowych tabel na bazie kolumn, których tematyczne rozszerzenie stwarza oby ryzyko naruszenia regu trzeciej postaci normalnej, magazynowaniu bazy wiedzy aplikacji w postaci tabel dziedzinowych i odpowiadaj cych im klas modelowych i sta ych Rails. To bardzo wiele, jednak naszemu modelowi wci jeszcze troch brakuje do tego, by uzna go za wystarczaj co solidny dla aplikacji enterprise. W tym rozdziale zajmiemy si dwoma mechanizmami, dzi ki którym mo na ów dystans wyra nie zmniejszy : pierwszym z nich s klucze z o one, drugim klucze naturalne dla domen (zwane po prostu kluczami domenowymi ), czyli sekwencje kolumn jednoznacznie identyfikuj ce rekordy w ramach tabeli. W kwestii kluczy naturalnych Rails znacznie u atwia zadanie programistom, przyjmuj c dla danej tabeli pojedyncz kolumn id w charakterze jej klucza g ównego. Z jednej strony, programi ci nie musz si wi c martwi o definiowanie kluczy naturalnych zgodnych z natur danych przechowywanych w tabeli, z drugiej jednak, pozbawiaj si w ten sposób pewnych zalet sprawiaj cych, e klucze takie przewy szaj standardowe klucze oparte na kolumnach id (dla prostoty w dalszym ci gu b dziemy je nazywa po prostu kluczami id ). W rzeczywisto ci obydwa typy kluczy maj swoje s abe i mocne strony, w a nie im po wi cimy znacz c cz tego rozdzia u. Poka emy m.in., jak za pomoc wtyczek pogodzi mo na klucze naturalne z konwencjami Rails; nast pnie zademonstrujemy, jak mo na zje przys owiowe ciastko i mie je nadal, czyli jak pogodzi klucze definiowane przez programistów ze standardowymi kluczami opartymi na kolumnach id. Jak si ostatecznie oka e, wszystko to osi gn mo na za cen umiarkowanego wysi ku programisty. Przeanalizujmy zatem najpierw zalety, jakimi cechuj si standardowe klucze id. Najbardziej oczywist ich zalet jest natychmiastowa dost pno s zdefiniowane i czekaj na to, by ich u y ; skojarzenia mi dzy tabelami, ustanawiane za pomoc metod has_many, belongs_to 1079 oraz has_and_belongs_to_many, realizowane s w a nie za po rednictwem kluczy id. Ma to niebagatelne znaczenie, gdy trzeba napr dce stworzy niewyszukan, ale jednak dzia aj c aplikacj. Drug kapitaln zalet kluczy id jest fakt, e jako niewchodz ce w sk ad zasadniczej tre ci przechowywanej w rekordzie pozostaj bez zwi zku z edytowaniem tego rekordu; innymi s owy, edycja rekordu nigdy nie powoduje zmiany klucza g ównego. W rezultacie u ytkownik otrzymuje mo liwo nieskr powanego edytowania wszystkich pól. Naruszenie klucza g ównego ma niebagatelne konsekwencje w kontek cie integralno ci referencyjnej, wymaga bowiem zrewidowania wszystkich zale no ci rekordów w innych tabelach od rekordu w a nie zmodyfikowanego. Za ó my na chwil, e pole rating_name pe ni rol klucza g ównego tabeli ratings; dla rekordu, w którym pole to równe jest PG-13, istniej prawdopodobnie skorelowane rekordy w tabeli movies, zawieraj ce w polu rating_id ten e a cuch PG-13. Je eli w tabeli ratings zmieniliby my zawarto rzeczonego pola na PG13, zmuszeni byliby my zrewidowa równie zawarto odpowiednich rekordów w tabeli movies. U ywaj c kluczy id, jeste my wolni od tego problemu, bowiem warto wpisana w pole id s u y wy cznie kojarzeniu rekordów i nie ma adnego powodu, by j w jakikolwiek sposób jawnie zmienia to jest trzecia zaleta wspomnianych kluczy. Wreszcie, kluczom id bardzo atwo zapewni unikalno, bowiem generowanie nast pnej warto ci dla nowo dodawanego rekordu odbywa si automatycznie, na bazie sekwencji definiowanej w schemacie oraz wbudowanego w klasy modelowe mechanizmu serializacji. Dla kluczy naturalnych lista korzy ci nie jest ju tak oczywista, mniej oczywiste bowiem s zasady ich u ywania. W przeciwie stwie do pola id, którego obecno nie budzi adnych w tpliwo ci, nie zawsze da si w schemacie tabeli zidentyfikowa zestaw kolumn, których ( czna) zawarto z natury jest unikalna dla rekordów tej tabeli i mo e ka dy z tych rekordów jednoznacznie identyfikowa. Je eli jednak taki zestaw da si okre li w sposób niebudz cy w tpliwo ci, warto obsadzi go w roli klucza naturalnego, ze wzgl du na wynikaj ce z tego korzy ci dotycz ce zachowania integralno ci danych. Mimo zatem pozornie wi kszej wygody u ywania kluczy id, w pewnych sytuacjach stosowanie kluczy naturalnych jest wysoce uzasadnione, a niekiedy wr cz nieodzowne. Za chwil poka emy, jak zast pienie klucza id kluczem naturalnym pomo e uchroni baz danych przed powstaniem powa nej luki w integralno ci danych luki niemo liwej do wykrycia na poziomie ogranicze wpisanych w schemat bazy. Klucze naturalne korzy ci i k opoty O warto ci kluczy naturalnych niech przekona czytelników konkretny przyk ad, integralnie zwi zany z naszym serwisem obs uguj cym internetow sprzeda biletów. Na rysunku 8.1 widzimy jego fragment tabel movie_showtimes, skorelowan z tabel auditoriums, która z kolei skorelowana jest z tabel theatres. Korelacje te oparte s na standardowych dla Rails kluczach id, zgodnie z poni szymi definicjami w schemacie: movie_showtimes(auditorium_id) references auditorium(id) auditoriums(theatre_id) references theatres(id) Istniej ce niegdy bezpo rednie powi zanie tabeli movie_showtimes z tabel theatres (poprzez klucz obcy theatre_id) zosta o (jak pami tamy z rozdzia u 6.) usuni te ze wzgl du na zachowanie zgodno ci z regu ami trzeciej postaci normalnej i pewn anomali spowodowan 108 Rozdzia 8. Klucze z o one i posta normalna DKNF10 Rysunek 8.1. Po rednie powi zanie tabeli projekcji z tabel kin brakiem tej zgodno ci. Robi c krok w niew tpliwie dobrym kierunku, jednocze nie doprowadzili my do troch dziwnej sytuacji. Otó, odwo anie do kina zwi zanego z konkretn projekcj musi teraz nast powa po rednio poprzez tabel reprezentuj c sale projekcyjne; gdy chcemy uzyska nieskomplikowan w gruncie rzeczy informacj na temat cznej liczby seansów w kinie, w którym wy wietlany jest film reprezentowany przez bie cy rekord z tabeli movie_showtimes, nie mo emy ju napisa po prostu, jak niegdy : select count(*) from movie_showtimes where theatre_id =? lecz musimy troch si pogimnastykowa : select count(*) from auditoriums a, movie_showtimes ms, where ms.auditorium_id = a.id and a.theatre_id =? Mo e wi c usuni cie bezpo redniego powi zania tabel movie_showtimes i theatres by o decyzj zbyt pochopn? Przywró my je wi c (jak na rysunku 8.2), dodaj c do definicji schematu kolejn klauzul : movie_showtimes(theatre_id) references theatres(id) A teraz zobaczmy, jak tym drobnym posuni ciem uczynili my pot n wyrw w spójno ci przechowywanych danych. Przypomnijmy mianowicie opisan w rozdziale 6. anomali polegaj c na tym, e oba odwo ania do tabeli theatres bezpo rednie oraz poprzez tabel auditoriums prowadz do dwóch ró nych kin. Mimo i jest to ewidentna anomalia, z punktu widzenia definicji zawartych w schemacie wszystko jest w porz dku próba zapisania anormalnych danych nie spowoduje wyst pienia wyj tku. Ale to jeszcze nie koniec. Uwa ny czytelnik z pewno ci zauwa y, e maj c mo liwo niezale nego ustanawiania powi za tabeli movie_showtimes z tabelami auditoriums i theatres, mo na doprowadzi do sytuacji, w której odno na sala projekcyjna nie b dzie cz ci odno- nego kina! Spójrzmy na poni sze dane: Klucze naturalne korzy ci i k opoty 10911 Rysunek 8.2. Przywrócone pomocnicze powi zanie tabel movie_showtimes i theatres movies_development=# select id, name from theatres; id name Steller Theatre 2 Old Towne Theatre (2 rows) movies_development=# select * from auditoriums; id theatre_id room seats_available A B 150 (2 rows) movies_development=# select id, movie_id, theatre_id, auditorium_id * from movie_showtimes; id movie_id theatre_id auditorium_id (1 row) Jak wida, rekord tabeli movie_showtimes odwo uje si do sali B (auditorium_id=2) w kinie Steller Theatre (theatre_id=1). Z punktu widzenia poprawno ci odwo a wszystko jest w najlepszym porz dku, s k jednak w tym, e w kinie Steller Theatre nie ma sali B! Zgodnie z zawarto ci tabeli sala B jest cz ci Old Towne Theatre: >> t = Theatre.find_by_name('Steller Theatre') >> puts t.movie_showtimes.first.auditorium.theatre.name => Old Towne Theatre Ponownie, tej nieadekwatnej do stanu faktycznego sytuacji nie jest w stanie zapobiec kontrola integralno ci danych na poziomie schematu bazy. Zaprezentowana anomalia nie wynika bowiem z jakiego b du w systemie korelacji tabel, lecz z niefortunnego wyboru klucza naturalnego. Innymi s owy, mimo i formalnie zachowana zosta a integralno referencyjna surowych danych, o integralno ci dziedziny problemowej nie ma mowy. Wszystko dlatego, e klucz id tabeli auditorium nie zawiera informacji wystarczaj cych dla zachowania adekwatno ci ze stanem rzeczywistym niezb dne zatem staje si u ycie klucza naturalnego. 110 Rozdzia 8. Klucze z o one i posta normalna DKNF12 Wybór kluczy naturalnych Klucz z o ony to mówi c najpro ciej klucz utworzony z kilku kolumn. Okre lenie, które kolumny kwalifikuj si jako kluczowe dla tabeli, ju takie proste nie jest. Gdy zastanowimy si nad warunkami, jaki musi spe nia klucz g ówny, natychmiast oczywisty staje si jeden: klucz ten musi jednoznacznie identyfikowa rekordy tabeli, czyli musi by inny dla ka dego rekordu. Zasada ta dzia a równie w drug stron : je eli w modelu danych istnieje zestaw kolumn, na który (zgodnie z dziedzin problemow ) narzucono ograniczenie unikalno ci, zestaw taki kwalifikuje si do roli klucza g ównego. Je li ponadto unikalno ta wynika wprost z natury samych danych, klucz ten nazywamy kluczem naturalnym. Gdy przyjrzymy si schematowi tabeli auditoriums, szybko spostrze emy, e taki unikalny zestaw tworz dwie kolumny: theatre_id i room. Istotnie, nie ma wi kszego sensu istnieje kilku identycznie nazwanych sal projekcyjnych w tym samym kinie. Ów zestaw stanowi jednocze nie znakomit podstaw odwo ywania si do danej sali projekcyjnej w innych tabelach: odwo anie sala o nazwie A w kinie identyfikowanym przez id=1 brzmi nieco bardziej komunikatywnie ni sala identyfikowana przez id=47. To pierwsze, jako zawieraj ce bardziej naturalne okre lenie sali projekcyjnej, lepiej nadaje si do kontrolowania integralno ci danych od tego drugiego, identyfikuj cego sal projekcyjn wy cznie w sposób wewn trzny, wynikaj cy z sekwencji zwi zanej z tabel. Na rysunku 8.3 widzimy zatem kolejne przeobra enie naszego schematu z tabeli auditoriums usuni ta zosta a kolumna id, jako ju niepotrzebna; spe nian przez ni dot d rol klucza g ównego przej a para kolumn (theatre_id, room). W konsekwencji z tabeli movie_showtimes znikn musi kolumna auditorium_id pe nion dot d przez ni rol klucza obcego przejmuje teraz para (theatre_id, room). Oczywi cie, zmiana ta musi znale swe odzwierciedlenie w definicji schematu zale no mi dzy tabelami theatres, auditoriums i movie_showtimes przedstawia si teraz nast puj co: movie_showtimes(theatre_id) references theatres(id) movie_showtimes(theatre_id, room) references auditoriums(theatre_id, room) auditoriums(theatre_id) references theatres(theatre_id) Rysunek 8.3. Klucz id tabeli auditoriums zast piony przez klucz naturalny Klucze naturalne korzy ci i k opoty 11113 Uaktualniona definicja schematu tabel auditoriums i movie_showtimes widoczna jest na listingu 8.1. Listing 8.1. Efekt zast pienia klucza id kluczem naturalnym w tabeli auditoriums create table auditoriums ( room varchar(64) not null check (length(room) >= 1), theatre_id integer not null references theatres(id), seats_available integer not null, primary key (room, theatre_id) ); create sequence movie_showtimes_id_seq; create table movie_showtimes ( id integer not null default nextval('movie_showtimes_id_seq') movie_id integer not null references movies(id), theatre_id integer not null references theatres(id), room varchar(64) not null, primary key (id), foreign key (theatre_id, room) references auditoriums(theatre_id, room) initially deferred ); W tych warunkach wyst pienie opisanej wcze niej anomalii jest niemo liwe, bo po pierwsze, zawarto pól theatre_id musi by identyczna w rekordach obu tabel movie_showtimes i auditoriums, wykluczone jest wi c wskazanie dwóch ró nych kin; po drugie, jako e kolumny theatre_id i room wyst puj teraz cznie jako identyfikacja sali projekcyjnej, nie jest mo liwe odwo anie si do sali nieistniej cej danym kinie. Siedz c ju na ramionach giganta W rozdziale 4. przedstawiali my ju technologie bazodanowe jako swoistego giganta, stanowi cego solidny fundament dla tworzonego kodu aplikacji aplikacji sadowi cej si na ramionach owego giganta. Giganta, bo dzisiejszy stan wiedzy w tej dziedzinie stanowi dziedzictwo kilkudziesi ciu lat docieka teoretycznych i bada eksperymentalnych. Problematyka normalizacji danych oraz odpowiedniego wyboru kluczy naturalnych przewija si przez szereg publikacji od ponad 25 lat, jest wi c problematyk doskonale rozpoznan i jako taka stanowi doskona y punkt odniesienia dla poczyna programistycznych. W roku 1981 Ronald Fagin z IBM Research Laboratories sformu owa ide postaci normalnej klucza domenowego (DKNF Domain Key Normal Form); w swej publikacji zatytu owanej A Normal Form for Relational Databases That Is Based on Domains and Keys udowodni w sposób formalny, e mo na ca kowicie wyeliminowa rozmaite anomalie w danych (np. takie, jak opisana wcze niej w tym rozdziale), obsadzaj c w charakterze klucza tabeli taki najmniejszy zestaw kolumn, którego unikalno dla poszczególnych rekordów zagwarantowana jest przez natur danych. Ów zestaw mo e jednak mie niekiedy posta pojedynczej kolumny (i cz sto faktycznie ma), mo e te zawiera kilka kolumn, jedno wszak jest pewne: nie istnieje uniwersalny przepis na wybór dobrego klucza naturalnego. Wybór ten musi by wynikiem dog bnej analizy danych przechowywanych w tabeli, a tak e analizy sposobu, w jaki tabela ta wpisuje si w ogólny schemat bazy. 112 Rozdzia 8. Klucze z o one i posta normalna DKNF14 Najlepsze spo ród dost pnych dzi systemy zarz dzania bazami danych stworzone zosta y na bazie wieloletniego dorobku badawczego; nawet koncepcje wydaj ce si dzi nowatorskimi jak wybór wielokolumnowego klucza naturalnego datuj si na wiele lat wstecz, czego przyk adem cytowana publikacja Fagina. I cho nie wydaje si to niczym niezwyk ym, nieco zaskakuj cy jawi si zupe ny brak wsparcia ze strony Rails dla wielu kluczowych koncepcji w tej dziedzinie. W konsekwencji wielu programistów, dla których Rails jest podstawowym (lub jedynym) rodowiskiem pracy, sk onnych jest uwa a te koncepcje za niezbyt istotne, bo skoro brak ich obs ugi w tak popularnym rodowisku, to widocznie nie s specjalnie potrzebne. Co wi cej, je li Rails stanowi dla nich pierwsz okazj kontaktu z bazami danych w ogóle, by mo e nie wyobra aj sobie innych kluczy g ównych ni klucze id szczególnie kluczy domenowych. Mamy nadziej, e przeczytanie tego rozdzia u pomo e uchroni czytelników przed t niewiedz. Migracja do postaci normalnej DKNF Normalizowanie schematu do postaci DKNF mo e by uci liwym zadaniem. Z naszym schematem b dzie troch atwiej, bo sprowadzili my go ju do trzeciej postaci normalnej. Przeanalizujmy zatem natur danych w poszczególnych tabelach i charakter powi za mi dzy tymi tabelami. W tabeli auditoriums zast pili my ju klucz id kluczem naturalnym. Kolejny krok to zdecydowanie, które z tabel kwalifikuj si do posiadania jednokolumnowych kluczy naturalnych; b d w ród nich takie, w których uzasadnione b dzie pozostawienie standardowego klucza id, oraz takie, w których klucz ten tworzy b dzie kolumna zawieraj ca rzeczywiste dane. Pó niej zajmiemy si kluczami z o onymi (wielokolumnowymi) i ich implementacj w Rails za pomoc dedykowanej wtyczki. Na przyk adzie tabeli movie_showtimes poka emy tak e, jakie nowe problemy mog pojawi si w zwi zku z u ywaniem kluczy naturalnych i jak mo na je z agodzi, tworz c swoiste rozwi zanie hybrydowe, sprowadzaj ce si do wspó egzystencji tych kluczy ze standardowymi dla Rails kluczami id. Klucze jednokolumnowe Jednokolumnowe klucze g ówne zdefiniowane zosta y dla tabel movies, payment_types, orders, purchased_tickets, zip_codes i ratings. Klucze jednokolumnowe posiada wi c wi kszo tabel i jest to sytuacja typowa dla wi kszo ci schematów by mo e okoliczno ta t umaczy fakt, e w Rails jedynie takim kluczom zapewniono standardow obs ug. eby zdecydowa, czy dla danej tabeli wystarczaj cy jest jednokolumnowy klucz b d cy w istocie arbitralnie wybieran liczb ca kowit, nale y spróbowa znale w schemacie tej tabeli kolumn, której charakter decyduje o jej unikalno ci, za unikalno z kolei kwalifikuje kolumn do roli klucza naturalnego. W tabelach widocznych na rysunku 8.4 wyró niono takie kolumny kursyw (pogrubion czcionk oznaczone s kolumny id jako bazowe dla istniej cych kluczy naturalnych). Ostatecznie wi c okazuje si, e tabele zip_codes, ratings i orders posiadaj takie unikalne kolumny, odpowiednio, zip, rating_name i confirmation_code. Oznacza to, e rekordy tych tabel mog by jednoznacznie identyfikowane na dwa ró ne sposoby, cho prawd mówi c nie jest to fakt zbyt istotny; wa ne jest natomiast to, i ka da z owych unikalnych Siedz c ju na ramionach giganta 11315 Rysunek 8.4. Tabele posiadaj ce standardowe klucze id kolumn (posiadaj ca intuicyjn nazw ) mo e po prostu zast pi odno n kolumn id. Z perspektywy Rails typ danych przechowywanych w kolumnie klucza naturalnego jest w zasadzie oboj tny, je eli jednak nie jest to arbitralnie generowana liczba ca kowita, sami musimy zadba o generowanie unikalnych warto ci dla nowo tworzonych rekordów. Je eli ponadto nazwa kolumny tworz cej klucz naturalny jest inna ni id, musimy nazw t jawnie wskaza w klasie modelowej jako parametr wywo ania metody set_primary_key. Jak ju wspominali my w rozdziale 7., w tabeli zip_codes tak kolumn jest kolumna zip. W tabeli ratings funkcj klucza naturalnego mog aby pe ni kolumna rating_name. Obie te tabele s o tyle atwiejsze w obs udze pod wzgl dem niestandardowych kluczy g ównych e s tabelami dziedzinowymi: ich zawarto prawdopodobnie nie b dzie si zmienia, a je eli nawet, to na pewno bardzo rzadko. Dotyczy to szczególnie tabeli ratings, dla której w klasie modelowej zdefiniowano zestaw sta ych reprezentuj cych poszczególne warto ci potencjalnego klucza. Dla obu tabel nie definiowali my adnego interfejsu umo liwiaj cego operowanie danymi, wi c wszelkie modyfikacje i dodawanie nowych rekordów odbywa si b d poza warstw aplikacyjn, ergo nie istnieje problem generowania ad hoc unikalnych warto ci dla klucza w nowych rekordach. Ostatecznie eliminujemy z tabeli ratings pole id, obsadzaj c w roli klucza g ównego kolumn rating_name, tak jak na rysunku 8.5. Rysunek 8.5. Tabele dziedzinowe z niestandardowymi kluczami g ównymi W tabeli orders zawarto pola confirmation_code, b d c w istocie kodem autoryzacyjnym transakcji, równie mo na przyj jako niezmienn. Je li obsadzimy j w roli klucza g ównego, zamiast kolumny id, przejmiemy na siebie obowi zek generowania jej unikalnej zawarto ci która i tak jest generowana dla ka dej transakcji, problem wi c rozwi zuje si sam. Najbardziej odpowiednim miejscem dla dokonywania tego generowania jest metoda before_create klasy modelowej Order; nowa warto b dzie po prostu odwzorowaniem mieszaj cym (hash) 114 Rozdzia 8. Klucze z o one i posta normalna DKNF16 kolejnej warto ci sekwencyjnej, jaka zosta aby przypisana polu id w nowym rekordzie 1. Przy okazji zwracamy uwag na kolejny, niezwykle istotny fakt: mimo e kolumna tworz ca klucz g ówny nie nosi ju nazwy id, na poziomie klasy modelowej nadal jest ona reprezentowana przez w a ciwo id, st d wyra enie self.id w poni szym fragmencie, stanowi ce w istocie odwo- anie do kolumny confirmation_code, nie jest pomy k. class Order < ActiveRecord::Base set_primary_key :confirmation_code has_many :purchased_tickets, :foreign_key => 'order_confirmation_code' def before_create next_ordinal_id = Order.connection.select_value( "select nextval('orders_id_seq')" ) self.id = next_ordinal_id.crypt("conf_code") end end atwo si przekona, e dodawanie nowych rekordów do tabeli orders odbywa si ca kowicie poprawnie w polu confirmation_code zapisywany jest ma o czytelny, lecz unikalny kod: >> o = Order.create({:movie_showtime_id => 1, :purchaser_name => 'Ja Fasola' }) => #<Order:0x2553af0> >> o.id => "CotW6pp1X6z7o" Tworzenie rekordów zale nych tak e nie stanowi problemu: >> o.purchased_tickets << PurchasedTicket.new(:purchase_price_cents => 650) => #<PurchasedTicket:0x25166c8> o.confirmation_code => "CotW6pp1X6z7o" Zdefiniowanie klucza g ównego jako klucza naturalnego, zamiast standardowego klucza id, daje wiele dodatkowych korzy ci, z których jedn wyja nimy na przyk adzie konkretnego powi zania. Na rysunku 8.6 widzimy tabele orders i purchased-tickets, powi zane na dwa ró ne sposoby: za pomoc klucza id tabeli orders (w lewej cz ci) oraz przy u yciu klucza naturalnego tej tabeli (z prawej). W tym drugim przypadku klucz g ówny tej tabeli jest nie tylko unikaln, beznami tn warto ci zapewniaj c jednoznaczne identyfikowanie rekordów, lecz równie niesie ze sob konkretn informacj, jak jest kod autoryzacyjny transakcji. Poniewa klucz g ówny tabeli orders ma swój odpowiednik w postaci klucza obcego, jakim jest pole order_confirmation_code tabeli purchased_tickets, wi c owa konkretna informacja przemycona zosta a mimowolnie do tej e tabeli. W efekcie dla konkretnego rekordu reprezentuj cego sprzedany bilet informacja o kodzie autoryzacyjnym transakcji sprzeda y obecna jest wprost w tym e rekordzie; w uk adzie z lewej strony rysunku informacja ta dost pna jest tylko po rednio, poprzez klucz obcy order_id odsy aj cy do odpowiedniego rekordu w tabeli orders. Dla tabel theatres i movies nie istniej adne przes anki do definiowania kluczy naturalnych, dla nich pozostawiamy zatem standardowe klucze g ówne id. 1 Zwracamy uwag, e klauzula nextval, wyznaczaj ca kolejn warto wynikaj c ze zdefiniowanej sekwencji, jest klauzul specyficzn dla PostgreSQL. Na poziomie klasy modelowej generowanie kolejnych warto ci sekwencyjnych wykonywane jest przez metod next_sequence_value, dzia aj c niezale nie od konkretnego systemu bazy danych; niestety, poprawne dzia anie tej metody w kontek cie PostgreSQL wymaga zainstalowania poprawki do Rails, dost pnej na stronie W kontek cie Oracle funkcja ta natomiast spisuje si bezproblemowo. Siedz c ju na ramionach giganta 11517 Rysunek 8.6. Dwa ró ne powi zania tabel orders i purchased-tickets, na podstawie klucza id oraz na podstawie klucza naturalnego Klucze wielokolumnowe i ich implementacja w Rails Mimo i Rails nie zapewnia standardowo obs ugi g ównych kluczy wielokolumnowych, istniej dwa sposoby osi gni cia korzy ci wynikaj cych z u ywania takich kluczy. Pierwszy z nich sprowadza si do wykorzystania pewnej dedykowanej wtyczki, drugi zasadza si na wspó istnieniu g ównych kluczy wielokolumnowych ze standardowymi kluczami id. Obs uga kluczy z o onych za pomoc dedykowanej wtyczki Tytu owa wtyczka dost pna jest na stronie wraz z niezb dn dokumentacj. Zainstalowanie wtyczki jako gemu odbywa si w zwyk y sposób: ruby gem install composite_primary_keys Nale y jeszcze do czy na ko cu pliku config/environment.rb instrukcj : require 'composite_primary_keys' Na gruncie klasy modelowej metoda definiuj ca z o ony klucz g ówny nosi nazw set_primary_keys co jest liczb mnog set_primary_key: class Auditorium < ActiveRecord::Base # musimy jawnie zdefiniowa nazw tabeli, bo regu y infleksji Rails # zawodz w tym przypadku set table_name 'auditoriums' set_primary_keys :room :theatre_id belongs_to :theatre has_many :movie_showtimes, :dependent => :destroy end W powi zanej klasie modelowej wielokolumnowy klucz obcy reprezentowany jest w postaci tablicy kolumn, przekazywanej jako warto parametru :foreign_key: 116 Rozdzia 8. Klucze z o one i posta normalna DKNF18 class MovieShowtime < ActiveRecord::Base belongs_to :movie belongs_to :theatre belongs_to :auditorium, :foreign_key => [:room, :theatre_id] end Klasy modelowe korzystaj ce z wielokolumnowych kluczy g ównych nie wymagaj adnego specjalnego traktowania. Tak jak w poni szym przyk adzie, tworzenie obiektu klasy Auditorium odbywa si w zwyk y sposób, podobnie pisz c obiekt klasy MovieShowtime, nie musimy jawnie specyfikowa poszczególnych elementów klucza obcego, wystarczy powo anie si na powi zany obiekt, reszt za atwi mechanizmy zainstalowanej wtyczki. m = Movie.create!( :name => 'Casablanca', :length_minutes => 120, :rating => Rating::PG13) t = Theatre.create!( :name => 'Kendall Cinema' :phone_number => ' ') a = Auditorium.create!( :theatre => t, :room => '1' :seats_available => 100) ms = MovieShowtime.create!( :movie -> m, :theatre => t, :auditorium => a, :start_time => Time.new) Model hybrydowy id-dknf Zajmijmy si teraz tabel movie_showtimes. Po przeanalizowaniu przeznaczenia tabeli (ka dy rekord reprezentuje jedn projekcj filmu) i znaczenia poszczególnych kolumn dochodzimy do wniosku, e kolumny (movie_id, theatre_id, room i start_time) tworz minimalny 2 zestaw unikalno ci, który tym samym kwalifikuje si do roli klucza g ównego. Teoretycznie, unikalno tego zestawu nie wyczerpuje mo liwo ci ogranicze narzuconych na zawarto tabeli, nie wynika z niej bowiem oczywisty fakt, e w konkretnej sali projekcyjnej wy wietlanie kolejnego filmu mo e zacz si dopiero po zako czeniu emisji poprzedniego; tego rodzaju ograniczeniami zajmiemy si dopiero w nast pnym rozdziale. Unikalno pewnego zestawu kolumn stanowi niew tpliwie warunek konieczny, by mo na by o obsadzi ów zestaw w roli klucza g ównego, nie zawsze jednak jest to warunek wystarczaj cy; jak za chwil zobaczymy, korzystanie z kluczy naturalnych mo e by przyczyn powa nych problemów, niweluj cych ewentualne korzy ci i sprawiaj cych, e przys owiowa skórka staje si niewarta wyprawki. Je eli przyjmiemy wspomniany zestaw kolumn jako klucz g ówny tabeli movie_showtimes, w powi zanej z ni tabeli orders w polu start_time, wchodz cym w sk ad klucza obcego, pojawi si informacja o czasie rozpocz cia projekcji. Zdarza si, e (z ró nych przyczyn) czas ten ulega zmianie; klienci, którzy zakupili ju bilety na konkretn godzin, z regu y akceptuj tak zmian, a ci, którym ona nie odpowiada, mog bilet zwróci. 2 Minimalny, bo usuni cie którejkolwiek kolumny z zestawu pozbawi go cechy unikalno ci przyp. t um. Siedz c ju na ramionach giganta 11719 Z perspektywy integralno ci referencyjnej danych zgromadzonych w bazie sprawa jednak nie wygl da tak prosto, bowiem nie nale y modyfikowa klucza rekordu, dla którego w innych tabelach istniej rekordy zale ne. Dla rekordu z tabeli movie_showtimes mog istnie rekordy w tabeli orders, te za mog odwo ywa si do swych rekordów zale nych w tabeli purchased_tickets. Niezbyt spektakularne wydarzenie, jakim jest zmiana rozpocz cia emisji filmu, w prze o eniu na konkretne operacje bazodanowe musia oby obejmowa kolejno: 1. Usuni cie zale nych rekordów z tabeli purchased_tickets. 2. Usuni cie zale nych rekordów z tabeli orders. 3. Usuni cie rekordu z tabeli movie_showtimes. 4. Utworzenie nowego rekordu w tabeli movie_showtimes, z now warto ci w polu start_ time. 5. Odtworzenie rekordów usuni tych w punkcie 2., z now warto ci w polu start_time. 6. Odtworzenie rekordów usuni tych w punkcie 1. To jeszcze nie wszystko. Otó, ActiveRecord nie daje standardowo adnej mo liwo ci modyfikowania klucza g ównego rekordu, modyfikacj tak mo na jednak przeprowadzi za pomoc bezpo redniego odwo ania do j zyka SQL. Istniej jednak programi ci wysokopoziomowi, których sam skrót SQL przyprawia o palpitacj serca, wi c z my l o nich zaproponujemy teraz rozwi zanie kompromisowe. Nie by oby ca ego zamieszania, gdyby kluczem g ównym tabeli movie_showtimes by standardowy klucz id. Pozostawimy go zatem w roli klucza g ównego, jednocze nie zrzucaj c na barki warstwy aplikacyjnej (czyli klas modelowych) zadanie utrzymywania spójno ci mi dzy tabelami movie_showtimes i orders na poziomie klucza naturalnego tej ostatniej, czyli (mówi c po prostu) nadawania odpowiednich warto ci polom movie_id, theatre_id, room i start_time nowo tworzonych rekordów tabeli orders; sytuacj t przedstawiono na rysunku 8.7. Z punktu widzenia integralno ci referencyjnej, zmiana warto ci pola start_time w rekordzie tabeli movie_showtimes nie stanowi w tym stanie rzeczy ingerencji w klucz g ówny i mo e by wykonana na poziomie Rails w zwyk y sposób; oczywi cie, na poziomie klasy modelowej nale y jednak zadba o stosown modyfikacj pola start_time w powi zanym rekordzie tabeli orders. Tak oto uda o nam si pogodzi dwie (pozorne, jak wida ) sprzeczno ci: zapewnienie korzy ci wynikaj cych z u ywania kluczy naturalnych oraz zachowanie mo liwo ci nieskr powanego modyfikowania tych pól rekordu, które zawieraj rzeczywist informacj. Rysunek 8.7. Wspó istnienie dwóch powi za mi dzy tabelami movie_showtimes i orders, poprzez klucz id oraz klucz naturalny 118 Rozdzia 8. Klucze z o one i posta normalna DKNF20 Zwracamy uwag na jeszcze jeden istotny fakt: przy definiowaniu skojarze mi dzy tabelami na poziomie schematu bazy danych, w instrukcji foreign key zestaw kolumn kluczowych tabeli docelowej (w parametrze references) musi by w definicji tej tabeli obj ty klauzul unikalno ci. Brak tej klauzuli mo e stwarza ryzyko niejednoznacznego wi zania wspomniany zestaw identyfikowa mo e nie jeden, lecz kilka rekordów. Ten ewidentny b d logiczny jest jednak tolerowany przez MySQL, próba jego pope nienia w PostgreSQL powoduje natomiast sygnalizacj b du: movies_development=# alter table orders add constraint movie_showtimes_movie_theatre_room_start_time_fkey foreign key (movie_id, theatre_id, room, start_time) references movie_showtimes(movie_id, theatre_id, room, start_time) ERROR: there is no unique constraint matching given keys for referenced table "movie_showtimes" Ponadto zdefiniowanie pewnego zestawu kolumn jako unikalnego spowoduje, e PostgreSQL automatycznie za o y indeks na bazie tego zestawu, dzi ki czemu poszukiwanie rekordu o danym kluczu naturalnym odbywa si b dzie niemal b yskawicznie. Uzupe nijmy zatem definicj tabel movie_showtimes i orders o niezb dne elementy wspomnian klauzul unikalno ci i definicj klucza obcego: create sequence movie_showtimes_id_seq; create table movies_showtimes ( id integer not null default nextval('movie_showtimes_id_seq'), movie_id integer not null references movies(id), theatre_id integer not null references theatres(id), room varchar(64) not null, start_time timestamp with time zone not null, primary key (id), unique (movie_id, theatre_id, room, start_time), foreign key (theatre_id, room) references auditoriums(theatre_id, room) intially deferred ); create sequence orders_id_seq; create table orders ( confirmation_code varchar(16) not null check(length(confirmation_code) > 0), movie_showtime_id integer not null references movie_showtimes(id), movie_id integer not null, room varchar(64) not null, start_time timestamp with time zone, purchaser_name varchar(128) not null check (length(purchaser_name) > 0), primary key (confirmation_code), foreign key (movie_id, theatre_id, room, start_time) references movie_showtimes(movie_id, theatre_id, room, start_time) ) inherits (addresses); Uproszczenie dzi ki nowej metodzie create! Jedn z uci liwo ci opisanego modelu hybrydowego jest konieczno jawnego przypisywania warto ci kolumnom wchodz cym w sk ad klucza naturalnego w nowo tworzonych rekordach zale nych. Pozornie poprawny kod: o = Order.create!( :movie_showtime => ms, :purchaser_name => 'Ja Fasola') Siedz c ju na ramionach giganta 11921 nie b dzie funkcjonowa jak nale y, bo przypisanie: :movie_showtime => ms spowoduje zainicjowanie jedynie pola movie_showtime_id, poniewa nie jest aktywna wtyczka composite_primary_keys i Rails honoruje wy cznie klucze id w roli kluczy g ównych. Pozosta e kolumny wchodz ce w sk ad klucza naturalnego nale y zainicjowa explicite: o = Order.create!( :movie_showtime => ms, :movie => ms.movie, :auditorium => ms.auditorium, :start_time => ms.start_time, :purchaser_name => 'Ja Fasola') Zauwa my, e nie jest konieczne przypisywanie warto ci polu theatre_id, zostanie ono bowiem zainicjowane w ramach przypisania :auditorium => ms.auditorium, ze wzgl du na posta klucza g ównego tabeli auditoriums. Na szcz cie, mo na sobie nieco u atwi programistyczny ywot, za pomoc drobnego zabiegu sprawiaj cego, e Rails wykona automatycznie rzeczone przypisania w ramach instrukcji :movie_showtime => ms, analogicznie jak w przypadku u ywania wtyczki composite_primary_keys. Jak si czytelnicy zapewne domy laj, nale y w tym celu przedefiniowa odpowiednio metod movie_showtime=. Poniewa jednak jej nowa wersja odwo ywa si b dzie do wersji dotychczasowej, nale y t ostatni najpierw przemianowa, definiuj c jej alias: class Order < ActiveRecord::Base alias :old_movie_showtime= :movie_showtime= def movie_showtime=(ms) self.movie_id = ms.movie_id self.theatre_id = ms.theatre_id self.room = ms.room self.start_time = ms.start_time self.old_movie_showtime=(ms) end end Odroczona kontrola integralno ci referencyjnej Ingerowanie w zawarto kolumny wchodz cej w sk ad klucza g ównego mo e powodowa zerwanie relacji mi dzy powi zanymi rekordami, naruszenie integralno ci referencyjnej i w konsekwencji zg oszenie wyj tku przez system bazy danych. Mo e si tak sta np. wskutek zmiany godziny rozpocz cia emisji filmu, na któr to emisj sprzedane zosta y ju bilety: def = Movie.create!( :name => 'Casablanca', :length_minutes => 120, :rating => = Theatre.create!( :name => 'Kendall Cinema', :phone_number => = Auditorium.create!( :theatre :auditorium :seats_available => = MovieShowtime.create!( :movie :theatre :auditorium :start_time => Time.new) 120 Rozdzia 8. Klucze z o one i posta normalna DKNF22 @o = Order.create!( :movie_showtime :movie :theatre :auditorium :start_time :purchaser_name => 'Ja Fasola') end def test_deferrable_constraints MovieShowtime.transaction + Order.update_all(["start_time ["movie_showtime_id ]) end end Oczywi cie, powy szy test za amie si, poniewa wyró niona instrukcja spowoduje naruszenie integralno ci referencyjnej: ChakBookPro:chapter-7-dknf chak$ ruby test/unit/movie_showtime_test_case.rb Loaded suite test/unit/movie_showtime_test_case Started... Finished in second. 1) Error: test_deferrable_constraints(movieshowtimetestcase): ActiveRecord::StatementInvalid: PGError: ERROR: update or delete on table "movie_showtimes" violates foreign key constraint "orders_ovie_id_fkey" on table "orders" DETAIL: Key (movie_id,theatre_id,room,start_time)= (20,20,1, :53: ) is still referenced from table "orders". : UPDATE movie_showtimes SET "start_time" = ' :53: ', "theatre_id" = 20, "movie_id" = 20, "room" = '1' WHERE "id" = 20 1 tests, 0 assertions, 0 failures, 1 errors Wynika st d, e aby naruszenie klucza naturalnego by o w ogóle mo liwe, baza danych musi sta si nieco bardziej wyrozumia a pod wzgl dem kontroli integralno ci referencyjnej i pozwoli na odst pstwo od zasad tej e integralno ci cho na chwil. Istotnie, mo liwe jest uzyskanie takiej wyrozumia o ci na chwil oznacza w tym przypadku do momentu zatwierdzenia transakcji, wewn trz transakcji kontrola integralno ci referencyjnej, wynikaj cej z okre lonego klucza, jest zawieszona. W celu uzyskania tego stanu rzeczy nale y w instrukcji foreign key (w schemacie tabeli) umie ci klauzul initially deferred: create table orders ( confirmation_code varchar(16) not null check(length(confirmation_code) > 0), movie_showtime_id integer not null references movie_showtimes(id), movie_id integer not null, room varchar(64) not null, start_time timestamp with time zone, purchaser_name varchar(128) not null check (length(purchaser_name) > 0), primary key (confirmation_code), foreign key (movie_id, theatre_id, room, start_time) references movie_showtimes(movie_id, theatre_id, room, start_time) initially deferred ) inherits (addresses); Po tej drobnej, acz istotnej modyfikacji test zostanie zaliczony: Siedz c ju na ramionach giganta 12123 ChakBookPro:chapter-7-dknf chak$ ruby test/unit/movie_showtime_test_case.rb Loaded suite test/unit/movie_showtime_test_case Started... Finished in second. 1 tests, 0 assertions, 0 failures, 0 errors Odroczenie kontroli integralno ci referencyjnej umo liwia wi c chwilowe naruszenie regu, konieczne do wykonania pewnych operacji; naruszenie to odbywa si w ramach trwaj cej transakcji, nie mo e zatem powodowa trwa ych skutków w istniej cych danych. Przed zatwierdzeniem transakcji konieczne jest przywrócenie absolutnej zgodno ci ze wspomnianymi regu ami. Pewna trudno w testowaniu opisanego odroczenia wi e si z faktem, e (ewentualne) zwi zane z nim b dy ujawniaj si dopiero w momencie zatwierdzania (commit) transakcji. I tu mamy problem, bowiem ka dy przypadek testowy weryfikowany jest w ramach transakcji, która ostatecznie zostaje anulowana (rollback) wszystko po to, by przypadek testowy nie powodowa zmian w danych b d cych przedmiotem zainteresowania kolejnego przypadku testowego. W rezultacie, dla odroczonej kontroli integralno ci referencyjnej nie da si skonstruowa testów negatywnych. Co za co Opisali my trzy ró ne sposoby zapewnienia integralno ci referencyjnej. Podstaw pierwszego z nich s standardowe dla Rails klucze id. Kolumna id pe ni wy cznie rol kluczow i nie reprezentuje adnych tre ci merytorycznych, wskutek czego relacje mi dzy rekordami powi zanych tabel, ca kowicie poprawne z punktu widzenia zgodno ci kluczy, niekoniecznie s poprawne z perspektywy rozwi zywanego problemu, ergo klucze id nie zawsze s wystarczaj ce do zapewnienia integralno ci referencyjnej, co stanowi przes ank do definiowania i u ywania kluczy naturalnych. Opisali my dwa sposoby implementacji kluczy naturalnych na gruncie Rails. Pierwszy z nich opiera si na zastosowaniu dedykowanej wtyczki o nazwie composite_primary_keys, istot drugiego jest jawna obs uga (zdefiniowanych w schemacie bazy) kluczy naturalnych na poziomie klasy modelowej, z zachowaniem standardowego dla Rails wi zania tabel na podstawie kolumn id. Krótk charakterystyk wszystkich trzech rodzajów kluczy zamieszczamy w tabeli 8.1. Tabela 8.1. Podstawowe cechy trzech implementacji kluczy g ównych Wy cznie klucze id Wy cznie klucze naturalne, obs ugiwane za po rednictwem wtyczki Obs uga standardowa Tak Cz ciowo Zapewnienie integralno ci referencyjnej na poziomie dziedziny problemowej Nie Tak Tak Mo liwo zmiany klucza g ównego za po rednictwem API Rails Nie Nie Tak Efektywne wykorzystywanie Tak Tak Nie zawsze indeksów Komplikacja kodu aplikacji Nie Nie Tak Model hybrydowy wspó istnienie kluczy id z kluczami naturalnymi 122 Rozdzia 8. Klucze z o one i posta normalna DKNF24 Po wi cimy nieco uwagi dwóm ostatnim z wymienionych cech: efektywnemu korzystaniu z indeksów oraz komplikacji warstwy aplikacyjnej. Efektywny u ytek z indeksów Jest oczywiste, e dla efektywnego dzia ania modelu hybrydowego konieczne jest istnienie dwóch (co najmniej) indeksów, opartych na (odpowiednio) kolumnie id oraz zestawie kolumn tworz cych klucz naturalny. Oba te indeksy musz by aktualizowane po ka dej operacji dodania, usuni cia lub zmodyfikowania rekordu. Weryfikacja integralno ci referencyjnej po wstawieniu lub zmodyfikowaniu rekordu w tabeli powi zanej wymaga sprawdzenia dwóch indeksów, o ile w ogóle dopuszczamy modyfikowanie klucza naturalnego alternatyw dla modyfikacji kolumn wchodz cych w sk ad klucza naturalnego rekordu jest usuni cie przedmiotowego rekordu i utworzenie nowego ze zmodyfikowanymi warto ciami pól, co opisywali my na przyk adzie tabeli movie_showtimes. Czy ta alternatywa jest lepszym rozwi zaniem zale ne jest to od konkretnego problemu. Zmiana klucza naturalnego, w sytuacji gdy istniej rekordy zale ne od przedmiotowego rekordu, zawsze jest posuni ciem ryzykownym, nale y wi c zastanowi si, czy faktycznie znajduje uzasadnienie w realiach problemu, z którym zwi zane s przetwarzane dane. Komplikacja kodu aplikacji Jedn z najistotniejszych cech j zyka Ruby, i w konsekwencji Rails, jest zwi z o, czyli mo liwo wyra enia tre ciwej informacji w kilku zaledwie wierszach kodu. Wszystko, co odbywa si ze szkod dla tej zwi z o ci, traktowane bywa przez programistów jak przekle stwo. Jak ma si to do opisywanych implementacji kluczy naturalnych? Jak widzieli my, korzystanie z wtyczki composite_primary_keys wymaga niewielkiego narzutu ze strony kodowania wszystko sprowadza si do wywo ania metody set_primary_keys w przedmiotowej klasie modelowej i specyfikacji dodatkowego parametru (:foreign_key) w klasach powi zanych. W modelu hybrydowym nie pojawiaj si adne dodatkowe definicje, za to wobec faktu, e Rails nie jest w ogóle wiadom istnienia klucza naturalnego, musimy we w asnym zakresie implementowa powi zania mi dzy rekordami na poziomie tego klucza. Wymaga to dodatkowego kodu, którego rozmiary mo na jednak zredukowa, nadpisuj c metod create! tworz c obiekt klasy modelowej co zaprezentowali my na przyk adzie klasy Order. I cho nie jest to naddatek spektakularny, warto wzi go pod uwag, decyduj c si na zastosowanie modelu hybrydowego zamiast czystych kluczy naturalnych. Aktualna posta naszego modelu, po modyfikacjach opisanych w niniejszym rozdziale, widoczna jest na rysunku 8.8. wiczenia 1. Spróbuj doprowadzi do anomalii opisywanej na pocz tku rozdzia u (odwo anie do sali projekcyjnej nieistniej cej w konkretnym kinie) i postaraj si udowodni, e przy odpowiednio wybranym kluczu naturalnym jej wyst pienie jest niemo liwe. 2. Podaj przyk ady zapyta, których realizacja staje si efektywniejsza wskutek powi zania tabel movie_showtimes i orders za pomoc klucza naturalnego. wiczenia 12325 Rysunek 8.8. Rezultat wprowadzenia kluczy naturalnych do modelu Refaktoryzacja 1. Przeanalizuj ka d tabel i zastanów si, czy istniej w niej kolumny niewchodz ce w sk ad klucza g ównego, dla których zdefiniowana jest klauzula unikalno ci b d te klauzul tak powinno si zdefiniowa ze wzgl du na charakter danych reprezentowanych przez te kolumny. 2. Je eli jaka kolumna (lub zestaw kolumn) kwalifikuje si do opatrzenia klauzul unikalno ci, zrób to: create unique index concurrently <nazwa tabeli>, <nazwa kolumny 1 >_<nazwa kolumny 2 >_...<nazwa kolumny N >_uniq_idx on nazwa tabeli(<nazwa kolumny 1 >, <nazwa kolumny 2 >,..., <nazwa kolumny N >); 3. Zale nie od tego, czy w punkcie 2. mowa jest o pojedynczej kolumnie, czy o zestawie kolumn, wybierz jeden z poni szych scenariuszy. Klucz jednokolumnowy 1. W klasie modelowej reprezentuj cej tabel wska kolumn stanowi c kandydata na nowy klucz g ówny: set_primary_key :<nazwa kolumny kluczowej> 124 Rozdzia 8. Klucze z o one i posta normalna DKNF Pokazać jeszcze
Projektowanie bazy danych Pierwszą fazą tworzenia projektu bazy danych jest postawienie definicji celu, założeo wstępnych i określenie podstawowych funkcji aplikacji. Każda baza danych jest projektowana Bardziej szczegółowo Instalacja. Zawartość. Wyszukiwarka. Instalacja... 1. Konfiguracja... 2. Uruchomienie i praca z raportem... 4. Metody wyszukiwania...
Zawartość Instalacja... 1 Konfiguracja... 2 Uruchomienie i praca z raportem... 4 Metody wyszukiwania... 6 Prezentacja wyników... 7 Wycenianie... 9 Wstęp Narzędzie ściśle współpracujące z raportem: Moduł Bardziej szczegółowo SIECI KOMPUTEROWE I BAZY DANYCH
KATEDRA MECHANIKI I ROBOTYKI STOSOWANEJ WYDZIAŁ BUDOWY MASZYN I LOTNICTWA, POLITECHNIKA RZESZOWSKA SIECI KOMPUTEROWE I BAZY DANYCH Laboratorium DB2: TEMAT: Relacyjne bazy danych Cz. I - III Cel laboratorium Bardziej szczegółowo Bazy danych. Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl www.uj.edu.pl/web/zpgk/materialy 9/15
Bazy danych Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl www.uj.edu.pl/web/zpgk/materialy 9/15 Przechowywanie danych Wykorzystanie systemu plików, dostępu do plików za pośrednictwem systemu operacyjnego Bardziej szczegółowo Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x
Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x Wersja 02 Styczeń 2016 Centrum Elektronicznych Usług Płatniczych eservice Sp. z o.o. Spis treści 1. Wstęp... 3 1.1. Przeznaczenie dokumentu... Bardziej szczegółowo DE-WZP.261.11.2015.JJ.3 Warszawa, 2015-06-15
DE-WZP.261.11.2015.JJ.3 Warszawa, 2015-06-15 Wykonawcy ubiegający się o udzielenie zamówienia Dotyczy: postępowania prowadzonego w trybie przetargu nieograniczonego na Usługę druku książek, nr postępowania Bardziej szczegółowo Regu g l u a l min i n w s w pó p ł ó p ł r p acy O ow o iązuje od dnia 08.07.2011
Regulamin współpracy Obowiązuje od dnia 08.07.2011 1 1. Wstęp Regulamin określa warunki współpracy z firmą Hubert Joachimiak HubiSoft. W przypadku niejasności, prosimy o kontakt. Dane kontaktowe znajdują Bardziej szczegółowo Ogólna charakterystyka kontraktów terminowych
Jesteś tu: Bossa.pl Kurs giełdowy - Część 10 Ogólna charakterystyka kontraktów terminowych Kontrakt terminowy jest umową pomiędzy dwiema stronami, z których jedna zobowiązuje się do nabycia a druga do Bardziej szczegółowo Zamawiający potwierdza, że zapis ten należy rozumieć jako przeprowadzenie audytu z usług Inżyniera.
Pytanie nr 1 Bardzo prosimy o wyjaśnienie jak postrzegają Państwo możliwość przeliczenia walut obcych na PLN przez Oferenta, który będzie składał ofertę i chciał mieć pewność, iż spełnia warunki dopuszczające Bardziej szczegółowo Archiwum Prac Dyplomowych
Archiwum Prac Dyplomowych Instrukcja dla studentów Ogólna procedura przygotowania pracy do obrony w Archiwum Prac Dyplomowych 1. Student rejestruje pracę w dziekanacie tej jednostki uczelni, w której pisana Bardziej szczegółowo Microsoft Management Console
Microsoft Management Console Konsola zarządzania jest narzędziem pozwalającym w prosty sposób konfigurować i kontrolować pracę praktycznie wszystkich mechanizmów i usług dostępnych w sieci Microsoft. Co Bardziej szczegółowo Postanowienia ogólne. Usługodawcy oraz prawa do Witryn internetowych lub Aplikacji internetowych
Wyciąg z Uchwały Rady Badania nr 455 z 21 listopada 2012 --------------------------------------------------------------------------------------------------------------- Uchwała o poszerzeniu możliwości Bardziej szczegółowo System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy
Instrukcja obsługi programu 2.11. Przygotowanie programu do pracy - ECP Architektura inter/intranetowa System Informatyczny CELAB Przygotowanie programu do pracy - Ewidencja Czasu Pracy Spis treści 1. Bardziej szczegółowo Regulamin Zarządu Pogórzańskiego Stowarzyszenia Rozwoju
Regulamin Zarządu Pogórzańskiego Stowarzyszenia Rozwoju Art.1. 1. Zarząd Pogórzańskiego Stowarzyszenia Rozwoju, zwanego dalej Stowarzyszeniem, składa się z Prezesa, dwóch Wiceprezesów, Skarbnika, Sekretarza Bardziej szczegółowo PODSTAWY METROLOGII ĆWICZENIE 4 PRZETWORNIKI AC/CA Międzywydziałowa Szkoła Inżynierii Biomedycznej 2009/2010 SEMESTR 3
PODSTAWY METROLOGII ĆWICZENIE 4 PRZETWORNIKI AC/CA Międzywydziałowa Szkoła Inżynierii Biomedycznej 29/2 SEMESTR 3 Rozwiązania zadań nie były w żaden sposób konsultowane z żadnym wiarygodnym źródłem informacji!!! Bardziej szczegółowo Baza danych. Baza danych jest to zbiór danych powi zanych mi dzy sob pewnymi zale no ciami.
Access Baza danych Baza danych jest to zbiór danych powi zanych mi dzy sob pewnymi zale no ciami. Baza danych sk ada si z danych oraz programu komputerowego wyspecjalizowanego do gromadzenia i przetwarzania Bardziej szczegółowo API transakcyjne BitMarket.pl
API transakcyjne BitMarket.pl Wersja 20140314 1. Sposób łączenia się z API... 2 1.1. Klucze API... 2 1.2. Podpisywanie wiadomości... 2 1.3. Parametr tonce... 2 1.4. Odpowiedzi serwera... 3 1.5. Przykładowy Bardziej szczegółowo INSTRUKCJA TESTOWANIA USŁUG NA PLATFORMIE ELA-ENT
Załącznik nr 1 Siedlce-Warszawa, dn. 16.06.2009 r. Opracowanie: Marek Faderewski (marekf@ipipan.waw.pl) Dariusz Mikułowski (darek@ii3.ap.siedlce.pl) INSTRUKCJA TESTOWANIA USŁUG NA PLATFORMIE ELA-ENT Przed Bardziej szczegółowo WYKAZ ZMIAN W INSTRUKCJI UśYTKOWNIKA KSI
WYKAZ ZMIAN W INSTRUKCJI UśYTKOWNIKA KSI 29 sierpnia 2012 r. WNIOSKI O DOFINANSOWANIE blokada pola Status pole jest blokowane do edycji w chwili utworzenia Umowy/ decyzji o dofinansowaniu dla danego wniosku Bardziej szczegółowo Przypomnienie najważniejszych pojęć z baz danych. Co to jest baza danych?
Przypomnienie najważniejszych pojęć z baz danych. Co to jest baza danych? 1 Podstawowe pojęcia: 2 3 4 5 Dana (ang.data) najmniejsza, elementarna jednostka informacji o obiekcie będąca przedmiotem przetwarzania Bardziej szczegółowo System Zarządzania Relacyjną Bazą Danych (SZRBD) Microsoft Access 2010
System Zarządzania Relacyjną Bazą Danych (SZRBD) Microsoft Access 2010 Instrukcja do zajęć laboratoryjnych Część 1. ĆWICZENIE 1 ZADANIE 1 Utworzyć bazę danych Osoby, składającą się z jednej tabeli o następującej Bardziej szczegółowo System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy
System zarządzania bazą danych (SZBD) Proces przechodzenia od świata rzeczywistego do jego informacyjnej reprezentacji w komputerze nazywać będziemy modelowaniem, a pewien dobrze zdefiniowany sposób jego Bardziej szczegółowo KOMISJA WSPÓLNOT EUROPEJSKICH. Wniosek DECYZJA RADY
KOMISJA WSPÓLNOT EUROPEJSKICH Bruksela, dnia 13.12.2006 KOM(2006) 796 wersja ostateczna Wniosek DECYZJA RADY w sprawie przedłużenia okresu stosowania decyzji 2000/91/WE upoważniającej Królestwo Danii i Bardziej szczegółowo Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, 00-662 Warszawa
Zamawiający: Wydział Matematyki i Nauk Informacyjnych Politechniki Warszawskiej 00-662 Warszawa, ul. Koszykowa 75 Przedmiot zamówienia: Produkcja Interaktywnej gry matematycznej Nr postępowania: WMiNI-39/44/AM/13 Bardziej szczegółowo Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu
Po wejściu na stronę pucharino.slask.pl musisz się zalogować (Nazwa użytkownika to Twój redakcyjny pseudonim, hasło sam sobie ustalisz podczas procedury rejestracji). Po zalogowaniu pojawi się kilka istotnych Bardziej szczegółowo Harmonogramowanie projektów Zarządzanie czasem
Harmonogramowanie projektów Zarządzanie czasem Zarządzanie czasem TOMASZ ŁUKASZEWSKI INSTYTUT INFORMATYKI W ZARZĄDZANIU Zarządzanie czasem w projekcie /49 Czas w zarządzaniu projektami 1. Pojęcie zarządzania Bardziej szczegółowo Mechanizm zawarty w warunkach zamówienia podstawowego. Nie wymaga aneksu do umowy albo udzielenia nowego zamówienia. -
Załącznik nr 1a Lista sprawdzająca dot. ustalenia stosowanego trybu zwiększenia wartości zamówień podstawowych na roboty budowlane INFORMACJE PODLEGAJĄCE SPRAWDZENIU Analiza ryzyka Działanie Uwagi Czy Bardziej szczegółowo Edycja geometrii w Solid Edge ST
Edycja geometrii w Solid Edge ST Artykuł pt.: " Czym jest Technologia Synchroniczna a czym nie jest?" zwracał kilkukrotnie uwagę na fakt, że nie należy mylić pojęć modelowania bezpośredniego i edycji bezpośredniej. Bardziej szczegółowo art. 488 i n. ustawy z dnia 23 kwietnia 1964 r. Kodeks cywilny (Dz. U. Nr 16, poz. 93 ze zm.),
Istota umów wzajemnych Podstawa prawna: Księga trzecia. Zobowiązania. Dział III Wykonanie i skutki niewykonania zobowiązań z umów wzajemnych. art. 488 i n. ustawy z dnia 23 kwietnia 1964 r. Kodeks cywilny Bardziej szczegółowo GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007
GEO-SYSTEM Sp. z o.o. 02-732 Warszawa, ul. Podbipięty 34 m. 7, tel./fax 847-35-80, 853-31-15 http:\\www.geo-system.com.pl e-mail:geo-system@geo-system.com.pl GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Bardziej szczegółowo Program Google AdSense w Smaker.pl
Smaker.pl Program Google AdSense w Smaker.pl Pytania i odpowiedzi dotyczące programu Google AdSense Spis treści Czym jest AdSense... 2 Zasady działania AdSense?... 2 Jak AdSense działa w Smakerze?... 3 Bardziej szczegółowo Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.
Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach. 1 PROJEKTY KOSZTOWE 2 PROJEKTY PRZYCHODOWE 3 PODZIAŁ PROJEKTÓW ZE WZGLĘDU Bardziej szczegółowo STOWARZYSZENIE LOKALNA GRUPA DZIAŁANIA JURAJSKA KRAINA REGULAMIN ZARZĄDU. ROZDZIAŁ I Postanowienia ogólne
Załącznik do uchwały Walnego Zebrania Członków z dnia 28 grudnia 2015 roku STOWARZYSZENIE LOKALNA GRUPA DZIAŁANIA JURAJSKA KRAINA REGULAMIN ZARZĄDU ROZDZIAŁ I Postanowienia ogólne 1 1. Zarząd Stowarzyszenia Bardziej szczegółowo HAŚKO I SOLIŃSKA SPÓŁKA PARTNERSKA ADWOKATÓW ul. Nowa 2a lok. 15, 50-082 Wrocław tel. (71) 330 55 55 fax (71) 345 51 11 e-mail: kancelaria@mhbs.
HAŚKO I SOLIŃSKA SPÓŁKA PARTNERSKA ADWOKATÓW ul. Nowa 2a lok. 15, 50-082 Wrocław tel. (71) 330 55 55 fax (71) 345 51 11 e-mail: kancelaria@mhbs.pl Wrocław, dnia 22.06.2015 r. OPINIA przedmiot data Praktyczne Bardziej szczegółowo Zobacz to na własne oczy. Przyszłość już tu jest dzięki rozwiązaniu Cisco TelePresence.
Informacje dla kadry zarządzającej Zobacz to na własne oczy. Przyszłość już tu jest dzięki rozwiązaniu Cisco TelePresence. 2010 Cisco i/lub firmy powiązane. Wszelkie prawa zastrzeżone. Ten dokument zawiera Bardziej szczegółowo epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji
epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji Projekt współfinansowany ze środków Europejskiego Funduszu Rozwoju Regionalnego w ramach Programu Operacyjnego Innowacyjna Gospodarka Bardziej szczegółowo GENERALNY INSPEKTOR OCHRONY DANYCH OSOBOWYCH
GENERALNY INSPEKTOR OCHRONY DANYCH OSOBOWYCH dr Edyta Bielak-Jomaa Warszawa, dnia 1 kwietnia 2016 r. DOLiS 035 2332/15 Prezydent Miasta K. WYSTĄPIENIE Na podstawie art. 19a ust. 1 ustawy z dnia 29 sierpnia Bardziej szczegółowo Instrukcja Obsługi STRONA PODMIOTOWA BIP
Instrukcja Obsługi STRONA PODMIOTOWA BIP Elementy strony podmiotowej BIP: Strona podmiotowa Biuletynu Informacji Publicznej podzielona jest na trzy części: Nagłówek strony głównej Stopka strony podmiotowej Bardziej szczegółowo Procedura weryfikacji badania czasu przebiegu 1 paczek pocztowych
Procedura weryfikacji badania czasu przebiegu 1 paczek pocztowych Warszawa 2012 (nowelizacja 2014) 1 zmiana nazwy zgodnie z terminologią zawartą w ustawie Prawo pocztowe Jednostka zlecająca: Urząd Komunikacji Bardziej szczegółowo Program szkoleniowy Efektywni50+ Moduł III Standardy wymiany danych
Program szkoleniowy Efektywni50+ Moduł III 1 Wprowadzenie do zagadnienia wymiany dokumentów. Lekcja rozpoczynająca moduł poświęcony standardom wymiany danych. Wprowadzenie do zagadnień wymiany danych w Bardziej szczegółowo Regulamin rekrutacji uczniów do klasy pierwszej Szkoły Podstawowej im. Maksymiliana Wilandta w Darzlubiu. Podstawa prawna: (Dz.U.2014 poz.
Regulamin rekrutacji uczniów do klasy pierwszej Szkoły Podstawowej im. Maksymiliana Wilandta w Darzlubiu Podstawa prawna: Ustawa z dnia 7 września 1991 r. o systemie o światy (Tekst jednolity Dz. U.z 2004 Bardziej szczegółowo Chemoinformatyczne bazy danych - Wprowadzenie do technologii baz danych. Andrzej Bąk
Chemoinformatyczne bazy danych - Wprowadzenie do technologii baz danych Andrzej Bąk Wstęp Zarys Co to jest baza danych? Podstawy teorii baz danych Klasyfikacja baz danych Organizacja danych w relacyjnej Bardziej szczegółowo UCHWAŁ A SENATU RZECZYPOSPOLITEJ POLSKIEJ. z dnia 18 października 2012 r. w sprawie ustawy o zmianie ustawy o podatku dochodowym od osób fizycznych
UCHWAŁ A SENATU RZECZYPOSPOLITEJ POLSKIEJ z dnia 18 października 2012 r. w sprawie ustawy o zmianie ustawy o podatku dochodowym od osób fizycznych Senat, po rozpatrzeniu uchwalonej przez Sejm na posiedzeniu Bardziej szczegółowo Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.
Programowanie II prowadzący: Adam Dudek Lista nr 8 Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to najważniejsza cecha świadcząca o sile programowania Bardziej szczegółowo Stan prac w zakresie wdrożenia systemów operacyjnych: NCTS2, AIS/INTRASTAT, AES, AIS/ICS i AIS/IMPORT. Departament Ceł, Ministerstwo Finansów
Stan prac w zakresie wdrożenia systemów operacyjnych: NCTS2, AIS/INTRASTAT, AES, AIS/ICS i AIS/IMPORT Departament Ceł, Ministerstwo Finansów Usługa e-tranzyt System NCTS 2 Aktualny stan wdrożenia Ogólnopolskie Bardziej szczegółowo 1. Korzyści z zakupu nowej wersji... 2. 2. Poprawiono... 2. 3. Zmiany w słowniku Stawki VAT... 2. 4. Zmiana stawki VAT w kartotece Towary...
Forte Handel 1 / 8 Nowe funkcje w module Forte Handel w wersji 2011a Spis treści: 1. Korzyści z zakupu nowej wersji... 2 2. Poprawiono... 2 Nowe funkcje w module Forte Handel w wersji 2011 Spis treści: Bardziej szczegółowo Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT
Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT Spis treści Instrukcja użytkownika systemu Ognivo2... 3 Opis... 3 Konfiguracja programu... 4 Rejestracja bibliotek narzędziowych... 4 Konfiguracja Bardziej szczegółowo Egzamin na tłumacza przysięgłego: kryteria oceny
Egzamin na tłumacza przysięgłego: kryteria oceny Każdy z czterech tekstów na egzaminie oceniany jest w oparciu o następujące kryteria: 1) wierność tłumaczenia (10 punktów) 2) terminologia i frazeologia Bardziej szczegółowo Objaśnienia do Wieloletniej Prognozy Finansowej na lata 2011-2017
Załącznik Nr 2 do uchwały Nr V/33/11 Rady Gminy Wilczyn z dnia 21 lutego 2011 r. w sprawie uchwalenia Wieloletniej Prognozy Finansowej na lata 2011-2017 Objaśnienia do Wieloletniej Prognozy Finansowej Bardziej szczegółowo KLAUZULE ARBITRAŻOWE
KLAUZULE ARBITRAŻOWE KLAUZULE arbitrażowe ICC Zalecane jest, aby strony chcące w swych kontraktach zawrzeć odniesienie do arbitrażu ICC, skorzystały ze standardowych klauzul, wskazanych poniżej. Standardowa Bardziej szczegółowo Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania).
Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania). W momencie gdy jesteś studentem lub świeżym absolwentem to znajdujesz się w dobrym momencie, aby rozpocząć planowanie swojej ścieżki Bardziej szczegółowo Na podstawie art.4 ust.1 i art.20 lit. l) Statutu Walne Zebranie Stowarzyszenia uchwala niniejszy Regulamin Zarządu.
Na podstawie art.4 ust.1 i art.20 lit. l) Statutu Walne Zebranie Stowarzyszenia uchwala niniejszy Regulamin Zarządu Regulamin Zarządu Stowarzyszenia Przyjazna Dolina Raby Art.1. 1. Zarząd Stowarzyszenia Bardziej szczegółowo Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski
Bazy danych II Andrzej Grzybowski Instytut Fizyki, Uniwersytet Śląski Wykład 11 Zastosowanie PHP do programowania aplikacji baz danych Oracle Wsparcie programowania w PHP baz danych Oracle Oprócz możliwego Bardziej szczegółowo Zabezpieczenie społeczne pracownika
Zabezpieczenie społeczne pracownika Swoboda przemieszczania się osób w obrębie Unii Europejskiej oraz możliwość podejmowania pracy w różnych państwach Wspólnoty wpłynęły na potrzebę skoordynowania systemów Bardziej szczegółowo POMOC PSYCHOLOGICZNO-PEDAGOGICZNA Z OPERONEM. Vademecum doradztwa edukacyjno-zawodowego. Akademia
POMOC PSYCHOLOGICZNO-PEDAGOGICZNA Z OPERONEM PLANOWANIE DZIAŁAŃ Określanie drogi zawodowej to szereg różnych decyzji. Dobrze zaplanowana droga pozwala dojechać do określonego miejsca w sposób, który Ci Bardziej szczegółowo System kontroli wersji SVN
System kontroli wersji SVN Co to jest system kontroli wersji Wszędzie tam, gdzie nad jednym projektem pracuje wiele osób, zastosowanie znajduje system kontroli wersji. System, zainstalowany na serwerze, Bardziej szczegółowo Stanowisko Rzecznika Finansowego i Prezesa Urzędu Ochrony Konkurencji i Konsumentów w sprawie interpretacji art. 49 ustawy o kredycie konsumenckim
Prezes Urzędu Ochrony Konkurencji i Konsumentów Warszawa, 16 maja 2016 r. Stanowisko Rzecznika Finansowego i Prezesa Urzędu Ochrony Konkurencji i Konsumentów w sprawie interpretacji art. 49 ustawy o kredycie Bardziej szczegółowo ZP.271.1.71.2014 Obsługa bankowa budżetu Miasta Rzeszowa i jednostek organizacyjnych
Załącznik nr 3 do SIWZ Istotne postanowienia, które zostaną wprowadzone do treści Umowy Prowadzenia obsługi bankowej budżetu miasta Rzeszowa i jednostek organizacyjnych miasta zawartej z Wykonawcą 1. Umowa Bardziej szczegółowo Kancelaris - Zmiany w wersji 2.50
1. Listy Kancelaris - Zmiany w wersji 2.50 Zmieniono funkcję Dostosuj listę umożliwiając: o Zapamiętanie wielu widoków dla danej listy o Współdzielenie widoków między pracownikami Przykład: Kancelaria Bardziej szczegółowo Regulamin Obrad Walnego Zebrania Członków Stowarzyszenia Lokalna Grupa Działania Ziemia Bielska
Załącznik nr 1 do Lokalnej Strategii Rozwoju na lata 2008-2015 Regulamin Obrad Walnego Zebrania Członków Stowarzyszenia Lokalna Grupa Działania Ziemia Bielska Przepisy ogólne 1 1. Walne Zebranie Członków Bardziej szczegółowo W dobie postępującej digitalizacji zasobów oraz zwiększającej się liczby dostawców i wydawców
W dobie postępującej digitalizacji zasobów oraz zwiększającej się liczby dostawców i wydawców oferujących dostępy do tytułów elektronicznych, zarówno bibliotekarze jak i użytkownicy coraz większą ilość Bardziej szczegółowo Wniosek o ustalenie warunków zabudowy
Wniosek o ustalenie warunków zabudowy Informacje ogólne Kiedy potrzebna jest decyzja Osoba, która składa wniosek o pozwolenie na budowę, nie musi mieć decyzji o warunkach zabudowy terenu, pod warunkiem Bardziej szczegółowo PERSON Kraków 2002.11.27
PERSON Kraków 2002.11.27 SPIS TREŚCI 1 INSTALACJA...2 2 PRACA Z PROGRAMEM...3 3. ZAKOŃCZENIE PRACY...4 1 1 Instalacja Aplikacja Person pracuje w połączeniu z czytnikiem personalizacyjnym Mifare firmy ASEC Bardziej szczegółowo Komentarz do prac egzaminacyjnych w zawodzie technik administracji 343[01] ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJĄCEGO KWALIFIKACJE ZAWODOWE
Komentarz do prac egzaminacyjnych w zawodzie technik administracji 343[01] ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJĄCEGO KWALIFIKACJE ZAWODOWE OKE Kraków 2012 Zadanie egzaminacyjne zostało opracowane Bardziej szczegółowo REGULAMIN. przeprowadzania naboru nowych pracowników do korpusu służby cywilnej w Kuratorium Oświaty w Szczecinie.
Załącznik do zarządzenia Nr 96 /2009 Zachodniopomorskiego Kuratora Oświaty w Szczecinie z dnia 23 września 2009 r. REGULAMIN przeprowadzania naboru nowych pracowników do korpusu służby cywilnej w Kuratorium Bardziej szczegółowo Procedura działania Punktu Potwierdzającego Profile Zaufane epuap Urzędzie Gminy w Ułężu
Załącznik nr 1 do Zarządzenia Wójta Gminy Ułęż nr 21 z dnia 14 maja 2014r. Procedura działania Punktu Potwierdzającego Profile Zaufane epuap Urzędzie Gminy w Ułężu Spis treści Użyte pojęcia i skróty... Bardziej szczegółowo Przygotowały: Magdalena Golińska Ewa Karaś
Przygotowały: Magdalena Golińska Ewa Karaś Druk: Drukarnia VIVA Copyright by Infornext.pl ISBN: 978-83-61722-03-8 Wydane przez Infornext Sp. z o.o. ul. Okopowa 58/72 01 042 Warszawa www.wieszjak.pl Od Bardziej szczegółowo Trwałość projektu co zrobić, żeby nie stracić dotacji?
Trwałość projektu co zrobić, żeby nie stracić dotacji? 2 Osiągnięcie i utrzymanie wskaźników Wygenerowany przychód Zakaz podwójnego finansowania Trwałość projektu Kontrola po zakończeniu realizacji projektu Bardziej szczegółowo Odpowiedzi na pytania zadane do zapytania ofertowego nr EFS/2012/05/01
Odpowiedzi na pytania zadane do zapytania ofertowego nr EFS/2012/05/01 1 Pytanie nr 1: Czy oferta powinna zawierać informację o ewentualnych podwykonawcach usług czy też obowiązek uzyskania od Państwa Bardziej szczegółowo Regulamin korzystania z serwisu http://www.monitorceidg.pl
Regulamin korzystania z serwisu http://www.monitorceidg.pl 1 [POSTANOWIENIA OGÓLNE] 1. Niniejszy regulamin (dalej: Regulamin ) określa zasady korzystania z serwisu internetowego http://www.monitorceidg.pl Bardziej szczegółowo Centrum Informatyki "ZETO" S.A. w Białymstoku. Instrukcja użytkownika dla urzędników nadających uprawnienia i ograniczenia podmiotom w ST CEIDG
Centrum Informatyki "ZETO" S.A. w Białymstoku Instrukcja użytkownika dla urzędników nadających uprawnienia i ograniczenia podmiotom w ST CEIDG BIAŁYSTOK, 12 WRZEŚNIA 2011 ograniczenia podmiotom w ST CEIDG Bardziej szczegółowo 1 Przedmiot Umowy 1. Przedmiotem umowy jest sukcesywna dostawa: publikacji książkowych i nutowych wydanych przez. (dalej zwanych: Publikacjami).
WZÓR UMOWY ANALOGICZNY dla CZĘŚCI 1-10 UMOWA o wykonanie zamówienia publicznego zawarta w dniu.. w Krakowie pomiędzy: Polskim Wydawnictwem Muzycznym z siedzibą w Krakowie 31-111, al. Krasińskiego 11a wpisanym Bardziej szczegółowo Opis zmian funkcjonalności platformy E-GIODO wprowadzonych w związku z wprowadzeniem możliwości wysyłania wniosków bez podpisu elektronicznego
Opis zmian funkcjonalności platformy E-GIODO wprowadzonych w związku z wprowadzeniem możliwości wysyłania wniosków bez podpisu elektronicznego Wstęp. Dodanie funkcjonalności wysyłania wniosków bez podpisów Bardziej szczegółowo Aneks nr 8 z dnia 24.07.2013 r. do Regulaminu Świadczenia Krajowych Usług Przewozu Drogowego Przesyłek Towarowych przez Raben Polska sp. z o.o.
Aneks nr 8 z dnia 24.07.2013 r. do Regulaminu Świadczenia Krajowych Usług Przewozu Drogowego Przesyłek Towarowych przez Raben Polska sp. z o.o. 1 Z dniem 24 lipca 2013 r. wprowadza się w Regulaminie Świadczenia Bardziej szczegółowo WYJASNIENIA I MODYFIKACJA SPECYFIKACJI ISTOTNYCH WARUNKÓW ZAMÓWIENIA
Szczecin dnia 28.07.2015r. Akademia Sztuki w Szczecinie Pl. Orła Białego 2 70-562 Szczecin Dotyczy: Przetarg nieograniczony na dostawę urządzeń i sprzętu stanowiącego wyposażenie studia nagrań na potrzeby Bardziej szczegółowo PL/SQL. Zaawansowane tematy PL/SQL
PL/SQL Zaawansowane tematy PL/SQL Cele Przypomnienie kursorów Przypomnienie procedur i funkcji składowanych Poznanie pakietów składowanych 2 Bazę danych Oracle możemy traktować jakby była złożona z dwóch Bardziej szczegółowo 2.Prawo zachowania masy
2.Prawo zachowania masy Zdefiniujmy najpierw pewne podstawowe pojęcia: Układ - obszar przestrzeni o określonych granicach Ośrodek ciągły - obszar przestrzeni którego rozmiary charakterystyczne są wystarczająco Bardziej szczegółowo Warunki formalne dotyczące udziału w projekcie
Witaj. Interesuje Cię udział w projekcie Trener w rolach głównych. Zapraszamy więc do prześledzenia dokumentu, który pozwoli Ci znaleźć odpowiedź na pytanie, czy możesz wziąć w nim udział. Tym samym znajdziesz Bardziej szczegółowo Umowa o pracę zawarta na czas nieokreślony
Umowa o pracę zawarta na czas nieokreślony Uwagi ogólne Definicja umowy Umowa o pracę stanowi dokument stwierdzający zatrudnienie w ramach stosunku pracy. Według ustawowej definicji jest to zgodne oświadczenie Bardziej szczegółowo Instrukcja instalacji oraz wykorzystania podpisu cyfrowego
Instrukcja instalacji oraz wykorzystania podpisu cyfrowego Poniższy dokument został stworzony w celu zaznajomienia użytkowników komputerów osobistych pracujących w systemie Windows XP z możliwościami wykorzystania Bardziej szczegółowo Zarządzanie Zasobami by CTI. Instrukcja
Zarządzanie Zasobami by CTI Instrukcja Spis treści 1. Opis programu... 3 2. Konfiguracja... 4 3. Okno główne programu... 5 3.1. Narzędzia do zarządzania zasobami... 5 3.2. Oś czasu... 7 3.3. Wykres Gantta... Bardziej szczegółowo Audyt SEO. Elementy oraz proces przygotowania audytu. strona
Audyt SEO Elementy oraz proces przygotowania audytu 1 Spis treści Kim jesteśmy? 3 Czym jest audyt SEO 4 Główne elementy audytu 5 Kwestie techniczne 6 Słowa kluczowe 7 Optymalizacja kodu strony 8 Optymalizacja Bardziej szczegółowo - o zmianie o Krajowym Rejestrze Sądowym
Warszawa, dnia 28 sierpnia, 2012 rok Grupa Posłów na Sejm RP Klubu Poselskiego Ruch Palikota Szanowna Pani Ewa Kopacz Marszałek Sejmu Rzeczypospolitej Polskiej Na podstawie art. 118 ust. 1 Konstytucji Bardziej szczegółowo Automatyczne przetwarzanie recenzji konsumenckich dla oceny użyteczności produktów i usług
Uniwersytet Ekonomiczny w Poznaniu Wydział Informatyki i Gospodarki Elektronicznej Katedra Informatyki Ekonomicznej Streszczenie rozprawy doktorskiej Automatyczne przetwarzanie recenzji konsumenckich dla Bardziej szczegółowo ZASADY REKLAMOWANIA USŁUG BANKOWYCH
Załącznik do uchwały KNF z dnia 2 października 2008 r. ZASADY REKLAMOWANIA USŁUG BANKOWYCH Reklama i informacja reklamowa jest istotnym instrumentem komunikowania się z obecnymi jak i potencjalnymi klientami Bardziej szczegółowo Pierwsze kroki. Krok 1. Uzupełnienie danych własnej firmy
Pierwsze kroki Krok 1. Uzupełnienie danych własnej firmy Przed rozpoczęciem pracy z programem, należy uzupełnić informacje o własnej firmie. Odbywa się to dokładnie tak samo, jak uzupełnianie informacji Bardziej szczegółowo Użytkowanie elektronicznego dziennika UONET PLUS.
Użytkowanie elektronicznego dziennika UONET PLUS. Po wejściu na stronę https://uonetplus.vulcan.net.pl/bialystok i zalogowaniu się na swoje konto (przy użyciu adresu e-mail podanego wcześniej wychowawcy Bardziej szczegółowo Konfiguracja historii plików
Wielu producentów oprogramowania oferuje zaawansowane rozwiązania do wykonywania kopii zapasowych plików użytkownika czy to na dyskach lokalnych czy w chmurze. Warto jednak zastanowić się czy instalacja Bardziej szczegółowo Ostatnia cena sprzeda y klienta 1.0 dodatek do Symfonia Faktura dla 1 firmy
Podr cznik u ytkownika Ostatnia cena sprzeda y klienta 1.0 dodatek do Symfonia Faktura dla 1 firmy Masz pytanie? zadzwo 693 936 046 lub napisz handel@symfoniadodatki.pl SPIS TRE CI 1. Instalacja dodatku Bardziej szczegółowo InsERT GT Własne COM 1.0
InsERT GT Własne COM 1.0 Autor: Jarosław Kolasa, InsERT Wstęp... 2 Dołączanie zestawień własnych do systemu InsERT GT... 2 Sposób współpracy rozszerzeń z systemem InsERT GT... 2 Rozszerzenia standardowe Bardziej szczegółowo PROCEDURA ADMINISTROWANIA ORAZ USUWANIA
Załącznik nr 5 do umowy nr 11/DI/PN/2013 PROCEDURA ADMINISTROWANIA ORAZ USUWANIA BŁĘDÓW I AWARII W APLIKACJI CENTRALNEJ Rozdział 1. ADMINISTROWANIE APLIKACJĄ CENTRALNĄ 1. Wykonawca zobowiązany jest do Bardziej szczegółowo OPIS PRZEDMIOTU ZAMÓWIENIA
Załącznik nr 1 OPIS PRZEDMIOTU ZAMÓWIENIA I. Informacje ogólne Przedmiotem postępowania jest wdrożenie platformy komunikacyjnej poprzez zapewnienie możliwości dwukierunkowej wymiany danych dotyczących Bardziej szczegółowo Regulamin Konkursu Start up Award 9. Forum Inwestycyjne 20-21 czerwca 2016 r. Tarnów. Organizatorzy Konkursu
Regulamin Konkursu Start up Award 9. Forum Inwestycyjne 20-21 czerwca 2016 r. Tarnów 1 Organizatorzy Konkursu 1. Organizatorem Konkursu Start up Award (Konkurs) jest Fundacja Instytut Studiów Wschodnich Bardziej szczegółowo Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA
Wersja 5.1.9 Spis treści Rozdział 1 1.1 1.1.1 1.1.2 1.2 1.3 1.4 1.5 I Konfiguracja... 1-1 OID świadczeniodawcy... 1-2 Dodanie... instytucji zewnętrznej 1-4 Dodanie... zlecenia 1-11 Pobranie... materiału Bardziej szczegółowo zarządzam, co następuje:
w sprawie ustalenia i wprowadzenia Szczegółowych zasad przyjmowania, rozpatrywania i realizacji wniosków o dofinansowanie ze środków PFRON w ramach pilotażowego programu Aktywny samorząd w 2014 r. Na podstawie Bardziej szczegółowo 2) Drugim Roku Programu rozumie się przez to okres od 1 stycznia 2017 roku do 31 grudnia 2017 roku.
REGULAMIN PROGRAMU OPCJI MENEDŻERSKICH W SPÓŁCE POD FIRMĄ 4FUN MEDIA SPÓŁKA AKCYJNA Z SIEDZIBĄ W WARSZAWIE W LATACH 2016-2018 1. Ilekroć w niniejszym Regulaminie mowa o: 1) Akcjach rozumie się przez to Bardziej szczegółowo Co do zasady, obliczenie wykazywanej
Korekta deklaracji podatkowej: można uniknąć sankcji i odzyskać ulgi Piotr Podolski Do 30 kwietnia podatnicy podatku dochodowego od osób fizycznych byli zobowiązani złożyć zeznanie określające wysokość Bardziej szczegółowo Kwerendy funkcjonalne
Kwerendy funkcjonalne Hurtownia owoców Do tej pory zajmowali my si podstawowym rodzajem kwerend - kwerendami wybieraj cymi. Dzi ki nim mo emy wybiera dane, które nas w danym momencie interesuj. Z tabelami Bardziej szczegółowo 2017 © DocPlayer.pl Polityka prywatności | Warunki świadczenia usług | Zwrotny adres