Projekt Bazy Danych Temat: Firmy software'owe produkują programy komputerowe. Sprzedawcy oprogramowania rozprowadzają te programy. Programy mogą pracować pod różnymi systemami operacyjnymi. 1. Założenia: Klientem jest wortal o oprogramowaniu komercyjnym. Zamierza udostępnić wyszukiwarkę oprogramowania na podstawie nazwy, producenta, obsługiwanych systemów operacyjnych oraz kategorii oprogramowania. Dla znalezionego oprogramowania będzie udzielał informacji o sprzedawcach u których można kupić dane oprogramowanie. Oprogramowanie może być dostępne w formie pakietów, wówczas pojawia się informacja o ofertach pakietów zawierających dany program. Sprzedawców będzie można posortować w zależności od ceny produktu oraz lokalizacji. Programy mogą mieć różne wersje (kolejne wydania, wersje językowe) i można je sortować w kolejności chronologicznej. Scenariusze użycia: Administrator dodaje firmę software'ową i jej programy. Administrator dodaje sprzedawcę i jego oferty. Użytkownik wyszukuje programy na podstawie kilku parametrów. Użytkownik sortuje sprzedawców na podstawie ceny lub lokalizacji. Użytkownik wyszukuje konkretną wersję programu (np. najnowsze wydanie). Wykluczenia: W skład bazy nie będą wchodziły takie informacje jak: programiści pracujący nad programem, adres i dane kontaktowe producenta oprogramowania, pracownicy firmy dystrybuującej oprogramowanie, dawne (nieaktualne) oferty. Jeśli oferta ulega zmianie, to będzie to dokonane przez zmianę istniejącej oferty lub usunięcie poprzedniej i dodanie nowej. Jeśli oferta się zakończyła, zostaje usunięta z bazy danych. Baza nie zawiera również transakcji zawieranych między użytkownikami a dystrybutorami wortal jedynie dostarcza informacji o ofertach, a nie pośredniczy w transakcjach. Przykładowe zapytania: Jakie programy producenta X są dostępne w sprzedaży? Jakie programy z kategorii X działają pod systemem operacyjnym Y? Jaka jest najnowsza wersja oprogramowania X, która jest dostępna w języku Y? Który dystrybutor oprogramowania oferuje najniższą cenę za program X? Który dystrybutor oprogramowania oferujący program X działa w miejscowości Y? 1/9
2. Diagram ERD 2/9
3. Opis diagramu ERD Zbiory encji: Kategorie Programy Nazwa Opis Szacowana liczebność Kategorie oprogramowania (np. edytory tekstowe, edytory grafiki, gry, pakiety biurowe). Programy komputerowe, pojedyncza encja reprezentuje wszystkie wersje programu. kilkadziesiąt kilka tysięcy Producenci Firmy software'owe produkujące programy komputerowe. kilkaset Systemy_operacyjne Zbiór istniejących systemów operacyjnych, każda wersja jest osobną encją. Wersje Wersje_językowe Wersje programów. Każda wersja każdego programu jest osobną encją. Dana wersja programu może być dostępna z różnymi tłumaczeniami. Ten zbiór encji reprezentuje każdy taki pakiet (program + dostępne języki) Np. program X z językami angielskim, chińskim i japońskim. kilkaset kilkadziesiąt tysięcy kilkaset tysięcy Języki Zbiór języków w których są wydawane programy. kilkadziesiąt Dystrybutorzy Firmy rozprowadzające oprogramowanie. kilkaset Oferty Formy_dostawy Atrybuty: Kategorie Oferty wystawiane przez dystrybutorów, dotyczą pakietu programów w konkretnej wersji z konkretnymi językami (pakiet może się składać z jednego lub więcej programów), mają określoną cenę (cena ostateczna to cena oferty + cena dostawy). Możliwe formy dostawy programu (np. zakup na miejscu, dostawa pocztą, kurierem płatne przy odbiorze, kurierem zapłacone z góry itp.). Każdy dystrybutor ma osobną grupę encji w tym zbiorze, gdyż mogą się różnić cenami. nazwa tak ciąg liter i spacji krótki (max 40 znaków) Nazwa kategorii. kilkaset tysięcy kilka tysięcy 3/9
Programy id tak liczba naturalna Nazwa programu może się czasem powtórzyć u różnych producentów, zatem trzeba wprowadzić numer id. nazwa nie ciąg dowolnych znaków opis nie ciąg dowolnych znaków długi (max 2000 znaków) Pełna nazwa programu, bez wersji. Ogólny opis programu (dane prawdziwe dla każdej wersji programu). Producenci id tak liczba naturalna Firmy mogą być z różnych krajów, więc numery NIP i REGON nie mogą pełnić funkcji klucza głównego. nazwa nie ciąg dowolnych znaków Pełna nazwa firmy, może zawierać dowolne znaki. państwo nie dwie duże litery Państwo w którym działa producent (potrzebne, żeby odróżnić producentów o tej samej nazwie działających w różnych krajach) zapisane jako jego dwuliterowe oznaczenie ISO_3166-1 Np. "US", "PL" Systemy_operacyjne id tak liczba naturalna Kluczem mogła by być para atrybutów (nazwa, wersja), jednak żeby uniknąć złożonego klucza z ciągami znaków warto wprowadzić numer id. nazwa nie ciąg znaków alfanumerycznych i spacji krótki (max 20 znaków) wersja nie ciąg znaków alfanumerycznych, kropek i spacji krótki (max 20 znaków) Nazwa systemu operacyjnego, z podziałem na duże wydania i dystrybucje. Np. "Windows XP", "Mac OS X", "Ubuntu" Wersja systemu operacyjnego (service packi w przypadku systemów z rodziny Windows). Tylko numer, bez 'nazwy' wersji typu "Snow Leopard". Np. "SP 1", "10.6", "5.0.3" 4/9
Wersje id tak liczba naturalna Różne programy mogą mieć tak samo oznaczony numer wersji, więc dla rozróżnienia trzeba wprowadzić numer id. wersja nie ciąg znaków alfanumerycznych, kropek i spacji krótki (max 20 znaków) data_wydania nie data (dzień, miesiąc, rok), bez godzin opis nie ciąg dowolnych znaków długi (max 2000 znaków) Numer wersji programu. np. "0.9", "1.0.5", "10.4 RC" Data wydania danej wersji. Potrzebna do chronologicznego sortowania wersji i wyszukiwania wersji np. najnowszych. Opis danej wersji programu. Może zawierać opis funkcjonalności danej wersji lub różnice między daną wersją a poprzednią. Wersje_językowe id tak liczba naturalna Wersje językowe różnych programów mogą mieć tą samą nazwą, więc dla rozróżnienia trzeba wprowadzić numer id. nazwa nie ciąg dowolnych znaków Nazwa pakietu językowego. Np. "Języki europejskie", "Języki wschodnioazjatyckie", "Wersja spolszczona", "Wersja oryginalna", "Wersja wielojęzyczna" Języki oznaczenie tak trzy małe litery Trzyliterowe oznaczenie języka, według standardu ISO 639-5 Np. "eng", "pol", "jpn" pełna_nazwa nie ciąg dowolnych znaków krótki (max 40 znaków) Pełna nazwa języka. Np. "angielski", "polski", "japoński" 5/9
Dystrybutorzy id tak liczba naturalna Firmy mogą być z różnych krajów, więc numery NIP i REGON nie mogą pełnić funkcji klucza głównego. nazwa nie ciąg dowolnych znaków Pełna nazwa firmy, może zawierać dowolne znaki. państwo nie dwie duże litery Państwo w którym znajduje się siedziba dystrybutora zapisane jako jego dwuliterowe oznaczenie ISO_3166-1 Np. "US", "PL" miejscowość nie ciąg liter i spacji krótki (max 40 znaków) adres nie ciąg dowolnych znaków kod_pocztowy nie 6 znaków (2 cyfry, minus 3 cyfry) strona_internetowa nie poprawny adres URL krótki (max 80 znaków) Miejscowość w której znajduje się siedziba dystrybutora, nazwa może być wieloczłonowa (np. Pruszcz Gdański). Opcjonalne (dystrybutor może działać przez internet i podawać wyłącznie stronę internetową). Ulica i numer budynku. Opcjonalne (jak wyżej). Kod pocztowy w formacie "??-???" gdzie? to dowolna cyfra Opcjonalne (jak wyżej). Adres strony internetowej dystrybutora. Opcjonalne (dystrybutor może prowadzić wyłącznie sprzedaż na miejscu i nie posiadać strony internetowej). Oferty id tak liczba naturalna Oferty nie posiadają naturalnego klucza, zatem trzeba stworzyć numer id. cena nie typ walutowy (liczba z dokładnością do dwóch miejsc po przecinku) link nie poprawny adres URL krótki (max 200 znaków) Cena za jaką dystrybutor oferuje dany program lub pakiet programów. Link do konkretnej oferty dystrybutora (może nie występować, jeśli programu nie da się kupić przez internet). 6/9
Formy_dostawy id tak liczba naturalna Formy dostawy są osobne dla każdego dystrybutora, ale wartości atrybutów mogą się powtarzać, zatem trzeba wprowadzić numer id. nazwa nie ciąg liter i spacji Nazwa danej formy dostawy. cena nie typ walutowy (liczba z dokładnością do dwóch miejsc po przecinku) Związki: Nazwa związku Zbiory encji Liczność Zbiór encji 1 Zbiór encji 2 związku Dodatkowa opłata za daną formę dostawy ( 0 zł jeśli brak). wyprodukował Producenci Wersje 1 : 0..n Może się zdarzyć, że różne wersje programu wyprodukują różni producenci. Zakładamy jednak, że jedną wersję produkuje jeden producent. Dany producent mógł wyprodukować wiele wersji różnych programów (mógł nie wyprodukować jeszcze żadnej). działa Wersje Systemy_op eracyjne wystawia Dystrybutor zy 0..n : n Opis Dana wersja programu działa na działa na różnych systemach operacyjnych (co najmniej na jednym). Na jednym systemie operacyjnym mogą działać różne programy (możliwe, że żaden z będących w sprzedaży). Oferty 1 : 0..n Dystrybutor wystawia różne oferty (może nie wystawiać w danej chwili żadnej oferty). Oferta jest wystawiona przez jednego producenta. należy Programy Kategorie 0..n : n Program należy do kategorii (może należeć do kilku, jeśli nie należy do żadnej to zostaje podłączony do kategorii "pozostałe". Do kategorii może należeć wiele programów (może w danej chwili nie być żadnego). 7/9
dotyczy Oferty Wersje_języ kowe umożliwia Oferty Formy_dosta wy 0..n : n 0..n : n Oferta dotyczy pakietu programów w konkretnej wersji językowej (co najmniej jednego programu). Danego programu może dotyczyć wiele ofert (nawet żadna). Oferta może umożliwiać kilka form dostawy (co najmniej jedną). Forma dostawy może występować w wielu ofertach (również w żadnej). jest_wersją Wersje Programy 0..n : 1 Wersja programu jest wersją konkretnego programu. Program może mieć wiele wersji (również żadnej, jeśli jeszcze nie został wydany). występuje_jako Wersje Wersje_języ kowe zawiera oferuje Wersje_języ kowe Dystrybutor zy 1 : 0..n Wersja programu może występować jako różne pakiety z językami (może się zdarzyć, że takie pakiety nie są jeszcze utworzone). Jeden pakiet programu z językami zawiera konkretną wersję programu. Języki 0..n : n Pakiet programu z językami zawiera różne tłumaczenia (co najmniej jedno). Dany język może występować w różnych pakietach (również w żadnym). Formy_dosta wy 1 : 0..n Dystrybutor może oferować różne formy dostawy (mógł jeszcze żadnej nie udostępnić). Forma dostawy jest powiązana z konkretnym dystrybutorem (ponieważ dystrybutor może ustalić cenę danej formy dostawy). 8/9
4. Schemat RBD Kategorie (nazwa) Programy (id, nazwa, opis) Producenci (id, nazwa, państwo) Systemy_operacyjne (id, nazwa, wersja) Wersje (id, wersja, data_wydania, opis, program.id REF Programy, producent.id REF Producenci) Wersje_językowe (id, nazwa, wersja.id REF Wersje) Języki (oznaczenie, pełna_nazwa) Dystrybutorzy (id, nazwa, państwo, miejscowość, adres, kod_pocztowy, strona_internetowa) Oferty (id, link, cena, dystrybutor.id REF Dystrybutor) Formy_dostawy (id, nazwa, cena, dystrybutor.id REF Dystrybutor) należy (kategoria.nazwa REF Kategorie, program.id REF Programy) działa (system.id REF Systemy_operacyjne, wersja.id REF Wersje) zawiera (wersja.id REF Wersje_językowe, język.oznaczenie REF Języki) dotyczy (wersja.id REF Wersje_językowe, oferta.id REF Oferty) umożliwia (oferta.id REF Oferty, dostawa.id REF Formy_dostawy) 9/9