Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
inf2_eedi
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Piotr Maślanka
inf2_eedi
Commits
2daca052
There was a problem fetching the pipeline stages.
Commit
2daca052
authored
8 years ago
by
Piotr Maślanka
Browse files
Options
Downloads
Patches
Plain Diff
Build it!
parent
ffac949d
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Pipeline
#1869
passed with stage
in 21 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
README.md
+1
-0
1 addition, 0 deletions
README.md
src/lab4.md
+66
-3
66 additions, 3 deletions
src/lab4.md
with
67 additions
and
3 deletions
README.md
+
1
−
0
View file @
2daca052
...
@@ -29,5 +29,6 @@ montowane przy użyciu [Docker](https://www.docker.com/), środowiska integracji
...
@@ -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/
)
.
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 [
*
].
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.
Instrukcja Copyright (c) 2017 Piotr Maślanka.
[
Niektóre
](
/LICENSE.md
)
prawa zastrzeżone.
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/lab4.md
+
66
−
3
View file @
2daca052
...
@@ -39,14 +39,77 @@ Takie _tożsamości_, lub lepiej **klucze podstawowe** (ang.
...
@@ -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_).
_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
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
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,
Pominę tu pytanie jaki klucz podstawowy należy zastosować do konkretnego, rocznego rozliczenia podatkowego,
gdyż ze względu na
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
)
[
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.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment