Access - sprawdzenie powiązań

Witam serdecznie

Chciałbym się dowiedzieć, czy stworzone przeze mnie powiązania w programie Access są prawidłowe.

Mini-światem jest przedsiębiorstwo produkcyjne, gdzie rejestrowane są zakłócenia, które zgłaszane są przez poszczególnych pracowników. Pracownik zgłaszający nie zawsze jest pracownikiem odpowiedzialnym za powstałe zakłócenie. Kilku pracowników(a dokładnie 2) może być przypisanych do danego stanowiska. Numer stanowiska odpowiada NUMERZE MASZYNY (to samo).

Numer zakłócenia w tabeli NAPRAWA to to samo co Identyfikator w tabeli ZAKŁÓCENIE.

Celem bazy danych jest stworzenie raportów, które będą umożliwiały analizę:

-gdzie rejestrowanych jest najwięcej zakłóceń,

-kto i ile zgłasza zakłóceń,

-czasy przestojów na poszczególne błędy(jak długo trwają przestoje wszystkich zakłóceń, ale jednego rodzaju błędu),

-raportowanie kosztów naprawy poszczególnych zleceń,

Proszę o uwagi, propozycje zmian.

Pozdrawiam

obrazek2ng.jpg

Uploaded with ImageShack.us

Raczej wygląda ok (jeśli chodzi o sam szkic), ale mam kilka uwag i pytań, które być może wyprodukują kolejne uwagi :slight_smile:

Na początek kilka drobnych uwag … nie należy używać w nazwach tabel/kolumn spacji (zamiast nich można użyć _) i polskich znaków. Dobrze też jest trzymać się jakiegoś schematu przy nadawaniu nazw. Nie musiałbyś nam wówczas tłumaczyć, że Nr z tabeli Maszyna to to samo co Nr stanowiska z tabeli Zakłócenie. Może przykład takiego schematu … w tabeli Pracownik kolumnę ID mógłbyś nazwać PracownikID, a w tabeli Zaklocenie miałbyś wówczas PracownikZglaszajacyID oraz PracownikOdpowiedzialnyID. Natomiast w tabeli Naprawa miałbyś PracownikNaprawiajacyID. Od razu widać o co chodzi.

Teraz jeśli chodzi o samą strukturę bazy danych to nie pasuje mi to, że klucz główny w tabeli Naprawa odpowiada kluczowi głównemu w tabeli Zaklocenie. IMO lepiej będzie jeśli w tabeli Naprawa utworzysz osobną kolumnę z autoinkrementacją, która będzie pełnić rolę klucza głównego, czyli NaprawaID i oprócz niej dodasz kolumnę ZaklocenieID, która będzie kluczem obcym. Dzięki temu od razu będzie widoczna relacja między tabelą Zaklocenie, a Naprawa. Choć w sumie na upartego możesz utworzyć klucz obcy między tymi dwiema kolumnami, które masz teraz.

Teraz trochę pytań …

  1. Czy dane zlecenie tyczy się zawsze jednej naprawy, czy też może dotyczyć kilku napraw? (pytanie tyczy się obecnej w tabeli Naprawa kolumny Nr zlecenia)

  2. Data w tabeli Zaklocenie to data zgłoszenia? Czym jest kolumna Zmiana w tabeli Zaklocenie?

  3. Zamiast Czas przestoju w tabeli Zaklocenie może lepiej dać datę, w której maszyna ponownie zaczęła działać. Miałbyś wówczas datę zgłoszenia zakłócenia i datę zakończenia zgłoszenia. Po co ktoś ma ręcznie obliczać czas przestoju. Niech to zrobi za niego program.

  4. Koszt materiału w tabeli Naprawa to koszt wyrażony w zł/kg? Podobnie koszty inne?

  5. Może zamiast czasu naprawy dać datę rozpoczęcia naprawy i datę zakończenia naprawy, a sam czas naprawy niech wyliczy program?

  1. Zlecenie tyczy się kilku napraw.

  2. Tak, jest to data zgłoszenia zakłócenia, a kolumna Zmiana określać będzie na jakiej zmianie wystąpiło dane zakłócenie. W firmie pracuje się na dwie zmiany.

  3. Z obserwacji funkcjonowania firmy wynika, że większość zakłóceń jest usuwana tego samego dnia w ciągu kilku godzin. Niektóre z nich w kilkanaście minut.

  4. Na podstawie ilości(wyrażona w kg) i gatunku materiału(każdy będzie miał określoną cenę za kg) program ma sam obliczać koszt materiału w zł.

Koszty inne to będzie konkretna wartość w zł, która będzie określona przez osobę wypełniającą bazę (np. koszt zużytego narzędzia, usługi obce)

Dorobiłem kolejną kolumnę"Koszt_calkowity" w której będzie sumowana wartość z kolumny “Koszty_inne” i Koszt_materialu"

5.Chodzi o to, aby pracownik nie musiał dwa razy podchodzić do tej samej karty zakłóceń(wypełnienie godziny wystąpienia zakłócenia i godziny zakończenia), a wystarczy przybliżony czas naprawy.

obrazek1g.jpg

Uploaded with ImageShack.us

Dziękuję bardzo za zainteresowanie się tematem!

