Projektowanie schematu bazy danych - MS SQL Studio

Witam :slight_smile:

jestem studentką geodezji i nasz zbyt ambitny prowadzący na drugich zajęciach z Ms SQL Server Management polecił nam stworzyć schemat bazy danych dla Giełdy Wolnego Czasu.

Zadanie brzmi tak:

Giełda wolnego czasu to zasób danych pozwalający na wymianę wolnych godzin pomiędzy wieloma użytkownikami. Każdy z użytkowników może zaoferować, że w dniu … od godz. … do godz. … może np. posiedzieć przy dziecku lub też wykonać inną pracę. Każdy z użytkowników posiada pulę godzin wykorzystanych i zaoferowanych (tak, aby można było ocenić bilans wykorzystanego/zaoferowanego czasu). Czynności wykonywane w ramach godzin mogą mieć różną wagę (wobec tego należy rozważyć konieczność definiowania kategorii prac).

  1. Wypełnij tabele przykładowymi danymi.

  2. Uzupełnij projekt o część opisową (czyli znaczenie poszczególnych atrybutów w tabelach, przewidywane funkcje jakie można na bazie danych zrealizować itp.).

Problem pojawił się już na samym początku, czyli ‘o co chodzi?’. Wstępnie stworzyłam następujące encje:

http://www.speedyshare.com/file/pY9r8/Bez-tytulu.jpg

Uprościłam jedynie kwestię czasu- zamiast ‘kto pomoże mi w czwartek od 16 z dzieckiem’ zaproponowałam ‘kto pomoże mi w czwartek’, i na każdą czynność ustaliłam z góry określony czas jej trwania. Ustalanie wag odbywałoby się na zasadzie wymnażania kolumny ‘waga’ i ‘potrzebny czas’.

Nie umiem niestety określić, czy jest to poprawne, ze względu na brak podstaw z baz danych.

Czy znalazłby się ktoś, kto mógłby w jakikolwiek sposób pomóc mi z tym zadaniem?

Z góry bardzo dziękuję za pomoc i pozdrawiam.

Twoja baza nie pozwala jednemu użytkownikowi zaoferować wielu terminów ani różnych prac, co jest trochę bez sensu. Takie dane jak imię, nazwisko czy miasto lepiej przechowywać w typie danych nvarchar, bo on pozwala na użycie polskich znaków.

Nie rozumiem też za bardzo sensu istnienia kolumn “DzieńTygodnia”, a zwłaszcza tego, czemu chcesz je zrobić tekstowe. Czy w zadaniu chodzi o to, że jedna osoba ustala konkretną datę, w której może coś zrobić, czy dzień tygodnia, w którym zawsze (co tydzień) ma taką samą czynność do zaoferowania? Jeśli to pierwsze, to trzeba ustalić daty korzystając z typu DateTime, jeśli to drugie, to zamiast kolumn tekstowych lepiej użyć tabeli słownikowej z dniami tygodnia.

Dla mnie z treści zadania wynika, że potrzeba tabel:

Uzytkownik: IdUzytownika, Imie, Nazwisko, Miasto

TypPracy: IdTypu, Nazwa, Waga

Oferta: IdOferty, IdUzytkownika, IdTypu, Data, CzasTrwania

Zapotrzebowanie: IdZapotrzebowania, IdUzytkownika, IdTypu, Data, CzasTrwania

Powiazanie: IdOferty, IdZapotrzebowania

Co oczywiście może się zmienić, jeśli ustalimy już jak właściwie ma się odbywać określanie czasu w ramach oferty (bo to może być faktycznie cykliczne) i zapotrzebowania (bo to równie dobrze może być jednorazowe).

a więc po kolei:

prowadzący mówił, że lepiej varchar i unikać polskich znaków - no ale zrobię tak, jak mówisz :slight_smile:

Nie mieliśmy w zadaniu określonego, czy to ma być konkretna data, czy cyklicznie, dzień tygodnia - ale myślę, że jak na nasze możliwości (a w zasadzie ich brak) to opcja druga będzie łatwiejsza do wykonania. Istnienie tabel słownikowych odkryłam dopiero teraz, ale jeszcze nie do końca rozgryzłam ich cel - muszę poszukać coś na ten temat.

Jak to unikać polskich znaków? Przecież miliony osób mają imiona i nazwiska zawierające polskie znaki. :expressionless:

Tabela słownikowa to nie jest wielka magia. :wink:

Po prostu tworzysz sobie tabelę DzienTygodnia, która zazwyczaj ma kolumny IdDnia oraz Nazwa, w której IdDnia jest oczywiście kluczem głównym. Następnie w tabeli np. Oferta tworzysz kolumnę IdDnia, która będzie kluczem obcym wskazującym na IdDnia z tabeli DzienTygodnia.

Doczytałam już co i jak z tą tabelą słownikową - a co do nazwisk itp - mnie nie pytaj, ale czego się spodziewać po facecie, który na drugim roku geodezji zadaje takie zadania kwitując to jeszcze słowami: “w sumie to nie wiem, jak to ma wyglądać… ale zróbcie to” :wink:

Dziękuję bardzo za pomoc, jeszcze tylko ustalić klucze, relacje, zrobić część opisową i można wysyłać :wink: