Relacyjne bazy danych Grzegorz Kowalski Relacyjny model baz danych jeden z modeli logicznych baz danych początki w roku 1969 – dr Edgar F. Codd (IBM) nazwa pochodzi od pojęcia relacja stanowiącego element teorii mnogości znajomość podstaw matematycznych nie jest konieczna ☺ do zarządzania słuŜą tzw. SZRBD - systemy zarządzania relacyjnymi bazami danych Systemy zarządzania relacyjnymi bazami danych – SZRBD architektura klient-serwer m. in. Oracle (Oracle Corp.), SQL Server (Microsoft), MySQL Anatomia relacyjnych baz danych tabele pola rekordy klucze perspektywy relacje: jeden-do-jednego jeden-do-wielu wiele-do-wielu Anatomia RBD – tabele, pola, rekordy CustomerlD FirstName LastName StreetAdress City State ZipCode 1010 Michael Davolio 672 Lamont Ave Houston TX 77201 1011 Margaret Peacock 667 Red River Road Austin TX 78710 1012 Estella Pundt 2500 Rosales Lane Dallas TX 75260 1013 Mark Rosales 323 Advocate Lane El Paso TX 79915 1014 Consuelo Maynez 3445 Cheyenne Road El Paso TX 79915 1015 Ryan Ehrlich 455 West Palm Ave San Antonio TX 78284 POLA REKORDY Klienci Anatomia RBD - pola najmniejsza struktura bazy danych dane mogą być odczytywane i zapisywane jakość informacji zaleŜy od ilości czasu poświęconego na wprowadzenie integralności strukturalnej i integralności danych pole powinno zawierać tylko jedną wartość nazwa pola adekwatna do zawartości Anatomia RBD - rekordy CustomerlD FirstName LastName StreetAdress City State ZipCode 1010 Michael Davolio 672 Lamont Ave Houston TX 77201 1011 Margaret Peacock 667 Red River Road Austin TX 78710 kaŜdy rekord stanowi pełny zbiór pól 1012 Estella Pundt 2500 Rosales Lane Dallas przypisanych do danej tabeli TX 75260 1013 Mark Rosales 323 Advocate Lane El Paso TX 79915 1014 Consuelo Maynez 3445 Cheyenne Road El Paso TX 79915 1015 Ryan Ehrlich 455 West Palm Ave San Antonio TX 78284 Anatomia RBD - klucze pola specjalne pełniące szczególne funkcje w tabelach tabele mogą zawierać kilka rodzajów kluczy dwa najwaŜniejsze rodzaje kluczy: klucz główny klucz obcy Anatomia RBD – klucze główne Klucz główny – pole lub grupa pól jednoznacznie identyfikująca kaŜdy rekord w tabeli wartość klucza identyfikuje konkretny rekord w bazie danych pole klucza (pole kluczowe) identyfikuje tabelę w całej bazie danych wymuszają integralność na poziomie tabel pomagają tworzyć relacje pomiędzy tabelami KaŜda tabela powinna zawierać klucz główny Anatomia RBD – klucze główne CustomerlD FirstName LastName StreetAdress City State ZipCode 1010 Michael Davolio 672 Lamont Ave Houston TX 77201 1011 Margaret Peacock 667 Red River Road Austin TX 78710 1012 Estella Pundt 2500 Rosales Lane Dallas TX 75260 1013 Mark Rosales 323 Advocate Lane El Paso TX 79915 1014 Consuelo Maynez 3445 Cheyenne Road El Paso TX 79915 1015 Ryan Ehrlich 455 West Palm Ave San Antonio TX 78284 Anatomia RBD – klucze obce Klucz obcy – kopia klucza głównego w innej tabeli umoŜliwiają wprowadzanie relacji między tabelami wymuszają integralność na poziomie relacji Anatomia RBD – klucze obce Agenci KLUCZ GŁÓWNY AgentID AgentFirstName AgentLastName DateofHire AgentHomePhone 1001 Stella Rosales 1994-07-11 299-5764 1002 Steve Pundt 1994-05-01 515-5762 1003 Randi Nathanson 1994-09-11 998-3882 «otherfields» KLUCZ OBCY Artyści KLUCZ GŁÓWNY EntertainerlD AgentID EntertainerName EntertainerPhone 98100 1002 The Mike Hernandez Trio 959-8837 98101 1002 Jazz Times 555-9928 98102 1003 The Country Squires 709-3542 «otherfields» Anatomia RBD - perspektywy Perspektywa – wirtualna tabela składająca się z kolumn jednej lub większej ilości tabel Anatomia RBD - perspektywy Klienci CustomerlD CustFirstName CustLastName CustPhone 10001 Sally Callahan 555-2671 10002 Ann Fuller 555-2496 10003 James Levelling 555-2501 «otherfielcls» AngaŜe EngagementNumber CustomerlD StartDate End Date StartTime 1 52113 1999-07-01 1199-07-04 13:00 2 54223 1999-07-01 1999-07-05 13:00 3 52233 1999-07-10 1999-07-15 13:00 «other fields» Klienci_AngaŜe (perspektywa) EngagementNumber CustFirstName CustLastName StartDate EndDate 1 Mark Rosales 1999-07-01 1999-07-04 2 Thomas Fuller 1999-07-01 1999-07-05 3 Sally Callahan 1999-07-10 1999-07-15 Anatomia RBD - relacje Relacje – powiązanie rekordów jednej tabeli z rekordami innej tabeli jeden-do-jednego jeden-do-wielu wiele-do-wielu Anatomia RBD – relacje – jeden-do-jednego Pojedynczemu rekordowi z jednej tabeli odpowiada tylko jeden rekord z drugiej tabeli oraz pojedynczemu rekordowi z drugiej tabeli odpowiada tylko jeden rekord z pierwszej tabeli. W tego typu relacjach istnieje tabela główna i tabela podrzędna. Anatomia RBD – relacje – jeden-do-jednego Agenci AgentID AgentFirstName AgentLastName DateofHire AgentHomePhone 1001 Stella Rosales 1994-07-11 299-5764 1002 Steve Pundt 1994-05-01 515-5762 1003 Randi Nathanson 1994-09-11 998-3882 «otherfields» Odszkodowania AgentID HourlyRate Commission Rate 1001 21.50 4.5% 1002 25.75 3.0% 1003 20.00 4.5% «other fields» Anatomia RBD – relacje – jeden-do-wielu Pojedynczemu rekordowi z jednej tabeli odpowiada wiele rekordów z drugiej tabeli oraz pojedynczemu rekordowi z drugiej tabeli odpowiada tylko jeden rekord z pierwszej tabeli. Anatomia RBD – relacje – jeden-do-wielu Artyści ArtistID ArtistFirstName ArtistLastName GroupName «innepola» 67001 Mike Hernandez The Mike Hernandez Trio 67002 Zachary Ehrlich Jazz Times 67003 Gerry Greer The Country Squires AngaŜe EngagementID ArtistID CustomerlD StartDate EndDate 1001 67003 701 1998-09-10 1998-09-12 1002 67001 625 1998-09-11 1998-09-12 1003 67001 712 1998-09-15 1998-09-19 «innepola» Anatomia RBD – relacje – wiele-do-wielu Pojedynczemu rekordowi z dowolnej tabeli odpowiada wiele rekordów z tabeli komplementarnej. wymagane jest ustanowienie dodatkowej tabeli łączącej tabela łącząca powinna zawierać klucze główne obydwu tabel Anatomia RBD – relacje – wiele-do-wielu Artyści ArtistlD ArtistFirstName ArtistLastName GroupName 67001 Mike Hernandez The Mike Hernandez Trio 67002 Zachary Ehrlich Jazz Times 67003 Gerry Greer The Country Squires Artyści_Nagrania ArtistlD RecordingID 67001 1102 67001 1105 67002 1102 67002 1106 67003 1104 «innepola» (tabela łącząca) Nagrania RecordingID Title YearReleased 1102 Jazz 'Round Midnight 1995 1103 Until I Return 1998 1104 Love Me, Donl Leave Me 1995 1105 Midnight Breeze 1996 1106 No Puede Ver 1994 «inne pola» Relacje – określanie typu uczestnictwa druga kreska – uczestnictwo obowiązkowe kółko – uczestnictwo opcjonalne Tworzenie reguł usuwania usunięcie rekordu z tabeli Komisje spowoduje usunięcie rekordów z tabeli Komisje_Członkowie Poprawna struktura bazy danych Niepoprawny projekt bazy danych: stwarza problemy w implementacji zapytań SQL moŜe okazać się, Ŝe BD będzie bezuŜyteczna Jakość bazy danych zaleŜy od ilości czasu poświęconego na etapie projektowania. Poprawna struktura bazy danych Korygowanie pól Korygowanie tabel Kontrola poprawności relacji Korygowanie pól nazwa pola powinna odzwierciedlać jego zawartość unikatowe nazwy kaŜdego pola w BD Czy pole nie identyfikuje więcej niŜ jedną cechę? Zastanowić się czy nie podzielić pola na mniejsze pola. bezpiecznie jest uŜywać nazw pól zaczynających się od litery i mogą zawierać jedynie litery, cyfry i podkreślenie Struktura pól bazy danych pole powinno odzwierciedlać cechę któremu poświęcona jest tabela macierzysta – Czy pole rzeczywiście powinno znajdować się w danej tabeli? pole powinno zawierać pojedynczą wartość wartości pól nie powinny być wynikiem operacji matematycznej ani konkatenacji – brak pól wyliczonych kaŜde pole moŜe występować w bazie tylko jeden raz Tabela - zbędne pola Personel StaffID Staff FirstName StaffLastName StaffStreetAddress StaffCity StaffState 98014 James Leverling 722 Moss Bay Blvd. Kirkland WA 98019 Laura Callahan 901 Pine Avenue Portland OR 98020 Albert Buchanan 13920 S.E. 40th Street Bellevue WA 98021 Tim Smith 30301-166th Ave. N.E. Seattle WA 98022 Janet Leverling 722 Moss Bay Blvd. Kirkland WA 98023 Alaina Hallmark Route 2, Box 203 B Woodinville WA «innepola» Klasy ClassID Class Classroom ID StaffID StaffLastName «inne pola» StaffFirstName 1031 Art History 1231 98014 Leverling James 1030 Art History 1231 98014 Levelling James 2213 Biological Principles 1532 98021 Smith Tim 2005 Chemistry 1515 98019 Callahan Laura 2001 Chemistry 1519 98233 Hallmark Alaina 1006 Drawing 1627 98020 Buchanan Albert 2907 Elementary Algebra 3445 98022 Levelling Janet «inne pola» Eliminacja pól wieloczęściowych CustomerlD CustomerName StreetAddress PhoneNumber 1001 Suzanne Viescas 15127 NE 24th, #383, Redmond, WA 98052 425 555-2686 1002 Will Thompson 122 Spring River Drive, Duvall, Wa 98019 425 555-2681 1003 Gary Hallmark Route 2, Box 203B, Auburn, WA 98002 253 555-2676 1004 Michael Davolio 672 Lamont Ave, Houston, TX 77201 713 555-2491 1005 Kenneth Peacock 4110 Old Redmond Rd., Redmond, WA 98052 425 555-2506 «innepola» POLA WIELOCZĘŚCIOWE CustomerlD CustFirstName CustLastName CustAddress CustCity CustState CustZipcode 1001 Suzanne Viescas 15127 NE 24th, #383 Redmond WA 98052 1002 Wil Thompson 122 Spring River Drive Duvall WA 98019 1003 Gary Hallmark Route2,Box203B Auburn WA 98002 1004 Michael Davolio 672 Lamont Ave Houston TX 77201 1005 Kenneth Peacock 4110 Old Redmond Rd. Redmond WA 98052 Eliminowanie pól wielowartościowych Piloci PilotJD PilotFirstName PilotLastName HireDate Certifications 25100 John Leverling 1994-07-11 727, 737,757, MD80 25101 David Callahan 1994-05-01 737, 747,757 25102 David Smith 1994-09-11 757, MD80, DC9 25103 Kathryn Patterson 1994-07-11 727, 737,747,757 25104 Michael Hernandez 1994-05-01 737.757.DC10 25105 Kendra Bonnicksen 1994-09-11 757, MD80, DC9 «innepola» Eliminowanie pól wielowartościowych Piloci PilotID PilotFirstName PilotLastName HireDate «inne pola» 25100 John Leverling 1994-07-11 25101 David Callahan 1994-05-01 25102 David Smith 1994-09-11 25103 Kathryn Patterson 1994-07-11 25104 Michael Hernandez 1994-05-01 25105 Kendra Bonnicksen 1994-09-11 Piloci_Certyfikaty PilotID CertificationID 25100 8102 25100 8103 25100 8105 25100 8106 25101 8103 25101 25101 (tabela łącząca) Certyfikaty CertificationID TypeofAircraft 8102 Boeing 727 8103 Boeing 737 8104 Boeing 747 8104 8105 Boeing 757 8105 8106 McDonnell Douglas MD80 «innepola» Korygowanie tabel - nazwa unikatowa i zrozumiała nazwa tabeli nazwa precyzyjnie i jednoznacznie opisuje jej zawartość nie naleŜy uŜywać skrótów tabela powinna opisywać tylko jeden temat nazwy tabel powinny być w liczbie mnogiej (łatwiej odróŜnić wtedy je od nazw pól) Korygowanie tabel – kontrola poprawności struktur tabela powinna opisywać tylko jeden temat kaŜda tabela powinna mieć klucz główny tabele nie powinny zawierać pól wielowartościowych ani wieloczęściowych eliminacja pól wyliczonych brak zbędnych duplikatów pól Korygowanie tabel – usuwanie zbędnych duplikatów pól Pracownicy EmployeelD EmpFirstName EmpLastName 7004 7005 7006 7007 7008 7009 7010 7011 Peacock Kennedy Thompson Callahan Buchanan Smith Patterson Viescas Samuel John Sarah David Andrea David Neil Michael Committeel Committee2 Steering Y2K Conformance Safety Safety Y2K Conformance Steering Y2K Conformance Steering Safety Y2K Conformance Y2K Conformance Steering Safety EmpFirstName «inne pola» Członkowie_Komitety Pracownicy Employee ID Committee3 EmpLastName EmpCity 7004 7005 7006 7007 7008 7009 7010 Peacock Kennedy Thompson Callahan Buchanan Smith Patterson Samuel John Sarah David Andrea David Neil Chico Portland Lubbock Salem Medford Fremont San Diego 7011 Viescas Michael Redmond «inne pola» EmployeelD 7004 7005 7005 7006 7006 7006 7008 7009 Committee Steering Y2K Conformance Safety Safety Y2K Conformance Steering Y2K Conformance Steering Korygowanie tabel – usuwanie zbędnych duplikatów pól Pracownicy Employee ID EmpFirstName EmpLastName EmpCity 7004 7005 7006 7007 7008 7009 7010 Peacock Kennedy Thompson Callahan Buchanan Smith Patterson Samuel John Sarah David Andrea David Neil Chico Portland Lubbock Salem Medford Fremont San Diego 7011 Viescas Michael Redmond Członkowie_Komitety Komitety EmployeelD CommitteelD 7004 7005 7005 7006 7006 7006 7008 7009 CommitteelD 103 104 102 102 104 103 104 103 «inne pola» CommitteeName MeetingRoom MeetingDay 100 Budget 11-C Tuesday 101 102 Christmas Safety 9-F 12-B Monday Monday 103 Steering 12-D Tuesday 104 Y2K Compliance Main-South Wednesday Korygowanie tabel – klucze kaŜda tabela powinna zawierać klucz główny klucz główny powinien jednoznacznie identyfikować rekord w tabeli klucze główne wykorzystywane są w tworzeniu relacji Korygowanie tabel – klucze Pracownicy EmployeeID EmpFirstName EmpLastName EmpCity EmpCity EmpState EmpState EmpZip EmpZip 98001 Peacock Samuel Chico Chico CA CA 95926 95926 98002 Kennedy John Portland Portland OR OR 97208 97208 98003 Thompson Michael Redmond Redmond WA WA 98052 98052 98004 Callahan David Salem Salem OR OR 98005 Buchanan Andrea Medford Medford OR OR 97501 97501 98006 Smith Michael Fremont Fremont CA CA 94538 94538 98007 Peacock Neil San San Diego Diego CA CA 92199 92199 98008 Kennedy John Redmond Redmond WA WA 98052 98052 «inne «inne pola» pola»