Struktura bazy danych/relacje

0

Cześć,
jestem w trakcie tworzenia bazy danych sklepu. Stworzyłem taki oto schemat:
https://zapodaj.net/a6f0dabaa9337.png.html

Przed wprowadzeniem danych do bazy chciałbym się upewnić, czy wszystkie połączenia są ok.
Wydaje mi się, że pomiędzy tabelą magazyn a towary powinien być związek 1:1.
Nie jestem też w 100% pewien co do hierarchii encji pracownicy.
Czy ten schemat jest ok, czy coś trzeba w nim poprawić?

Pozdrawiam

0
  1. Masz niejednorodne nazewnictwo - z jednej strony nr_transakcji, a z drugiej id_klient (a nie id_klienta) czy id_pracownik.

  2. Nazwy tabel powinny być w liczbie mnogiej (lub przynajmniej konsekwentnie z resztą), czyli sprzedaze, a nie sprzedaz.

  3. Zamiast trzech tabel opisujących pracowników (pracownicy, zwykly i kierownik) sugerowałbym jedną tabelę pracownicy z wszystkimi wymaganymi polami oraz polem typ (enum).

  4. Skoro tabela nazywa się sprzedaze, klucz podstawowy powinien się nazywać id_sprzedazy.

  5. Zamiast sprzedaze + szczegoly_sprzedazy, sugerowałbym zamowienia + zamowienia_produkty.

  6. szczegoly_sprzedazy.ilosc powinien być unsigned.

  7. Dlaczego osobno pracownicy.imie oraz pracownicy.nazwisko zamiast pracownicy.imie_nazwisko (varchar(100)?).

  8. nr_domu -> numer_domu, nr_telefonu -> numer_telefonu - nie ma co oszczędzać na trzech bajtach.

  9. Data ważności towaru raczej dotyczy miejsca magazynowego niż towaru samego w sobie (możesz mieć dwie dostawy, z czego jedna będzie miała ważność do roku, a druga do półtorej na przykład).

  10. towary.cena -> towary.cena_kupna (a najlepiej cena_kupna_brutto czy _netto, to samo co do ceny sprzedaży).

  11. Brakuje towary.vat.

  12. Zamiast towary.stan_na_sklepie, lepiej trzymać stan w tabeli magazynowej.

0

Na temat odpowiadaj w postach;

zrobiłem tak, żeby pokazać hierarchię encji pracownik.

Nie rób tak - niepotrzebnie komplikuje to prosty design bazy.

A jak wyglądają związki między tabelami?

Wrzuć poprawioną wersję to zobaczymy ;-)

0

Po poprawkach:
https://zapodaj.net/df081bdead4f2.png.html
Jeszcze coś pododaje do tabel kierownik i zwyly, żeby bardziej widoczna była różnica między nimi.

0
  1. Jeśli faktycznie tak bardzo chcesz mieć trzy tabele do opisywania pracowników (co mimo wszystko odradzam), nazwij je pracownicy, pracownicy_kierownicy oraz pracownicy_zwykli, a do tabeli pracownicy dodaj pole stanowisko enum('zwykly', 'kierownik'), coby dało się rozróżnić.

  2. Istnieje jakiś powód dla którego wykorzystujesz int(4) zamiast int(11)?

  3. Teraz zauważyłem, że Ty swoją tabelę z produktami nazwałeś towary - albo przemianuj ją na produkty, albo zmień zamowienia_produkty na zamowienia_towary.

  4. Może stwórz tabelę producenci i zamiast trzymać towary.producent, miej towary.id_producenta?

  5. magazyn.na_stanie -> magazyn.ilosc + unsigned.

  6. zamowienia_produkty.cena -> zamowienia_produkty.cena_jednostkowa_brutto na przykład (albo samo cena_jednostkowa) tak, aby było w każdym razie jasne, co oznacza ta wartość.


Związki same w sobie wyglądają dobrze jak na moje oko - poza faktem, że mieszasz typy (np. łączysz zamowienia_produkty.id_zamowienia, które jest int(4), do zamowienia.id_zamowienia, które jest int(11), podczas gdy powinny być identyczne).

0

Po dalszych poprawkach:
https://zapodaj.net/48ee231db4022.png.html

Też bym najlepiej wyrzucił podział pracowników, ale muszę pokazać hierarchię encji. Co do mieszania typów to uparłem się na długość 4(teraz zmieniłem na wartość domyślną), a w zamówieniu nic nie wpisałem i domyślnie wstawiło 11, stąd przypadkowo ono wystąpiło.
Resztę zrobiłem tak jak napisałeś.
Dzięki za obszerne wytłumaczenie.

Edit. producenci.nazwa -> varchar a nie int

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