diff --git a/README.md b/README.md index 37454e313e9ad84255749af8296f6af46ccb18ed..e8f6f9cceb4118c03e351c21b827893d4d461dcc 100644 --- a/README.md +++ b/README.md @@ -29,5 +29,6 @@ montowane przy uĹźyciu [Docker](https://www.docker.com/), Ĺrodowiska integracji systemu kontroli wersji [Git](https://git-scm.com/) oraz konwertera Markdown-PDF [pandoc](http://pandoc.org/). WczeĹniej byĹ [Vagrant](https://www.vagrantup.com) ale mi siÄ wylaĹy kondensatory w zasilaczu i Vagrantowa maszyna zmarĹa [*]. +Vagrantfile zostaje. Instrukcja Copyright (c) 2017 Piotr MaĹlanka. [NiektĂłre](/LICENSE.md) prawa zastrzeĹźone. \ No newline at end of file diff --git a/src/lab4.md b/src/lab4.md index 28ac2066293687a55d869578ffb4f918b02fa6b7..613ec2797b0f2e607e6e61f76c15a06de6879d46 100644 --- a/src/lab4.md +++ b/src/lab4.md @@ -39,14 +39,77 @@ Takie _toĹźsamoĹci_, lub lepiej **klucze podstawowe** (ang. _primary keys_) mogÄ rĂłwnieĹź skĹadaÄ siÄ z kilku cech (lub lepiej **pĂłl**, ang. _fields_). Wydaje siÄ po dĹuĹźszych deliberacjach Ĺźe dobrym kluczem podstawowym bÄdzie tu PESEL obywatela. Ryzyko pomyĹki -z innym obywatelem jest minimalne (chyba Ĺźe aktualnie jesteĹmy komornikiem). Takie rozwiÄ zanie od kilku lat +z innym obywatelem jest minimalne (chyba Ĺźe aktualnie jesteĹmy komornikiem). DziÄki takiej _toĹźsamoĹci_ + moĹźemy potem kazaÄ bazie chociaĹźby _zmieĹ nazwisko osobie legitymujÄ cej siÄ numerem PESEL 95101810106_ + bez ryzyka pomyĹki, w razie gdyby zmieniĹa nazwisko z racji wyjĹcia za mÄ Ĺź. Pole podstawowe przywiÄ zuje + nasz wiersz w bazie do konkretnego obiektu istniejÄ cego w rzeczywistoĹci. + +Takie rozwiÄ zanie od kilku lat juĹź zastosowano, dziÄki czemu iloĹÄ drukĂłw NIP-7 w obrocie znacznie spadĹa, a Panowie zapewne do swojego -rocznego rozliczenia podatkowego nie wpisywali Ĺźadnych NIP-Ăłw, bo wystarczyĹ PESEL. +rocznego rozliczenia podatkowego nie wpisywali Ĺźadnych NIP-Ăłw, bo wystarczyĹ PESEL. PominÄ tu pytanie jaki klucz podstawowy naleĹźy zastosowaÄ do konkretnego, rocznego rozliczenia podatkowego, gdyĹź ze wzglÄdu na [mnogoĹÄ moĹźliwych sposobĂłw rozliczeĹ przewidzianych stosownÄ ustawÄ ](http://isap.sejm.gov.pl/Download;jsessionid=DEE94711477213D50C7A580724D3176C?id=WDU19910800350&type=3) -stanowi to Bardzo Dobre Pytanie. **Zwalniam z zaliczenia jak ktoĹ ma dobry i wyczerpujÄ cy pomysĹ** +stanowi to Bardzo Dobre Pytanie. **Zwalniam z zaliczenia jak ktoĹ ma dobry i wyczerpujÄ cy pomysĹ**. + +Tak czy inaczej, wypiszmy kilka sensownych _pĂłl_ w takiej tabeli od obywateli: + +* ImiÄ +* Nazwisko +* Adres zameldowania: miasto +* Adres zameldowania: kod pocztowy +* Adres zameldowania: ulica i numer budynku oraz lokalu +* Adres korespondencyjny: miasto +* Adres korespondencyjny: kod pocztowy +* Adres korespondencyjny: ulica i numer budynku oraz lokalu +* PESEL +* Data urodzin + +Od razu zauwaĹźyÄ moĹźemy, Ĺźe trzymanie dwĂłch _adresĂłw_. nie jest takim dobrym pomysĹem. Analityczny umysĹ +zauwaĹźyÄ moĹźe, Ĺźe adres jest pewnym _bytem samym w sobie_. MoĹźemy wiÄc stworzyÄ osobnÄ tabelÄ do przechowywania adresĂłw. + +Powstaje z kolei bardzo dobre pytanie, co stanowi _toĹźsamoĹÄ_ danego adresu. Czasem, gdy nie mamy dobrego +pomysĹu na toĹźsamoĹÄ moĹźemy zaĹźyczyÄ sobie, aby baza danych stworzyĹa osobnÄ toĹźsamoĹÄ dla danego wiersza. +Później, gdy bÄdziemy dodawaÄ rekord, baza poinformuje nas o tym identyfikatorze. + +Musimy jednak uwaĹźaÄ! Dla potrzeb bazy dwa identycznie wpisane adresy bÄdÄ _róşnymi_, poniewaĹź bedÄ miaĹy +róşne identyfikatory (chyba Ĺźe nie poinformujemy o tym bazy). Czasem jednak moĹźemy to przecierpieÄ. + +SprĂłbujmy wiÄc odseparowaÄ obywatela od adresu. Otrzymamy zapewne coĹ takiego: + +**Obywatel**: +* ImiÄ +* Nazwisko +* Adres zameldowania - ID adresu +* Adres korespondencyjny - ID adresu +* PESEL (**klucz podstawowy**) +* Data urodzin + +**Adres**: +* Identyfikator adresu (**klucz podstawowy**, **generowany automatycznie**) +* Miasto +* Kod pocztowy +* Ulica i numer lokalu/budynku + +MoĹźna sprzeczaÄ siÄ, Ĺźe taki podziaĹ nie miaĹ najmniejszego sensu. To moĹźliwe. W kaĹźdym razie to co zrobiliĹmy +teraz nazywa siÄ [normalizacjÄ ](https://pl.wikipedia.org/wiki/Normalizacja_bazy_danych). W epoce baz danych +[NoSQL](https://msdn.microsoft.com/pl-pl/dn912483.aspx) staje siÄ ona coraz bardziej zagadnieniem jedynie akademickim, +jednak mam wraĹźenie Ĺźe bÄdzie na egzaminie. + +Identyfikatory generowane przez bazÄ najczÄĹciej sÄ rosnÄ cymi liczbami dodatnimi i **nie powtarzajÄ siÄ**, +nawet gdybyĹmy skasowali wiersz. Ma to sens. W koĹcu gdybyĹmy prowadzili policyjnÄ kartotekÄ dowodĂłw rzeczowych, +a ktoĹ w piĹmie wspomniaĹ o dowodzie o okreĹlonym identyfikatorze, a w miÄdzyczasie ten dowĂłd zostaĹ zniszczony ze wzglÄdu na koniec sprawy, +to teraz jego papier mĂłgĹby siÄ odwoĹywaÄ do *istniejÄ cego dowodu w innej sprawie*, a nie po prostu do *niczego*. +ByĹoby to katastrofalne w skutkach, a bĹÄ d programisty mĂłgĹby kosztowaÄ kogoĹ pozbawienie wolnoĹci. + + + + + + + +