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:08Misiekdna wstepie chcialem zaznaczyc, ze postaram sie jak najmniej "rzucac" terminami i definicjami a jak najwiecej pisac jezykiem zrozumialym dla zwyklych ludzi :)
Misiekdwyklad jest dla poczatkujacych, ktorzy nie mieli jeszcze stycznosci z BD
Misiekdna poczatek moze kilka definicji
Misiekdwiersze nazywamy krotkami
20:09Misiekdkolumny to atrybuty
Misiekdpola to wartosci atrybutow
Misiekdaby mozna bylo mowic o relacyjnej bazie danych baza ta musi spelniac kilka podstawowych kryteriow
20:10Misiekddane sa opisane relacja
Misiekdkrotki, czyli wiersze sa unikalne, tzn w zadnej tabeli nie moze sie zdarzyc, ze ktirys wiersz sie powtarza
20:11Misiekdatrybuty (kolumny) sa unikalne
Misiekdkolejnosc krotek (wierszy) nie ma znaczenia
Misiekdkolenosc atrybutow (wierszy) takze nie ma znaczenia
20:12MeMeKMisiekd- sory ze ci przerwe na chwilke
Misiekdtak
MeMeKjak macie jakies pytania or sth (sluchacze) to na priv do Misiekd
MeMeKok lec dalej
MeMeK;>
Misiekdwartosci atrybutow (pol) sa atomowe, tzn ze w kazdym polu sa dane, ktorych nie da sie (nie ma potrzeby) dzielic na mniejsze
20:13Misiekdto byla ta czesc z definicjami - teraz moze kilka przykladow
Misiekdkrotki sa unikalne
20:14Misiekdtzn, ze taka postac tabeli jest nie dopuszczalna
Misiekdklient | towar | cena
MisiekdMichal | ksiazka | 12
20:15Misiekd| zeszyt | 3
Misiekd| dlugopis | 5
MisiekdMariusz | gumka | 2
Misiekd| piornik | 7
20:16Misiekdteraz jesli zamienimy drugi i piaty wiersz dane zostana przeklamane
Misiekdbo bedzie wychodzilo, ze piornik kupil Michal a zeszyt Mariusz
Misiekdtaka sytuacja jest niedopuszczalna
20:17Misiekdoj przepraszam - przyklad jest do hasla "kolejnoc krotek nie ma znaczenia" - to moj "pierwszy raz" i troszke nerwowy :)
20:18Misiekdczyli jeszcze raz "krotki sa unikalne"
Misiekdklient | towar | cena
MisiekdMichal | ksiazka | 12
MisiekdMariusz | gumka | 2
MisiekdMichal | ksiazka | 12
dragon?
20:19Misiekdtaka sytuacja tez jest niedopuszczalna poniewaz jesli sie pomylilismy i Michal zaplacil 13 zl a nie 12 za ksiazke
Misiekdnie jestesmy w stanie wskazac o ktora ksiazke chodzi
20:20Misiekdpodobnie jest z "atrybuty sa unikalne) oraz "kolejnosc atrybutow nie ma znaczenia"
20:21Misiekdnatomiast w "wartosci atrybutow (pol) sa atomowe" chodzi o to, ze dane, ktore chcemy trzymac w bazie powinny byc rozbite na jak najmniejsze wartosci
Misiekdprzykladowo
Misiekdtabela uczniowie
20:22Misiekd|uczen | klasa | rok
MisiekdAdam Iksinski | 2 | 2006
MisiekdMarian Ygrekowski | 1 | 2006
20:23Misiekdteraz jesli chcemy wyswietlic wszystkich Adamow bedziemy miec problem poniewaz nie da sie w prosty sposob "zapytac" o to nasza baze
Misiekdpoprawnie tabela powinna wygladac tak
Misiekdimie | nazwisko | klasa | rok
MisiekdAdam | Iksinski | 2 | 2006
MisiekdMarian | Ygrekowski | 1 | 2006
20:24Misiekdteraz bez problemu mozemy znalezc wszystkich Marianow czy tez Iksinskich
20:25Misiekdteraz czy ktos ma jakies pytania?
20:26GynW0RKjak pytania to bez m;>
MeMeKnie zauwazylem ze pytania ;>
MeMeKja nie mam pytan
MeMeK;>
20:27Misiekdto lecimy dalej
Misiekdczas na zaprojektowanie naszej pierwszej bazy, czyli o normalizacji slow kilka
20:28Misiekdnormalizacja to taki proces, ktory ma na celu z "surowych" danych stworzyc relacyjna baze danych zdatna do urzytku
Misiekdznormalizowana baza zajmuje mniej miejsca
20:29Misiekdze znormalizowanej bazy mozna na dobra sprawe wyciagnac dowolne zestawienie wprowadzonych danych
Misiekdnie stwarza ona problemow przy aktualizacji i/lub usuwaniu danych (wyjasnie sie za chwile o co chodzi)
20:30Misiekdoraz znormalizowana baza jest latwiejsza w utrzymaniu
Misiekdnormalizacja ma jednak kilka wad
20:31Misiekdnajpowazniejsza jest taka, ze wybranie bardziej zlozonych danych wymaga wiekszej ilosci zlozen a co za tym idzie jest bardziej czasochlonna
Misiekdzostalo zdefiniowanych 5 postaci normalnych (5NF normal form)
20:32Misiekdnajczesciej spotyka sie bazy w 3 PN lub tzw 2,5 PN
Misiekdpostacie 4 i 5 sa praktycznie niespotykane w produkcyjnych bazach danych
20:33MisiekdRelacja jest w pierwszej postaci normalnej, jesli wartosci atrybutow są elementarne tzn. sa to pojedyncze wartosci okreslonego typu, a nie zbiory wartosci.
20:34Misiekdjak taka postac uzyskac
Misiekdzaluzmy, ze chcemy stworzyc baze obslugujaca hurtownie
20:35Misiekdwypisujemy sobie dane, ktore musimy w naszej bazie trzymac
Misiekdnajpierw musimy pamietac towary
Misiekdkod towaru
Misiekdnazwa towaru
Misiekdcena zakupu
Misiekdnazwa dostawcy
20:36Misiekdnastepnie potrzebujemy informacje o dostawcach
Misiekdkod dostawcy
Misiekdnazwa
Misiekdsiedziba
Misiekdoraz informacje o klientach
Misiekdkod klienta
Misiekdnazwa klienta
Misiekdadres klienta
Misiekdi informacje o sprzedazy
20:37Misiekddata sprzedazy
Misiekdnazwa klkienta
Misiekdnazwa towaru
Misiekdcena
Misiekddane tak jak je mamy teraz nie sa praktycznie zdatne do mumieszczenia w bazie
20:38Misiekdrobimy z tych danych pierwsze tabele jednoczesnie wprowadzajac w zycie 1NF
Misiekddzielimy dane na wartosci atomowe
Misiekddla towarow bedzie to
Misiekdkod towaru
20:39Misiekdnazwa towaru
Misiekdcena zakupu
Misiekdkod dostawcy
Misiekddla dostawcow
Misiekdkod dostawcy
Misiekdnazwa dostawcy
Misiekdulica dostawcy
Misiekdmiasto dostawcy
20:40Misiekdkod pocztowy dostawcy
Misiekdklienci
Misiekdkod klienta
Misiekdnazwa klienta
Misiekdulica klienta
Misiekdmiasto klienta
Misiekdkod pocztowy klienta
Misiekdsprzedaz
20:41Misiekddzielimy ja na dwie tabele - naglowek i pozycje
Misiekdtabela naglowek bedzie zawierac dane o sprzedazy, ktore nie zmieniaja sie dla pojedynczej transakcji
Misiekddata sprzedazy
Misiekdkod klienta
20:42Misiekda tabela pozycje
Misiekdliczba porzadkowa
Misiekdkod towaru
Misiekdcena
20:43Misiekdtowary
Misiekdkod towaru | nazwa towaru | cena zakupu | kod dostawcy
Misiekddostawcy
Misiekdkod dostawcy | nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy
Misiekdklienci
20:44Misiekdkod klienta | nazwa klienta | ulica klienta | miasto klienta | kod pocztowy klienta
Misiekdnaglowki
Misiekddata sprzedazy | kod klienta
Misiekdpozycje
Misiekdiczba porzadkowa | kod towaru | cena
20:45Misiekdtak wygladaja nasze tabele w 1PN
Misiekdjakies pytania?
Misiekdchyba nie ma
Misiekdto teraz z naszej bazy zrobimy baze w 2PN
20:46Misiekdaby tabela była w 2PN musi być w 1PN
Misiekdoraz
20:47MisiekdRelacja 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
Misiekdnajpierw musimy wyznaczyc klucze naszych tabel
20:48Misiekdklucz glowny dla tabeli jest to zbior tych atrybutow, ktore jednoznacznie okreslaja cala krotke
20:49Misiekdczyli to te kolumny, na podstawie ktorych mozemy jednoznacznie wskazac okreslany przez nie wiersz tabeli
Misiekdnie jest dozwolone aby ktorakolwiek wartosc klucza glownego wskazywala dwi (lub wiecej) dowolnych krotek
20:50Misiekddla wygody kolumny kluczowe bedziemy oznaczac * przed ich nazwa
Misiekdtowary
Misiekd* kod towaru | nazwa towaru | cena zakupu | kod dostawcy
Misiekddostawcy
20:51Misiekd* kod dostawcy | nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy
Misiekdwdarl sie maly blad do tabeli towary, jeszcze raz :)
20:52Misiekdtowary
Misiekd* kod towaru | nazwa towaru | *cena zakupu | *kod dostawcy
Misiekdlub
Misiekdkod towaru | * nazwa towaru | *cena zakupu | *kod dostawcy
Misiekddostawcy
Misiekd* kod dostawcy | nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy
Misiekdkod dostawcy | * nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy
Misiekdklienci
Misiekd* kod klienta | nazwa klienta | ulica klienta | miasto klienta | kod pocztowy klienta
20:53Misiekdkod klienta | * nazwa klienta | ulica klienta | miasto klienta | kod pocztowy klienta
Misiekdnaglowki
Misiekd* data sprzedazy | * kod klienta
Misiekdpozycje
Misiekd* liczba porzadkowa | * kod towaru | * cena
20:54Misiekdjak widzimy niektore tabele moga miec dwa rozne klucze
Misiekddzieje sie tak poniewaz zarowno (dla tabeli dostawcy) kod dostawcy jak i jego nazwa musza byc unikalne
20:56Misiekdi 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:57Misiekdoczywiscie kod dostawcy i jego nazwa sa ze soba nierozelwalnie polaczone i jest niedopuszczalen przypisanie kodu dostawcy xxx dostawcy yyy
20:58Misiekdwidzimy takze, ze w niektorych przypadkach aby zidentyfikowac konkretna krotke musimy podac wszystkie jej wartosci atrybutow
Misiekdtak np zachowuje sie tabela naglowki oraz pozycje
Misiekdw takich wybadkach wprowadza sie tzw. klucz sztuczny
Misiekdjest to dodatkowe pole typu numerycznego
20:59Misiekda jego wartosc jest nadawana przez sama baze i jest unikalna
21:00Misiekdw mysql sa to pola z atrybutem auto_increment
21:01Misiekdna dobra sprawe takie pola wprowadza sie w prawie kazdej tabeli
Misiekdrobi sie tak poniewaz pola numeryczne prosciej jest zaindeksowac bazie
Misiekdproscie jest tez wpisac liczbe w zapytaniu niz np. 150 znakowa nazwe
21:02Misiekdale wracajac do sedna co trzeba zrobic z nasza baza aby mozna bylo uznac, ze spelnia warunki 2PN
21:03Misiekdna dobra sprawe poza dodaniem dodatkowych pol. ktore dodajemy tylko i wylacznie dla naszej wygody nic wiecej
Misiekdtowary
Misiekd* id| kod towaru | nazwa towaru | *cena zakupu | *kod dostawcy
21:04Misiekdpowyzsze jest bledne (enter mi sie wcisnal)
Misiekd* kod towaru | nazwa towaru | cena zakupu | kod dostawcy
Misiekddostawcy
Misiekd* id | kod dostawcy | nazwa dostawcy | ulica dostawcy | miasto dostawcy | kod pocztowy dostawcy
Misiekdklienci
Misiekd* id | kod klienta | nazwa klienta | ulica klienta | miasto klienta | kod pocztowy klienta
Misiekdnaglowki
21:05Misiekd* id | data sprzedazy | kod klienta
Misiekdpozycje
Misiekd* id | liczba porzadkowa | kod towaru | cena | id_naglowka
Misiekdto moze teraz pytania :) jak sa
21:06Misiekdno to jak nie ma to jedziemy dalej
Misiekd3 PN
21:07Misiekdaby tabela byla w 3PN musi spelniac 2PN
Misiekdoraz
21:08Misiekdkazdy jej atrybut nie wchodzacy w sklad zadnego klucza nie jest przechodnio funkcjonalnie zalezny od zadnego klucza tej relacji
Misiekdco to oznacza
21:09Misiekdjesli mamy relacje z trzema atrybutami (A, B, C)
Misiekdatrybut A jest atrybutem kluczowym
21:10Misiekdatrybut 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:12Misiekdczyli mamy tabele dostawa o kolumnach (id dostawy, nazwa dostawcy, adres dostawcy)
Misiekdkluczem glownym jest w niej id dostawy
Misiekdwidzimy, ze adres dostawcy zalezy od nazw dostawcy
21:13Misiekdi w zwiazku z tym posrednio tez od id_dostawy
Misiekdaby taka tabela byla w 3PN nalezy ja rozbic na 2 tabele
Misiekddostawa (*id dostawy, nazwa dotawcy)
Misiekdoraz dostawcy(*nazwa dostawcy, adres dostawcy)
21:14Misiekdw naszym przykladzie wszystkie tabele spelniaja 3PN
21:15Misiekdna tym etapie mozemy skonczyc projektowanie naszej bazy i nikt nie bedzie nam mogl zarzucic, ze zrobilismy gdzies blad
Misiekdnie oznacza to jednak, ze mozemy zasiasc na laurach
21:16Misiekdspojrzmy 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:17Misiekdjak wiemy liczba miast jest skonczona i w wiekszosci przypadkw liczba miast z jakich beda nasi dostawcy bedzie duzo mniejsza niz sama liczba dostawcow
Misiekdw zwiazku z tym powinnismy nazwy miast umiescic w osobnej tabeli a w tabeli dostawca oraz klienci jedynie id tych miast
21:18Misiekdma 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:19Misiekddla bazy taki zapis jest niewazny ale np. na faktorach beda one brzydko wygladac
21:20Misiekdno i jesli pomylimy sie i wpiszemy np. Katwice, bez o to poprawienie tego bledu to bedzie polegalo na zmianie jedynie w jednym miejscu
Misiekdczyli teraz nasze tabele beda wygladac tak:
21:21Misiekd* 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
Misiekdmogli bysmy podobnie postapic z ulicami ale szansa, ze wiecej niz dwoch, trzech dostawcow bedzie mialo siedziby na tej samej ulicy jest znikoma
21:22Misiekdi oplacalnosc takiej operacji jest dyskusyjna
Misiekdnowopowstala tabela miasta
Misiekd* id miasta | nazwa miasta
21:23Misiekdpole id miasta w tabeli dostawcy oraz klienci nosi nazwe klucza obcego
Misiekdoznacza to, ze jest to pole, ktore wskazuje wiersz w innej tabeli
21:24Misiekdto teraz ostatnia szansa na pytania
Robolchyba nie ma ;]
lidiamoze teraz sa?
lidiaMisiekd: ;P
21:25GynW0RKniet
GynW0RKnie mam pytan ;>
Misiekdczyli albo pelen sukces (w co nie wierze) i wszystko jest zrozumiale
lidiahm
Misiekdalbo nic nie jest zrozumiale i nie wiaomo o co pytac :)
lidiaMisiekd: ja nie rozumiem nic, bo czytam od srodka
lidia;p
lidiaMisiekd: zostaje 3cia mozliwosc,
lidiabraku sluchaczy- niestety
21:26Robolja przyszedlem o 20:55
Misiekdok, to na tym bysmy na razie skonczyli
Robolma ktos loga do 20:55?
lidiaRobol: na www bedzie
Robolbo nie wiem co to jest to 2PN
Misiekdjesli bedzie jakis odzew to nastepnym razem o indeksach i optymalizacji zapytan
Misiekdnastepny wyklad byl na 21:00 a juz jest prawie 21:30 wiec oddaje glos
21:27Misiekdkomentarze i pytania na http://forum.wyklady.net/index.php?topic=93