Normalizacja - utworzenie poprawnej bazy

0

Witam,
Poszukuje osoby chętnej by mi wytłumaczyła (jestem nawet gotów zapłacić) proces normalizacji na przykładzie prostej bazy sklepu np. żeby w 3NP miało 9 tabelek, bez wodotrysków. Przygotowuję projekt do szkoły i bardzo mi zależy na poszerzeniu tej wiedzy a myśle że sa tu osoby dla których to 'pikuś, kwestia czy mogę/chcą mi pomóc.
Proszę o kontakt

0

Zrobiłeś coś już sam, czy w ogóle się do tego nie zabrałeś?

0

Powiedzmy że pomińmy opis normalizacji, trochę przeczytałem na ten temat jednak brakuje mi pomysłu co dołozyć do mojej bazy.
Nie czuję się dobry w projektowaniu bazy więc chciałbym aby ktoś to sprawdził,a także podpowiedział jakie dołożyć kolumny. Chciałbym mieć w 3 postaci normalnej ok 9 tabel, a nie wiem jakie oprócz tego dodać tabele by zbytnio jej nie skomplikowac bo nie ma takiej potrzeby.
Załączam diagram tego co mam obecnie. Może wydać się śmieszne że tylko tylę ale dlatego proszę o pomoc.

1

Ale klient to może być firma, a firma ma pracowników. Firma może być w organizacji. Produkt może mieć kategorię, podkategorie itd :P. Nie wiem czy to nie jest zbytnie rozdymanie ;].
Czy to jest sklep internetowy? Bo zwykle w takich sklepach można dodawać do koszyka i to bym proponował w takim wypadku dodać.

1

Nie kumam co to za tabela Transakcje. Klient na raz może kupić tylko jeden produkt? To podobno w latach osiemdziesiątych tak było, że tylko ocet można było kupić.

  1. Produkt powinien być jakoś opisany, np. za pomocą oddzielnej tabeli Atrybuty (id_produktu, klucz, wartość), tak żeby można było mieć dowolną liczbę różnych atrybutów dla różnych produktów (np. dla książki to liczba stron i typ okładki, a dla wanny długość i szerokość).
  2. Produkt ma też np. Producenta.
  3. W sklepie zazwyczaj używa się Koszyka, zaś ten trzeba połączyć z Produktem poprzez tabelę pośrednią (np. PozycjeKoszyka), zawierającą dodatkowo informacje o ilości kupionych produktów.
  4. Można np. dodać słowniki Typów płatności i Sposobów dostawy dla Zamówień, które tutaj zwą się Transakcjami chyba.
0

Raczej taki stacjonarny, program do obsługi przez sprzedawcę/administratora.
Dodaję również przykłady baz sklepów, które udało mi się znaleźć, mam nadzieję że uda się coś wspólnie wykombinować :)

1

To może od początku. Najpierw się zastanów, co chcesz mieć w tym sklepie, tzn.:

  • czy produkty mają być jakoś posegregowane w działy/kategorie;
  • czy produkty mają być jakoś opisane;
  • jakie informacje o kliencie mają być przechowywane;
  • czy klient ma mieć dostęp do koszyka, czy jedynie sprzedawca składa zamówienie na podstawie oczekiwać klienta (jak rozumiem ta druga opcja?);
  • czy mają być przechowywane informacje o fakturach;
  • czy mają być przechowywane informacje o danych dostawców;
  • czy mają być przechowywane informacje o stanie magazynowym produktów.
0

somekind, nie wiem czy te pytania zadaleś bym sam sobie na nie odpowiedział, mam nadzieję że jesteś gotów mi pomóc stworzyć tą baze, więc odpowiem:
-produkty w kategoriach (tu można wydzielić pewnie osobną tabelę jak mam w obecnej formie)
-nie, produkty mają mieć jedynie nazwe, cene, ilosc, nop i do jakiej kategorii należą

  • informacje o klienicie : nazwisko, imie, adres, miejscowosc, kraj - choć jestem otwarty na inne propozycje, a obawiam się sytuacja z firmą/organizacją nie skomplikowałaby dla mnie sprawe
  • na razie rozwiązałem to tak że spredawca wszystko robi na życzenie klienta, czyli drugie
  • co do trzech ostatnich pytań, obawiam się że to skomplikuję sprawe, choć jakby ktoś rozrysował podpowiedział jak zrobić mysle że rozwiązało by sprawę i uzyskalbyśmy te 9 tabel w 3 NF

dziękuję za dotychczasową pomoc

1