Trochę się nie zrozumieliśmy, ale to moja wina, bo nieprecyzyjnie się wyraziłem. Zamiast spacji w nazwie tabeli/kolumny można używać znaku _ lub kompletnie spację ignorować, czyli możesz mieć np. Rok_produkcji lub RokProdukcji i teraz chodzi o to aby jednego schematu nazewnictwa trzymać się w całej strukturze bazy danych, czyli albo zamień np. PracownikID na Pracownik_ID (i w innych miejscach gdzie stosowałeś taki zapis) albo zamień Rok_produkcji na RokProdukcji (i w innych miejscach gdzie stosowałeś taki zapis). Usuń jeszcze z nazwy kolumny Ilosc_materialu ten nawias -> (kg) . Takich dziwnych znaków też powinno się unikać w nazwach kolumn/tabel.

Tą kolumnę NaprawaID jednak usuń i zostaw tylko ZaklocenieID (lub Zaklocenie_ID jak wolisz) i to na tej kolumnie utwórz klucz główny. Będziesz miał wprawdzie relację 1 do 1 pomiędzy tabelą Zaklocenie i Naprawa, ale myślę, że mimo wszystko może tak być.

Jeszcze parę pytań mi się pojawiło …

  1. rozumiem, że Czas_przestoju/CzasPrzestoju oraz Czas_naprawy/CzasNaprawy mogą się różnić? Pracownik szacuje sobie ile może trwać dane zakłócenie, ale jego szacowania mogą się okazać zupełnie nietrafione i naprawa będzie trwała krócej/dłużej?

  2. Czas_przestoju i Czas_naprawy podawane są w tej samej jednostce ? W minutach, czy jakoś inaczej ? Chodzi o to, że może to później ułatwić wykonywanie obliczeń przy użyciu zapytań SQL.

  3. W ramach danego zlecenia do napraw zakłóceń może być przydzielonych kilku różnych pracowników?

  1. Nie zawsze do zakłócenia będzie wymagana naprawa. Czas przestoju może być inny niż czas naprawy.

Przykładowe zakłócenia jakie występują w czasie produkcji:

Błąd w programie NC

Niedociągnięcia w dokumentacji

Brak programu NC

Nieodpowiednia kolejność operacji

Brak narzędzia

Pominięcie operacji lub jej niepełne wykonanie

Narzędzie uszkodzone

Niewłaściwy materiał

Narzędzie zajęte

Niedokładność obróbki

Błąd wykonawczy

Zajęta maszyna

Awaria obrabiarki

  1. Myślę, że czas będzie podawany w minutach. Myślałem, żeby zrobić “zabezpieczenie” żeby nie było możliwości wpisania wartości od 1 do 9, bo osobie wypełniającej mogą się mylić wartości godzinne z minutowymi, a zakłócenia które trwają do 9 min nie są rejestrowane. W sumie muszę to jeszcze przemyśleć.

3.Tak, naprawę mogą prowadzić różni pracownicy. Przykładowo jeden zespawa, drugi wyszlifuje.

Sugerujesz zmianę relacji na “wiele do wiele” między PRACOWNIK a NAPRAWA?

obrazek1oq.jpg

Uploaded with ImageShack.us

Tabele Pracownik, Zaklocenie i Maszyna są teraz moim zdaniem OK. Pozostała ta tabela Naprawa.

AD 2) Rozumiem. Możesz pokombinować i zrobić taki formularz, który będzie pozwalał użytkownikowi wprowadzić godziny w jednym polu (domyślna wartość to 0) i minuty w drugim polu (domyślna wartość to 0). Wartości z tych dwóch pól będziesz sprowadzać do jednej jednostki czasu, czyli np. minut i te minuty wstawisz do b.danych (o ile wartość będzie większa niż 9). To tylko sugestia oczywiście. Chodziło mi w tym punkcie drugim tylko o to, żeby Czas_przestoju i Czas_naprawy miały tą samą jednostkę.

AD 3) Na razie nic nie sugeruję. Na razie pytam, żeby znaleźć coś co mi nie będzie pasować. Może sobie to uporządkuję. Jest jakieś zakłócenie, np. Awaria obrabiarki i teraz, żeby to naprawić może się okazać konieczne wykonanie szeregu czynności, czyli jak pisałeś jeden zespawa, drugi wyszlifuje. I teraz do każdego z tych zadań przydzielany jest inny pracownik. Jeśli tak jest, to relacja 1 do wielu między tabelą Pracownik i Naprawa jest poprawna. Chyba, że do danego zadania np. zespawania może być przydzielonych dwóch pracowników (lub więcej) wtedy musi być relacja wiele do wielu między tabelą Pracownik i Naprawa. Teraz jeśli dane zakłócenie może wymagać wykonania kilku czynności (czytaj kilku napraw) to relacja między Naprawa a Zaklocenie nie może być 1 do 1, czyli w tabeli Naprawa klucz główny nie może być ustawiony na Zaklocenie_ID. Na razie ustosunkuj się do tego, bo nie wiem, czy dobrze rozumiem to co mi do tej pory napisałeś. Mam jeszcze jedno pytanie, ale ono zależy od tego co teraz napiszesz :slight_smile: