Mały projekt do oceny

0

Witam, postanowiłem zrobić sobie małą bazę celem ewidencji sprzętu w miejscu gdzie pracuję. Projekt będę robił w między czasie i głównym celem poza stworzeniem bazy jest nauka technologii sql oracla.. Pierwszy etap już mam za sobą zainstalowałem bazę. Teraz czas na drugi projekt samej struktury. Na razie nie duża może z czasem się rozwinie.

struktura_sql.PNG

Główne założenia
Klauzula może mieć wiele systemów lecz jeden system może posiadać tylko jedną klauzulę
Sprzęt może mieć jedną kategorię ale w jednej kategorii może być wiele sprzętu
Dysk może być w jednym komputerze (sprzęcie ) ale dany sprzęt może posiadać wiele dysków
Użytkownik Sprzętu może posiadać wiele Sprzętu lecz sprzęt może być przypisany do jednego użytkownika
Obciążenia wybrany użytkownik Sprzętu może być obciążony finansowo wieloma sprzętami lecz sprzęt może być przypinany do jednego użytkownika celem obciążenia

Prosił bym o wszelkie wskazówki osób doświadczonych bo w tym wątku chciałbym rozwijać mój projekt z waszą pomocąrelacje.PNG

0

@goscyniok: Poniżej kilka punktów na które zwróciłem uwagę:

  • Co do samych relacji to nie rozumiem jaką funkcję ma tabela Obciążenia? W tej chwili przechowywane są tam tylko IDki więc nie wiem w jakim celu miałbyś z niej korzystać.
  • Wydaje mi się, że tabelę Dyski możesz jeszcze znormalizować. Zobacz mój kursy odnośnie normalizacji bazy danych, powinien pomóc :)
  • Dobrą praktyką jest pisanie nazw tabel i kolumn przy użyciu snake_case
  • Przy ustawianiu kolumny z PK wystarczy nazwać ją ID
  • Tam gdzie masz kolumny VARCHAR2 dodaj typ wielkości np. VARCHAR2(50 CHAR)
  • Przy niektórych VARCHAR2 nie podałeś wielkości np. Stopień w tabeli UzytkownikSprzetu
  • Czemu kolumna Model jest typu BLOB?

Jeżeli będziesz miał jeszcze pytania wal śmiało :)

0

@oracledev:

O dzięki za zaangażowanie o takie uwagi mi chodziło:

ad1) Obciążenia. Chodzi tutaj że poza UżytkownikiemSprzętu który fizycznie posiada sprzęt na biurku jeszcze jest grupka osób która posiada dany sprzęt na obciążeniu finansowym.
Czyli powiedzmy Kowalski na swoim obciążeniu ma 20 komputerów, ale te 20 komputerów stoi na 20 biurkach u różnych użytkowników

ad2)Zapoznam sie i po obejrzeniu wypowiem się

ad3) Jak takie są dobre praktyki to zastosuje to w momencie implementacji już
ad4) Racja bedzie łatwiej wyszukiwać
ad50 i ad6) Oki jak robić to porządnie pododaje wartości
ad7) tutaj na pewno wdał sie błąd, Varchar2 powinien być

Oki dzięki za uwagę zapoznam się z twoim kursem wprowadzę zmiany i wrzucę jeszcze raz

0

Nie jest Ci potrzebne powiązanie między Obciążeniami a tabelą główną sprzętu, spokojnie połączysz to sobie joinami, poza tym masz już jedno połączenie między tabelą główną a użytkownikiem sprzętu, a to na użytkowniku ciąży obciążenie.
Na razie nie widzę nic innego, jak coś to dopiszę.

1

Wywaliłbym numer PESEL bo tworzysz bazę danych przetwarzającą dane osobowe. Zamiast numeru PESEL daj 4 ostatnie cyfry z numeru PESEL. Jeżeli baza ta ma się Ci do czegoś przydać to dodaj rok zakupu oraz dodatkową tabelę do zapisu ewentualnych napraw. Poza tym np. Dell oprócz s/n ma Service TAG. Jakieś uzasadnienie np. sprawy bezpieczeństwa ma takie dokładne zbieranie informacji o dyskach twardych w każdym komputerze ? Doświadczenie uczy, że w takich bazach przydają się skany dokumentów np. faktur więc następna tabela na te skany. Brakuje najważniejszego pola UWAGI !