No dobra, to lecimy...

  1. Twoja tabela Kategorie ma kolumę Kategoria. Nie jest to zbyt jasne, powinna to być raczej Nazwa albo NazwaKategorii.
  2. Kolumna Ilosc w tabeli Produkty. Po co ona tam?
  3. Do czego służy kolumna Rabat w tabeli Transakcje? Bo jeśli wpływa jakoś na cenę, to na jaką cenę? Sumę wartości produktów zawartych w transakcji?
  4. I co to za kolumna Ilosc w tabeli Transakcje?
  5. Relacja Transakcji z Produktami to relacja typu N:M, bo jedna transakcja może zawierać wiele produktów, a jeden produkt może występować w wielu transakcjach.. Dlatego trzeba to powiązanie zrealizować przez pomocniczą tabelę pośrednią (np. PozycjeTransakcji) z kolumnami: IdTransakcji, IdProduktu, IloscProduktu (bo można kupić więcej niż jeden produkt danego rodzaju w danej transakcji. I to chyba załatwia to, co próbowałeś osiągnąć kolumnami Ilosc w Transakcjach i Produktach.
  6. Dodałbym jeszcze tabelę Producenci (Id, Nazwa) połączony z nową kolumną IdProducenta w tabeli Produkty.
  7. No i przemyśleć należy sposób przechowywania adresów. Obecny sposób, jako kolumny w tabeli Klienci jest słaby, bo wartości kolumn Kraj, Miejscowosc, Ulica, Kod_pocztowy będą się powtarzały.
    Myślę, że można by zrobić takie tabele:
    a) Panstwo (Id, Nazwa)
    b) Miejscowosc (Id, Nazwa, IdPanstwa)
    c) Ulica (Id, Nazwa, IdMiejscowosci)
    d) KodPocztowy (Id, Wartosc)
    e) KodUlica (IdKodu, IdUlicy) - pomocnicza, ale niezbędna, bo zarówno jedna ulica może mieć wiele kodów pocztowych, jak i jeden kod może być przypisany do wielu ulic.

Wszystko to, przy założeniu, że to projekt szkolny, a nie praktyczne rozwiązanie.

0
  1. Zmienione na "NazwaKategorii"
  2. Stworzyłem ją by opisywała ile jest dostępnych sztuk tego produktu w sklepie, zrobiłem to z założeniem aby później zrobić np. że przy zawieraniu transakcji ta liczba będzie zmniejsza o ilość 'kupionych/zamówionych' produktów
  3. Przy zawieraniu transakcji sprzedawca może okreslic procentowo rabat, później od całosci jest ta kwota odejmowana. [taki bajerek...]
  4. Ilość w tabeli Transakcje - pokazuje ile klient zyczy sobie sztuk tego produktu przy zamówieniu
  5. niebardzo rozumiem jakie to ma przyniesc korzysci, ale utworzyłem tabele
  6. Myślę ze to niepotrzebne choć od bidy można by wstawić jakby brakowało, pisze tak z tego powodu że do kazdego produktu musiałbym przypisać producenta, a teraz jako nazwa produktu widnieje np. "biurko ikea larke zielone'
  7. utworzyłem, pominałem jednak punkt 'e', wydaje mi się za bardzo zagmatwane, 'we don't need go deeper' ;)

Zmieniłem to w bazie, jednak nie utworzyłem relacji ( z tym PozycjeTransakcji nie bardzo jak), obecny stan w załączniku.

Dziękuję, bardzo doceniam Twoją pomoc, wreszcie coś ruszyło.

0

Ad 3) Czyli cena zakupu wynikająca z Transakcji, to (Transakcje.Ilosc * Produkty.Cena) * (100 - Transakcje.Rabat)?
Ad 4) Czyli klient nie może kupić w ramach jednej Transakcji kilku różnych Produktów?

0

Ad 3) no coś podobnego, jezcze tego nie oprogramowałem, jednak chciałem tą kolumną Rabat zrobić by zapisało ile udzielono rabatu przy zakupie
CenaProduktu * Ilosc(nieprzkraczająca tyle ile jest 'na zapleczu') = WyliczonaCena
nastepnie mozna wybrac rabat i wylicza koncową cene transakcji
WyliczonaCena - WyliczonaCena * rabat/ 100 = KoncowaCenaTranskacji
Nie wiem czy się jasno wyraziłem, alejest dośc pozno, a jako że nie mam w tej chwili dostępu do źródeł programu to jutro to sprawdzę i w razie błedu skoryguje, choć wydaje mi się na 99% że tak było ;)
Ad 4) Wiem, że to mało rzeczywiste, ale tak to rozwiązałem. Jedna transakcja = dowolna ilość jednego produktu..

0
uczen94 napisał(a)

Ad 4) Wiem, że to mało rzeczywiste, ale tak to rozwiązałem. Jedna transakcja = dowolna ilość jednego produktu..

No właśnie - a dzięki tabeli PozycjeTransakcji możesz mieć dowolne ilości różnych produktów dla każdej transakcji.
Nie dość, że bardziej zgodne z rzeczywistością, to jeszcze masz więcej tabel, o które prosiłeś. :)

0

to jak to rozwiązać? musiałbym mieć taki koszyk ? w sensie zamiast 'zawrzyj transakcje' to 'dodaj do koszyka' ?
Czyli już jesteśmy blisko ukończeni, tylko jeszcze odpowiednie klucze ponadawać. Mógłbyś podpowiedzieć przez skłądnie SQL jak powiązać tamte tabele: PozycjeTransakcji, Panstwo, Miejscowosc, Ulica ?

0

ponawiam prośbęco do ostatniego postu, przydałaby mi się pomoc.
takze chcę zapytać o to co dołączyłem na początku, http://4programmers.net/Forum/Bazy_danych/184788-normalizacja_-_utworzenie_poprawnej_bazy?mode=download&id=986 to jest 2 postać normalna ?

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