Projektowanie relacyjnych baz danych – model związków encji
Transkrypt
Projektowanie relacyjnych baz danych – model związków encji
BAZY DANYCH – wykład 8 Projektowanie relacyjnych baz danych – model związków encji (Entity-Relationship, ER) Dr hab. Sławomir Zadrożny, prof. PR Modelowanie E/R Umożliwia projektowanie schematu bazy danych Tworzone projekty mają charakter graficzny i nazywane są diagramami E/R Bazy danych – wykład 8 2 Kontekst dla modelowania E/R Projektowanie baz danych jest złożonym zadaniem Zleceniodawca często nie ma jasnej wizji co powinno się znaleźć w bazie danych Określenie i formalne opisanie najważniejszych obiektów, które mają być reprezentowane w bazie danych stanowi dobry sposób na stworzenie roboczej wersji bazy danych Bazy danych – wykład 8 3 Zbiory encji Encja (entity) = „coś” („thing”), obiekt Zbiór encji = zbiór podobnych encji Podobnie jak klasa w językach obiektowych Atrybut = własność (encji należących do) zbioru encji Bazy danych – wykład 8 4 Diagramy E/R Oznaczenia stosowane w diagramach: Zbiór encji = prostokąt Atrybut = owal, połączony linią z prostokątem reprezentującym stosowny zbiór encji Bazy danych – wykład 8 5 Przykład diagramu name manf Beers Zbiór encji Beers ma dwa atrybuty, name i manf (manufacturer). Każda encja ze zbioru Beers ma określone wartości tych dwóch atrybutów, np. (Bud, Anheuser-Busch) Bazy danych – wykład 8 6 Związki (relationships) Związek łączy dwa lub większą liczbę zbiorów encji Jest oznaczony jako romb, połączony liniami z każdym z uczestniczących zbiorów encji Bazy danych – wykład 8 7 Przykład: związki name addr name Bars Beers Sells license Frequents license = beer, full, none name manf Likes Drinkers Bary sprzedają różne marki piwa Klienci lubią różne marki piwa Klienci odwiedzają różne bary addr Bazy danych – wykład 8 8 Zbiór związków Bieżącą “wartością” zbioru encji jest zbiór wszystkich encji należących do niego Przykład: zbiór wszystkich barów w naszej bazie danych “Wartością” związku jest zbiór związków, zbiór krotek odwołujących się do każdego z powiązanych zbiorów encji Bazy danych – wykład 8 9 Przykład: zbiór związków Dla związku Sells, zbiór związków może mieć postać: Bar Joe’s Bar Joe’s Bar Sue’s Bar Sue’s Bar Sue’s Bar Beer Bud Miller Bud Pete’s Ale Bud Lite Bazy danych – wykład 8 10 Związki wieloargumentowe Występują powiązania łączące więcej niż dwa zbiory encji Przykład. Przypuśćmy, że klienci lubią pić pewne marki piwa tylko w pewnych barach Trzy wcześniej wymienione związki binarne Likes, Sells, i Frequents nie pozwalają nam tego wyrazić Potrzebny jest związek trójargumentowy! Bazy danych – wykład 8 11 Przykład: związek trójargumentowy name license addr name Bars manf Beers Preferences Drinkers name addr Bazy danych – wykład 8 12 Przykładowy zbiór związków Bar Joe’s Bar Sue’s Bar Sue’s Bar Joe’s Bar Joe’s Bar Joe’s Bar Sue’s Bar Drinker Ann Ann Ann Bob Bob Cal Cal Bazy danych – wykład 8 Beer Miller Bud Pete’s Ale Bud Miller Miller Bud Lite 13 Związki wiele-do-wielu Skupmy uwagę na binarnych związkach, takich jak Sells łączący zbiory encji Bars i Beers W przypadku związków wiele-do-wielu, encja z każdego ze zbiorów może być powiązana z wieloma encjami drugiego ze zbiorów na przykład bar (Bars) sprzedaje (Sells) wiele marek piwa (Beers) i zarazem każda marka piwa jest sprzedawana przez wiele barów. Bazy danych – wykład 8 14 Ilustracja graficzna związku wiele-do-wielu wiele-do-wielu Bazy danych – wykład 8 15 Związki wiele-do-jednego Niektóre binarne związki mają postać związków wiele-do-jednego z jednego zbioru encji do drugiego Każda encja pierwszego zbioru encji jest powiązana z co najwyżej jedną encją drugiego zbioru encji Ale jedna encja drugiego zbioru może być powiązana z wieloma encjami pierwszego zbioru (może też nie być powiązana z żadną) Bazy danych – wykład 8 16 Ilustracja graficzna związku wiele-do-jednego wiele-do-jednego Bazy danych – wykład 8 17 Przykład: związek wiele-do-jednego Związek Favorite, łączący Drinkers i Beers ma charakter wiele-do-jednego Klient ma co najwyżej jedną ulubioną markę piwa Ale jedna marka piwa może być ulubioną wielu klientów (lub żadnego) Bazy danych – wykład 8 18 Związki jeden-do-jednego W związkach typu jeden-do-jednego, każda encja każdego ze zbiorów encji jest powiązana z co najwyżej jedną encją z drugiego zbioru Przykład: związek Best-seller łączący zbiory encji Manfs (producent) i Beers. Marka piwa nie może być produkowana przez więcej niż jednego producenta i żaden producent nie ma dwóch najlepiej sprzedających się marek Bazy danych – wykład 8 19 Ilustracja graficzna związku jeden-do jednego jeden-do-jednego Bazy danych – wykład 8 20 Oznaczanie typu (liczebności) związku na diagramie Związki wiele-do-jednego oznaczamy strzałką na końcu linii prowadzącej do strony „jeden” od rombu reprezentującego związek Uwaga: Ten typ związku ma charakter zależności funkcyjnej Związki jeden-do-jednego oznaczamy strzałkami na końcach obydwu linii wychodzących z rombu reprezentującego związek Zaokrąglona strzałka oznacza “dokładnie jeden”, to znaczy każda encja z pierwszego zbioru encji jest powiązana z dokładnie jedną encją zbioru drugiego (czyli, musi być powiązana z jakąś encją z drugiego zbioru) Bazy danych – wykład 8 21 Przykład: związek wiele-do-jednego Drinkers Beers Likes Favorite Uwaga: w dwóch różnych związkach uczestniczy ten sam zbiór encji Bazy danych – wykład 8 22 Przykład: związek jeden-do-jednego Rozważmy związek Best-seller łączący Manfs i Beers Niektóre marki piwa nie są najlepiej sprzedającymi się markami żadnego z producentów, a więc zaokrąglona strzałka prowadząca do Manfs byłaby niepoprawna Ale każdy producent musi mieć najlepiej sprzedającą się markę piwa Bazy danych – wykład 8 23 Na diagramie Manfs Bestseller Marka piwa jest najlepiej sprzedającą się dla 0 lub jednego producenta Bazy danych – wykład 8 Beers Producent ma dokładnie jedną najlepiej sprzedającą się markę piwa 24 Atrybuty związków Czasami może być wygodne przypisać związkowi pewien atrybut Można interpretować taki atrybut jako własność krotek w zbiorze związku Bazy danych – wykład 8 25 Przykład: atrybut związku Bars Sells Beers price Price jest własnością pary (bar, beer), a nie którejś z tych encji indywidualnie Bazy danych – wykład 8 26 Równoważne diagramy bez atrybutów związków Można pozbyć się atrybutów związków postępując następująco: Utworzyć zbiór encji reprezentujący wartości atrybutu Uczynić ten zbiór encji uczestnikiem rozważanego związku Bazy danych – wykład 8 27 Przykład: usuwanie atrybutu ze związku Bars Sells Prices price Bazy danych – wykład 8 Beers Strzałka wychodząca z wieloargumentowego związku oznacza, że pozostałe encje uczestniczące w związku jednoznacznie wyznaczają encję ze wskazywanego przez strzałkę zbioru encji 28 Role zbiorów encji w związku Może się zdarzyć, że dany zbiór encji uczestniczy wielokrotnie w danym związku Wtedy oznacza się linię łączącą związek z poszczególnymi wystąpieniami danego związku encji etykietami nazywanymi rolami. Bazy danych – wykład 8 29 Przykład: role Zbiór związków Husband Bob Joe … Married husband Wife Ann Sue … wife Drinkers Bazy danych – wykład 8 30 Przykład: role Zbiór związków Buddies 1 2 Buddy1 Bob Joe Ann Joe … Buddy2 Ann Sue Bob Moe … Drinkers Bazy danych – wykład 8 31 Podklasy Podklasa = specjalny przypadek zbioru encji = mniej encji = więcej własności Przykład: Piwa typu Ale stanowią rodzaj piwa Nie każde piwo to Ale, ale niektóre są Ale. Załóżmy, że piwa Ale, poza wszystkimi własnościami (atrybutami i powiązaniami) piw mają dodatkowy atrybut color. Bazy danych – wykład 8 32 Podklasy na diagramach E/R Przyjmijmy, że podklasy tworzą drzewo tzn., dany zbiór encji może być podklasą tylko jednego zbioru encji (nie ma wielokrotnego dziedziczenia – ang. multiple inheritance) Trójkąty z napisem „Isa” łączą ze sobą dwa zbiory encji i są skierowane od podklasy do nadklasy Bazy danych – wykład 8 33 Przykład: podklasa name Beers manf isa color Ales Bazy danych – wykład 8 34 Podklasy w E/R i OOP W programowaniu zorientowanym obiektowo (OOP), obiekty należą tylko do jednej klasy. W E/R encje mają reprezentantów we wszystkich podklasach, do których należą. Zasada: jeśli encja e jest reprezentowana w podklasie, to jest również reprezentowana w nadklasie i wszystkich jej nadklasach Bazy danych – wykład 8 35 Przykład: reprezentanci encji name Beers manf isa color Pete’s Ale Ales Bazy danych – wykład 8 36 Klucze Klucz to taki zbiór atrybutów danego zbioru encji, że nie mogą istnieć dwie różne encje w tym zbiorze, któe mają identyczne wartości wszystkich atrybutów składających się na klucz. Dwie encje mogą mieć identyczne wartości niektórych atrybutów składających się na klucz, ale nie wszystkich Należy określić klucz dla każdego zbioru encji Bazy danych – wykład 8 37 Klucze na diagramach E/R Atrybuty składające się na klucz są podkreślane Jeśli na diagramie występuje hierarchia (drzewo) zbiorów encji określona przez relację „Isa”, to tylko zbiór encji będący korzeniem tego drzewa ma określony klucz, który spełnia rolę klucza dla wszystkich zbiorów encji w drzewie. Bazy danych – wykład 8 38 Przykład: name jest kluczem dla Beers name Beers manf isa color Ales Bazy danych – wykład 8 39 Przykład: klucz wieloatrybutowy dept number hours room Courses •Należy zwrócić uwagę, że hours i room mogą również służyć jako klucz, ale należy wybrać tylko jeden klucz Bazy danych – wykład 8 40 Słabe zbiory encji ang. Weak Entity Sets Niekiedy, aby jednoznacznie zidentyfikować encje w danym zbiorze encji trzeba odwołać się do innego zbioru encji. Zbiór encji E nazywamy słabym jeśli w celu jednoznacznej identyfikacji jego encji musimy odwołać się do jednego z powiązań wiele-dojednego, w którym E uczestniczy i użyć klucza powiązanego zbioru encji jako części klucza E . Bazy danych – wykład 8 41 Przykład: słaby zbiór encji name jest „prawie” kluczem w zbiorze encji reprezentującym piłkarzy, ale może być dwóch piłkarzy o tym samym nazwisku number na pewno nie jest kluczem, ponieważ piłkarze w dwóch różnych zespołach mogą mieć ten sam numer number wraz z nazwą zespołu (name), powiązanego z piłkarzem w ramach związku Plays-on, powinien już jednoznacznie identyfikować piłkarza Bazy danych – wykład 8 42 Słabe zbiory encji na diagramach E/R name number Players name Playson Teams Uwaga: związek musi mieć liczebność „dokładnie jeden” ponieważ każdy piłkarz musi być powiązany z dokładnie jednym zespołem, żeby móc określić jego klucz • Romb z podwójnym obrysem oznacza związek wspierający wiele-do-jednego • Prostokąt z podwójnym obrysem oznacza słaby zbiór encji Bazy danych – wykład 8 43 Słabe zbiory encji Słaby zbiór encji musi mieć jeden lub więcej związków wiele-do-jednego z innymi zbiorami encji Nie każdy z tych związków wiele-dojednego musi być związkiem wspierającym Związki wspierające muszą mieć liczebność „dokładnie jeden”: musi być gwarantowane istnienie (wystąpienie) encji po stronie „jeden” związku wspierającego Bazy danych – wykład 8 44 Słabe zbiory encji Klucz słabego związku encji stanowią jego własne „podkreślone” atrybuty wraz z kluczami zbiorów encji powiązanych związkiem wspierającym np., number (piłkarza) wraz z name (jego zespołu) stanowi klucz dla słabego związku encji Players Bazy danych – wykład 8 45 Zasady projektowania 1. Unikanie redundancji 2. Ograniczać użycie słabych zbiorów encji 3. Nie należy używać zbioru encji, jeśli wystarczy użyć atrybutu. Bazy danych – wykład 8 46 Unikanie redundancji Redundancja = reprezentacja tego samego na dwa lub więcej różnych sposobów Wiąże się ze stratą zasobów i stwarza ryzyko wystąpienia niespójności Dwie reprezentacje tego samego faktu stają się niespójne jeśli zmienimy jedną i zapomnimy zmienić drugą Najlepszym przykładem są wcześniej omawiane anomalie związane z zachodzeniem zależności funkcyjnych Bazy danych – wykład 8 47 Przykład: dobry projekt name Beers name ManfBy addr Manfs Adres każdego producenta (manufacturer) reprezentowany jest tylko raz Bazy danych – wykład 8 48 Przykład: zły projekt name Beers name ManfBy addr Manfs manf Producent piwa jest tu reprezentowany na dwa sposoby: jako atrybut i jako powiązana encja Bazy danych – wykład 8 49 Przykład: zły projekt name manf manfAddr Beers Adres producenta powtarzany jest przy każdym piwie przez niego produkowanym możliwe wystąpienie niespójności danych. Jednocześnie, jeśli w danej chwili nie ma informacji o piwach produkowanych przez danego producenta, to nie można reprezentować informacji o jego adresie Bazy danych – wykład 8 50 Zbiory encji a atrybuty Zbiór encji powinien spełniać przynajmniej jeden z następujących warunków: reprezentuje coś więcej niż tylko nazwę czegoś – ma przynajmniej jeden niekluczowy atrybut lub stanowi stronę „wiele” w związku wiele-dojednego lub wiele-do wielu Bazy danych – wykład 8 51 Przykład: dobry projekt name Beers name ManfBy addr Manfs • dla reprezentacji producentów warto użyć zbioru encji Manfs ponieważ występuje tu niekluczowy atrybut addr • dla reprezentacji piw warto użyć zbioru encji Beers ponieważ stanowi stronę „wiele” w związku „wiele-dojednego” ManfBy Bazy danych – wykład 8 52 Przykład: dobry projekt name manf Beers Nie warto reprezentować producentów z użyciem zbioru encji, ponieważ nie przechowuje się o nich żadnej informacji poza nazwą (kluczem) Bazy danych – wykład 8 53 Przykład: zły projekt name Beers name ManfBy Manfs Producenci nie spełniają żadnego z dwóch warunków uzasadniających modelowanie z życiem zbioru encji: mają tylko jeden atrybut (kluczowy) i nie występują po stronie „wiele” żadnego ze związków Bazy danych – wykład 8 54 Ograniczać użycie słabych zbiorów encji Początkujący projektanci mają skłonność do tworzenia kluczy odwołujących się do innych zbiorów encji, z którym dany zbiór encji jest związany W praktyce zazwyczaj tworzy się unikalne (sztuczne) identyfikatory dla zbiorów encji Przykłady: numer PESEL, NIP, numer VIN samochodu itp. Bazy danych – wykład 8 55 Kiedy słaby zbiór encji jest potrzebny? Zazwyczaj wtedy kiedy nie ma powszechnie akceptowanej instytucji, która mogłaby nadawać unikalne identyfikatory Przykład: jest mało prawdopodobne, żeby ustalono powszechne porozumienie co do jednoznacznej identyfikacji piłkarzy wszystkich klubów na całym świecie Bazy danych – wykład 8 56 Od diagramów E/R do relacji Zbiór encji relacja atrybuty atrybuty związki encji relacje, których atrybutami są wyłącznie: klucze powiązanych zbiorów encji atrybuty samych związków encji Bazy danych – wykład 8 57 Zbiór encji relacja name manf Beers Relacja: Beers(name, manf) Bazy danych – wykład 8 58 Związek encji relacja name husband addr Drinkers 1 name Likes manf Beers 2 Buddies Favorite wife Married Bazy danych – wykład 8 Likes(drinker, beer) Favorite(drinker, beer) Buddies(name1, name2) Married(husband, wife) 59 Łączenie relacji Dopuszczalne jest łączenie tak uzyskanych relacji: 1. relacji odpowiadającej zbiorowi encji E 2. relacji odpowiadającej związkowi wiele-dojednego, w którym zbiór encji E jest po stronie “wiele” Przykład: Drinkers(name, addr) i Favorite(drinker, beer) łączy się tworząc Drinker1(name, addr, favBeer) Bazy danych – wykład 8 60 Łączenie relacji i związki wiele-do-wielu Łączenie relacji Drinkers z relacją Likes byłoby błedem, gdyż prowadzi to do redundancji: name addr Sally 123 Maple Sally 123 Maple beer Bud Miller redundancja Bazy danych – wykład 8 61 Handling Weak Entity Sets Relacja dla słabego związku encji musi zawierać atrybuty składające się na klucz tego związku (również te atrybuty należące do innych zbiorów encji), jak również swoje własne, niekluczowe, atrybuty Związek wspierający jest redundantny i nie tworzy się dla niego osobnej relacji (chyba, że posiada własne atrybuty!) Bazy danych – wykład 8 62 Przykład: słąby zbiór encji relacja name billTo Logins name At Hosts location Hosts(hostName, location) Logins(loginName, hostName, billTo) At(loginName, hostName, hostName2) związek At jest reprezentowany przez Logins muszą być identyczne Bazy danych – wykład 8 63 Podklasy: trzy podejścia 1. zorientowane obiektowo : jedna relacja dla każdej podklasy, ze wszystkimi własnymi i odziedziczonymi atrybutami 2. użycie NULL : jedna relacja; encje przyjmują (pseudo)wartość NULL dla atrybutów, które do nich nie należą 3. styl E/R : jedna relacja dla każdej podklasy: atrybuty kluczowe atrybuty danej podklasy Bazy danych – wykład 8 64 Przykład: podklasa relacja name Beers manf isa color Ales Bazy danych – wykład 8 65 Podejście zorientowane obiektowo name manf Bud Anheuser-Busch Beers name Summerbrew manf Pete’s Ales color dark Wygodne dla zapytań typu: „znajdź kolory wszystkich piw Ale produkowanych przez browar Pete’s.” Bazy danych – wykład 8 66 Styl E/R name manf Bud Anheuser-Busch Summerbrew Pete’s Beers name Summerbrew color dark Ales Wygodne dla zapytań typu “znajdź piwa (łącznie z Ale) produkowane przez browar Pete’s.” Bazy danych – wykład 8 67 Użycie NULL name manf Bud Anheuser-Busch Summerbrew Pete’s Beers color NULL dark Zaoszczędza pamięć, chyba że występuje wiele atrybutów, które najczęściej mają pseudowartość NULL Bazy danych – wykład 8 68