Połączenie między tabelami

0

Witam w bazie mam dwie tabele towar_sprzedany i towar_kupiony przy czym składają się z :

towar_kupiony:
dostawca
data_dostarczenia
cena_zakupy
ilość
*rodzaj_towary

towar_sprzedany
klient
data_sprzedania
cena_sprzedaży
ilość
*rodzaj_towary

Nie mogę znaleźć połączenia między dwoma wyżej wymienionymi tabelami.

Kombinowałem z rodzajem towar ale nie można łączyć przez tabele słownikową, więc spróbowałem z ceną. Stworzyłem więc tabele "cena" i tam ustaliłem dla danego towaru stałą cenę kupna i sprzedaży. Utworzyłem nową tabele rodzaj towary i połączyłem z tabelą cena. A potem tabelą cena związałem tabele towar_sprzedany i towar_kupiony.

I tu jest problem

Czy dałoby się zrobić tak że jak np. w tabeli towar_sprzedany wybieram rodzaj towaru jako krzesło to automatycznie wyskoczyła by mi cena przypisana temu rodzajowi towaru z tabeli "cena" ?

Pole rodzaj_towaru powtarza mi się w aż 3 tabelach więc musiałem utworzyć pomiędzy nimi a tabelą rodzaj towaru relację. Czy nie jest błędem że aż 3 razy się powtarza ???

2

Cena? A co zrobisz jak się zmieni, albo jak dwa+ towary będą mieć taką samą?
Masz pole rodzaj_towary (rodzaj_towaru chyba powinno być?), jeśli - w co wątpię - unikalnie identyfikuje konkretny towar, to łącz bezpośrednio po tym polu (żadna tabela słownikowa po drodze nie jest potrzebna). Jeśli jest inaczej, to zrób to koszernie i dodaj pole id do towar_kupiony oraz klucz obcy do tego pola z towar_sprzedany.
A najlepiej zrób tak: dodaj kolumny id do obu istniejących tabel i jeszcze tabelkę łączącą kupno ze sprzedażą (wiele do wielu) z kolumnami id_zakupu, id_sprzedaży, ilość. Umożliwi Ci to sprzedanie za jednym zamachem jednej rzeczy z wielu zakupów (to sytuacja, kiedy klient kupuje 100 sztuk, a Ty masz na stanie cztery zakupy po 30 sztuk).

0

Zadawaj pytania dotyczące wątku w wątku, a nie w komentarzach.
Nie rozumiem o co Ci chodzi. Tabela pośrednicząca pozwala na podanie wszystkich zakupów, które złożyły się na sprzedaż klientowi, popatrz na to (pisane z palca):

select s.*, ss.Count, b.* from ProductsSold s
join ProductsSellSources ss on s.Id = ss.SoldId
join ProductsBought b on b.Id = ss.BoughtId
0

jeśli jest to jakiś projekt albo baza na etapie projektowania to te dwie tabele należy zastąpić jedną - przecież tam są dokładnie te same dane! Co więcej pola dostawca i data_dostarczenia (analogicznie klient, data_sprzedania) należy wydzielić do osobnej tabeli - to klasyczny przykład dokumentu, który powinien się składać z nagłówka (jeden rekord) i pozycji (wiele rekordów).
nagłówek powinien zawierać min. numer dokumentu, datę (zakupu/sprzedaży), kontrahenta (odbiorcy i dostawcy też powinni być w jednej tabeli), typ dokumentu (zakup/sprzedaż). Natomiast pozycja powinna zawierać min. id nagłówka, towar, ilość, cena.

Jeśli natomiast jest to baza działającego programu to ewidentnie została skopana :/.

0
abrakadaber napisał(a):

Jeśli natomiast jest to baza działającego programu to ewidentnie została skopana :/.
I za wszelką cenę ja bym dążył aby to poprawić. Nie wyobrażam sobie pracy na bazie gdzie mam oddzielne tabele dla przychodów a oddzielne dla rozchodów. W jednej bazie pobranie historii obrotów czy stanu to pestka. Przy dwóch tabelach byłoby więcej zachodu i mniej optymalnie przecież...

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