| | Temat wykladu: |
| | Bazy danych: Podstawowe pojcia i zasady projektowania (by Misiekd, 2006-12-16) @ wyklady.net |
| | Komentarze: http://forum.wyklady.net/index.php?topic=93 |
20:08 | Misiekd | na wstepie chcialem zaznaczyc, ze postaram sie jak najmniej "rzucac" terminami i definicjami a jak najwiecej pisac jezykiem zrozumialym dla zwyklych ludzi :) |
| Misiekd | wyklad jest dla poczatkujacych, ktorzy nie mieli jeszcze stycznosci z BD |
| Misiekd | na poczatek moze kilka definicji |
| Misiekd | wiersze nazywamy krotkami |
20:09 | Misiekd | kolumny to atrybuty |
| Misiekd | pola to wartosci atrybutow |
| Misiekd | aby mozna bylo mowic o relacyjnej bazie danych baza ta musi spelniac kilka podstawowych kryteriow |
20:10 | Misiekd | dane sa opisane relacja |
| Misiekd | krotki, czyli wiersze sa unikalne, tzn w zadnej tabeli nie moze sie zdarzyc, ze ktirys wiersz sie powtarza |
20:11 | Misiekd | atrybuty (kolumny) sa unikalne |
| Misiekd | kolejnosc krotek (wierszy) nie ma znaczenia |
| Misiekd | kolenosc atrybutow (wierszy) takze nie ma znaczenia |
20:12 | MeMeK | Misiekd- sory ze ci przerwe na chwilke |
| Misiekd | tak |
| MeMeK | jak macie jakies pytania or sth (sluchacze) to na priv do Misiekd |
| MeMeK | ok lec dalej |
| MeMeK | ;> |
| Misiekd | wartosci atrybutow (pol) sa atomowe, tzn ze w kazdym polu sa dane, ktorych nie da sie (nie ma potrzeby) dzielic na mniejsze |
20:13 | Misiekd | to byla ta czesc z definicjami - teraz moze kilka przykladow |
| Misiekd | krotki sa unikalne |
20:14 | Misiekd | tzn, ze taka postac tabeli jest nie dopuszczalna |
| Misiekd | klient | towar | cena |
| Misiekd | Michal | ksiazka | 12 |
20:15 | Misiekd | | zeszyt | 3 |
| Misiekd | | dlugopis | 5 |
| Misiekd | Mariusz | gumka | 2 |
| Misiekd | | piornik | 7 |
20:16 | Misiekd | teraz jesli zamienimy drugi i piaty wiersz dane zostana przeklamane |
| Misiekd | bo bedzie wychodzilo, ze piornik kupil Michal a zeszyt Mariusz |
| Misiekd | taka sytuacja jest niedopuszczalna |
20:17 | Misiekd | oj przepraszam - przyklad jest do hasla "kolejnoc krotek nie ma znaczenia" - to moj "pierwszy raz" i troszke nerwowy :) |
20:18 | Misiekd | czyli jeszcze raz "krotki sa unikalne" |
| Misiekd | klient | towar | cena |
| Misiekd | Michal | ksiazka | 12 |
| Misiekd | Mariusz | gumka | 2 |
| Misiekd | Michal | ksiazka | 12 |
| dragon | ? |
20:19 | Misiekd | taka sytuacja tez jest niedopuszczalna poniewaz jesli sie pomylilismy i Michal zaplacil 13 zl a nie 12 za ksiazke |
| Misiekd | nie jestesmy w stanie wskazac o ktora ksiazke chodzi |
20:20 | Misiekd | podobnie jest z "atrybuty sa unikalne) oraz "kolejnosc atrybutow nie ma znaczenia" |
20:21 | Misiekd | natomiast w "wartosci atrybutow (pol) sa atomowe" chodzi o to, ze dane, ktore chcemy trzymac w bazie powinny byc rozbite na jak najmniejsze wartosci |
| Misiekd | przykladowo |
| Misiekd | tabela uczniowie |
20:22 | Misiekd | |uczen | klasa | rok |
| Misiekd | Adam Iksinski | 2 | 2006 |
| Misiekd | Marian Ygrekowski | 1 | 2006 |
20:23 | Misiekd | teraz jesli chcemy wyswietlic wszystkich Adamow bedziemy miec problem poniewaz nie da sie w prosty sposob "zapytac" o to nasza baze |
| Misiekd | poprawnie tabela powinna wygladac tak |
| Misiekd | imie | nazwisko | klasa | rok |
| Misiekd | Adam | Iksinski | 2 | 2006 |
| Misiekd | Marian | Ygrekowski | 1 | 2006 |
20:24 | Misiekd | teraz bez problemu mozemy znalezc wszystkich Marianow czy tez Iksinskich |
20:25 | Misiekd | teraz czy ktos ma jakies pytania? |
20:26 | GynW0RK | jak pytania to bez m;> |
| MeMeK | nie zauwazylem ze pytania ;> |
| MeMeK | ja nie mam pytan |
| MeMeK | ;> |
20:27 | Misiekd | to lecimy dalej |
| Misiekd | czas na zaprojektowanie naszej pierwszej bazy, czyli o normalizacji slow kilka |
20:28 | Misiekd | normalizacja to taki proces, ktory ma na celu z "surowych" danych stworzyc relacyjna baze danych zdatna do urzytku |
| Misiekd | znormalizowana baza zajmuje mniej miejsca |
20:29 | Misiekd | ze znormalizowanej bazy mozna na dobra sprawe wyciagnac dowolne zestawienie wprowadzonych danych |
| Misiekd | nie stwarza ona problemow przy aktualizacji i/lub usuwaniu danych (wyjasnie sie za chwile o co chodzi) |
20:30 | Misiekd | oraz znormalizowana baza jest latwiejsza w utrzymaniu |
| Misiekd | normalizacja ma jednak kilka wad |
20:31 | Misiekd | najpowazniejsza jest taka, ze wybranie bardziej zlozonych danych wymaga wiekszej ilosci zlozen a co za tym idzie jest bardziej czasochlonna |
| Misiekd | zostalo zdefiniowanych 5 postaci normalnych (5NF normal form) |
20:32 | Misiekd | najczesciej spotyka sie bazy w 3 PN lub tzw 2,5 PN |
| Misiekd | postacie 4 i 5 sa praktycznie niespotykane w produkcyjnych bazach danych |
20:33 | Misiekd | Relacja jest w pierwszej postaci normalnej, jesli wartosci atrybutow są elementarne tzn. sa to pojedyncze wartosci okreslonego typu, a nie zbiory wartosci. |
20:34 | Misiekd | jak taka postac uzyskac |
| Misiekd | zaluzmy, ze chcemy stworzyc baze obslugujaca hurtownie |
20:35 | Misiekd | wypisujemy sobie dane, ktore musimy w naszej bazie trzymac |
| Misiekd | najpierw musimy pamietac towary |
| Misiekd | kod towaru |
| Misiekd | nazwa towaru |
| Misiekd | cena zakupu |
| Misiekd | nazwa dostawcy |
20:36 | Misiekd | nastepnie potrzebujemy informacje o dostawcach |
| Misiekd | kod dostawcy |
| Misiekd | nazwa |
| Misiekd | siedziba |
| Misiekd | oraz informacje o klientach |
| Misiekd | kod klienta |
| Misiekd | nazwa klienta |
| Misiekd | adres klienta |
| Misiekd | i informacje o sprzedazy |
20:37 | Misiekd | data sprzedazy |
| Misiekd | nazwa klkienta |
| Misiekd | nazwa towaru |
| Misiekd | cena |
| Misiekd | dane tak jak je mamy teraz nie sa praktycznie zdatne do mumieszczenia w bazie |
20:38 | Misiekd | robimy z tych danych pierwsze tabele jednoczesnie wprowadzajac w zycie 1NF |
| Misiekd | dzielimy dane na wartosci atomowe |
| Misiekd | dla towarow bedzie to |
| Misiekd | kod towaru |
20:39 | Misiekd | nazwa towaru |
| Misiekd | cena zakupu |
| Misiekd | kod dostawcy |
| Misiekd | dla dostawcow |
| Misiekd | kod dostawcy |
| Misiekd | nazwa dostawcy |
| Misiekd | ulica dostawcy |
| Misiekd | miasto dostawcy |
20:40 | Misiekd | kod pocztowy dostawcy |
| Misiekd | klienci |
| Misiekd | kod klienta |
| Misiekd | nazwa klienta |
| Misiekd | ulica klienta |
| Misiekd | miasto klienta |
| Misiekd | kod pocztowy klienta |
| Misiekd | sprzedaz |
20:41 | Misiekd | dzielimy ja na dwie tabele - naglowek i pozycje |
| Misiekd | tabela naglowek bedzie zawierac dane o sprzedazy, ktore nie zmieniaja sie dla pojedynczej transakcji |
| Misiekd | data sprzedazy |
| Misiekd | kod klienta |
20:42 | Misiekd | a tabela pozycje |
| Misiekd | liczba porzadkowa |
| Misiekd | kod towaru |
| Misiekd | cena |
20:43 | Misiekd | towary |
| Misiekd | kod towaru | nazwa towaru | cena zakupu | kod dostawcy |
| Misiekd | dostawcy |
| Misiekd | kod dostawcy | nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy |
| Misiekd | klienci |
20:44 | Misiekd | kod klienta | nazwa klienta | ulica klienta | miasto klienta | kod pocztowy klienta |
| Misiekd | naglowki |
| Misiekd | data sprzedazy | kod klienta |
| Misiekd | pozycje |
| Misiekd | iczba porzadkowa | kod towaru | cena |
20:45 | Misiekd | tak wygladaja nasze tabele w 1PN |
| Misiekd | jakies pytania? |
| Misiekd | chyba nie ma |
| Misiekd | to teraz z naszej bazy zrobimy baze w 2PN |
20:46 | Misiekd | aby tabela była w 2PN musi być w 1PN |
| Misiekd | oraz |
20:47 | Misiekd | Relacja jest w drugiej postaci normalnej, jezeli kazdy atrybut wtorny (tzn. nie wchodzacy w skład zadnego klucza potencjalnego) tej relacji jest w pełni funkcjonalnie zalezny od wszystkich kluczy potencjalnych tej relacji |
| Misiekd | najpierw musimy wyznaczyc klucze naszych tabel |
20:48 | Misiekd | klucz glowny dla tabeli jest to zbior tych atrybutow, ktore jednoznacznie okreslaja cala krotke |
20:49 | Misiekd | czyli to te kolumny, na podstawie ktorych mozemy jednoznacznie wskazac okreslany przez nie wiersz tabeli |
| Misiekd | nie jest dozwolone aby ktorakolwiek wartosc klucza glownego wskazywala dwi (lub wiecej) dowolnych krotek |
20:50 | Misiekd | dla wygody kolumny kluczowe bedziemy oznaczac * przed ich nazwa |
| Misiekd | towary |
| Misiekd | * kod towaru | nazwa towaru | cena zakupu | kod dostawcy |
| Misiekd | dostawcy |
20:51 | Misiekd | * kod dostawcy | nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy |
| Misiekd | wdarl sie maly blad do tabeli towary, jeszcze raz :) |
20:52 | Misiekd | towary |
| Misiekd | * kod towaru | nazwa towaru | *cena zakupu | *kod dostawcy |
| Misiekd | lub |
| Misiekd | kod towaru | * nazwa towaru | *cena zakupu | *kod dostawcy |
| Misiekd | dostawcy |
| Misiekd | * kod dostawcy | nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy |
| Misiekd | kod dostawcy | * nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy |
| Misiekd | klienci |
| Misiekd | * kod klienta | nazwa klienta | ulica klienta | miasto klienta | kod pocztowy klienta |
20:53 | Misiekd | kod klienta | * nazwa klienta | ulica klienta | miasto klienta | kod pocztowy klienta |
| Misiekd | naglowki |
| Misiekd | * data sprzedazy | * kod klienta |
| Misiekd | pozycje |
| Misiekd | * liczba porzadkowa | * kod towaru | * cena |
20:54 | Misiekd | jak widzimy niektore tabele moga miec dwa rozne klucze |
| Misiekd | dzieje sie tak poniewaz zarowno (dla tabeli dostawcy) kod dostawcy jak i jego nazwa musza byc unikalne |
20:56 | Misiekd | i na dobra sprawe kod dostawcy to sztucznie utworzony kod majacy ulatwic wpisywanie danych odnosnie dostawcy (nazwa moze miec np. 150 znakow i wpisanie jej zamiast 4 znakowego kodu jest duzo bardziej czasochlonne) |
20:57 | Misiekd | oczywiscie kod dostawcy i jego nazwa sa ze soba nierozelwalnie polaczone i jest niedopuszczalen przypisanie kodu dostawcy xxx dostawcy yyy |
20:58 | Misiekd | widzimy takze, ze w niektorych przypadkach aby zidentyfikowac konkretna krotke musimy podac wszystkie jej wartosci atrybutow |
| Misiekd | tak np zachowuje sie tabela naglowki oraz pozycje |
| Misiekd | w takich wybadkach wprowadza sie tzw. klucz sztuczny |
| Misiekd | jest to dodatkowe pole typu numerycznego |
20:59 | Misiekd | a jego wartosc jest nadawana przez sama baze i jest unikalna |
21:00 | Misiekd | w mysql sa to pola z atrybutem auto_increment |
21:01 | Misiekd | na dobra sprawe takie pola wprowadza sie w prawie kazdej tabeli |
| Misiekd | robi sie tak poniewaz pola numeryczne prosciej jest zaindeksowac bazie |
| Misiekd | proscie jest tez wpisac liczbe w zapytaniu niz np. 150 znakowa nazwe |
21:02 | Misiekd | ale wracajac do sedna co trzeba zrobic z nasza baza aby mozna bylo uznac, ze spelnia warunki 2PN |
21:03 | Misiekd | na dobra sprawe poza dodaniem dodatkowych pol. ktore dodajemy tylko i wylacznie dla naszej wygody nic wiecej |
| Misiekd | towary |
| Misiekd | * id| kod towaru | nazwa towaru | *cena zakupu | *kod dostawcy |
21:04 | Misiekd | powyzsze jest bledne (enter mi sie wcisnal) |
| Misiekd | * kod towaru | nazwa towaru | cena zakupu | kod dostawcy |
| Misiekd | dostawcy |
| Misiekd | * id | kod dostawcy | nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy |
| Misiekd | klienci |
| Misiekd | * id | kod klienta | nazwa klienta | ulica klienta | miasto klienta | kod pocztowy klienta |
| Misiekd | naglowki |
21:05 | Misiekd | * id | data sprzedazy | kod klienta |
| Misiekd | pozycje |
| Misiekd | * id | liczba porzadkowa | kod towaru | cena | id_naglowka |
| Misiekd | to moze teraz pytania :) jak sa |
21:06 | Misiekd | no to jak nie ma to jedziemy dalej |
| Misiekd | 3 PN |
21:07 | Misiekd | aby tabela byla w 3PN musi spelniac 2PN |
| Misiekd | oraz |
21:08 | Misiekd | kazdy jej atrybut nie wchodzacy w sklad zadnego klucza nie jest przechodnio funkcjonalnie zalezny od zadnego klucza tej relacji |
| Misiekd | co to oznacza |
21:09 | Misiekd | jesli mamy relacje z trzema atrybutami (A, B, C) |
| Misiekd | atrybut A jest atrybutem kluczowym |
21:10 | Misiekd | atrybut B zalezy od atrybutu A natomiast atrybut C zalezy bezposrednio od atrybutu B i w zwiazku z tym posrednio od atrybutu A to taka relacja nie spelnia warunkow 3PN |
21:12 | Misiekd | czyli mamy tabele dostawa o kolumnach (id dostawy, nazwa dostawcy, adres dostawcy) |
| Misiekd | kluczem glownym jest w niej id dostawy |
| Misiekd | widzimy, ze adres dostawcy zalezy od nazw dostawcy |
21:13 | Misiekd | i w zwiazku z tym posrednio tez od id_dostawy |
| Misiekd | aby taka tabela byla w 3PN nalezy ja rozbic na 2 tabele |
| Misiekd | dostawa (*id dostawy, nazwa dotawcy) |
| Misiekd | oraz dostawcy(*nazwa dostawcy, adres dostawcy) |
21:14 | Misiekd | w naszym przykladzie wszystkie tabele spelniaja 3PN |
21:15 | Misiekd | na tym etapie mozemy skonczyc projektowanie naszej bazy i nikt nie bedzie nam mogl zarzucic, ze zrobilismy gdzies blad |
| Misiekd | nie oznacza to jednak, ze mozemy zasiasc na laurach |
21:16 | Misiekd | spojrzmy na tabele dostawcy oraz klienci |
| Misiekd | * id | kod dostawcy | nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy |
| Misiekd | * id | kod klienta | nazwa klienta | ulica klienta | miasto klienta | kod pocztowy klienta |
21:17 | Misiekd | jak wiemy liczba miast jest skonczona i w wiekszosci przypadkw liczba miast z jakich beda nasi dostawcy bedzie duzo mniejsza niz sama liczba dostawcow |
| Misiekd | w zwiazku z tym powinnismy nazwy miast umiescic w osobnej tabeli a w tabeli dostawca oraz klienci jedynie id tych miast |
21:18 | Misiekd | ma to jeszcze ten plus, ze nie bedziemy miec dostawcow z katowic, KaTowiC, KATOWIC czy tez kaTOWic, co wcale nie jest dziwne, szczegolnie jesli dane wpisuje kilka roznych osob |
21:19 | Misiekd | dla bazy taki zapis jest niewazny ale np. na faktorach beda one brzydko wygladac |
21:20 | Misiekd | no i jesli pomylimy sie i wpiszemy np. Katwice, bez o to poprawienie tego bledu to bedzie polegalo na zmianie jedynie w jednym miejscu |
| Misiekd | czyli teraz nasze tabele beda wygladac tak: |
21:21 | Misiekd | * id | kod dostawcy | nazwa dostawcy | ulica dostawcy | id miasta | kod pocztowy dostawcy |
| Misiekd | * id | kod klienta | nazwa klienta | ulica klienta | id miasta | kod pocztowy klienta |
| Misiekd | mogli bysmy podobnie postapic z ulicami ale szansa, ze wiecej niz dwoch, trzech dostawcow bedzie mialo siedziby na tej samej ulicy jest znikoma |
21:22 | Misiekd | i oplacalnosc takiej operacji jest dyskusyjna |
| Misiekd | nowopowstala tabela miasta |
| Misiekd | * id miasta | nazwa miasta |
21:23 | Misiekd | pole id miasta w tabeli dostawcy oraz klienci nosi nazwe klucza obcego |
| Misiekd | oznacza to, ze jest to pole, ktore wskazuje wiersz w innej tabeli |
21:24 | Misiekd | to teraz ostatnia szansa na pytania |
| Robol | chyba nie ma ;] |
| lidia | moze teraz sa? |
| lidia | Misiekd: ;P |
21:25 | GynW0RK | niet |
| GynW0RK | nie mam pytan ;> |
| Misiekd | czyli albo pelen sukces (w co nie wierze) i wszystko jest zrozumiale |
| lidia | hm |
| Misiekd | albo nic nie jest zrozumiale i nie wiaomo o co pytac :) |
| lidia | Misiekd: ja nie rozumiem nic, bo czytam od srodka |
| lidia | ;p |
| lidia | Misiekd: zostaje 3cia mozliwosc, |
| lidia | braku sluchaczy- niestety |
21:26 | Robol | ja przyszedlem o 20:55 |
| Misiekd | ok, to na tym bysmy na razie skonczyli |
| Robol | ma ktos loga do 20:55? |
| lidia | Robol: na www bedzie |
| Robol | bo nie wiem co to jest to 2PN |
| Misiekd | jesli bedzie jakis odzew to nastepnym razem o indeksach i optymalizacji zapytan |
| Misiekd | nastepny wyklad byl na 21:00 a juz jest prawie 21:30 wiec oddaje glos |
21:27 | Misiekd | komentarze i pytania na http://forum.wyklady.net/index.php?topic=93 |