0

To chyba jakieś służby mundurowe stopień przy użytkowniku i klauzula przy komputerze stąd może i te numery seryjne dysków:)

0

Witam wracam do gry było trochę zamieszania w pracy i nawet głowy nie miałem. @cw Brawo zgadłeś, pracuję w JW jako informatyk. Co do PESELI to jednak zostaną bo w dalszych planach rozwoju bazy będą mi potrzebne, Datkowa jeśli baza się przyjmie to osoby pracujące z danymi posiadają upoważnienie do przetwarzania danych. Piszesz o dodatkowej tabeli na naprawy i uwagi. A może być jako jedna tabela uwagi i w formie logów wpisywać, np "2021-02-7 Wymiana karty sieciowej " ?
Co do nr seryjnego i servis tag-a tutaj chyba nie ma bardzo co modzić tylko ST wprowadzić w SN
Co do skanów masz racje tylko jaki to będzie typ ?

@oracledev
Dzięki odniosłem się też do twoich uwag co do Tabeli dyski to zostawiłem obecnej formie, jakoś rozbijać na mniejsze nie widzę sensu. Ale jeśli masz dobry argument to dawaj bo ja z tym projektem się uczę jednocześnie

@kate87
Tobie również dziękuje za wypowiedź

Ogólnie trochę przeorganizowałem strukturę

Tabela Użytkownik będzie zawierać tylko dale ludzi bo w sumie nie każdy użytkownik musi mieć jakiś sprzęt na sobie a jego dane mogę trzymać

Użytkownik_Sprzętu jest połączenie użytkownika i sprzętu, 1 Użytkownik może mieć wiele sprzętu na sobie ale jeden sprzęt może być przypisany do jednego użytkownika (nie wiem czy dobrze mi wyszły połączenia )

Obciążenia ( jest to lustrzana sytuacja co powyżej )

Dodałem kolumnę uwagi służyć ma do zapisywania logów o sprzęcie, data, sprzęt i co było robione

Dodałem też tabelę Skany_Sprzet czyli "będą skany "kart sprzętu" , "kart Gwarancyjnych "

Przechwytywanie2.PNG

0

Dlaczego akurat uparłeś się na oracle? Projekt który chcesz zrobić śmiało oprzesz na mysql / mariadb, nie będziesz miał problemów z przeniesieniem go w razie czego, z licencjami itd. Blisko dekadę pracowałem równolegle na oraclu i mysql i nie widzę powodów stosowania tego pierwszego jeśli to nie jakaś terabajtowa baza. Narzędzi też więcej masz, np. do modelowania:
modelowanie baz danych

0

@Tomasz L: korzystam z Oracla bo na to mamy licencję i jest dopuszczone do wykorzystaniu u mnie w pracy.
A kolejny aspekt kiedyś się uczyłem Oracla i chyba i dlatego przystanąłem na tym

Masz jakieś uwagi co do struktury ?

0

@goscyniok: Teraz wygląda dużo lepiej niż na początku. Jedną małą uwagę do struktury jeszcze mam bo w tabeli "Sprzet" masz kolumnę "kategoria_ID" która wydaje się być FK do SPRZET_KATEGORIA a tam jest FK Sprzet_Kategoria_ID. Czy przypadkiem tabela Sprzet_Kategoria nie powinna się nazywać Kategoria?
I jeszcze jedno odnośnie formatowania. Tak jak piszesz nie jest błędnie ale ciężko się to czyta :) Stosujesz zapis snake_case w połączeniu z PascalCase. Polecam ograniczyć się do samego snake_case czyli słowa oddzielone _ bez rozróżnienia an wielkość liter. Polecam: https://medium.com/better-programming/string-case-styles-camel-pascal-snake-and-kebab-case-981407998841

0

@oracledev Dzięki za uwagi
masz rację kategoria_id powinna być FK do SPRZET_KATEGORIA i wtedy kolumna Sprzet_Kategoria_ID jest zbędna, moje nie dopatrzenie
dobra co do snake_case to już ogarnę na etapie implementacji.

Jeśli nie będzie więcej uwag to w niedzielę postaram się zaimplementować kod.
chyba że z datamodeler można jakoś wygenerować, ale to muszę poszukać .

1 użytkowników online, w tym zalogowanych: 0, gości: 1