kilka tabel i relacje, klucz główny->klucz obcy->I jeszcze dalej ??

1

WITAM
Od jakiegoś czasu mierzę się z problemem mianowicie :
MAM Tabele
dostawcy(id_dostawcy, nazwa,adres)
materialy_Wejsciowe(id_mat_wej, id dostawca,ilosc itp)
id_dostawca z tabeli materialy_wejsciowe jest kluczem obcym a id_dostawcy z tabeli dostawcy to klucz główny
I teraz :
mam tabele materialy_wyjsciowe(id_mat_wyj ,
* id_mat_wej, id_dostawcy**)

Czy da się zrobić żeby z materialy_Wejsciowe(id_dostawca ) ktory czerpie z dostawcy(id_dostawcy,) utworzyc powiazanie do
materialy_wyjsciowe( id_dotawcy) ?? nie mogę z obcego zrobić dalej obcego, nie działa :P> (Msg 1776, Level 16, State 0, Line 137

There are no primary or candidate keys in the referenced table 'materialy_wejsciowe' that match the referencing column list in the foreign key 'fk_mat_wej_dst'.)

Nie wystarczy że materialy_wyjsciowe( id_mat_wej) powiążę z dostawcy(id_dostawcy) bo może się zdarzyć taka sytuacja :

Np. mamy 5 dostawcow o id 1,2,3,4,5 i w materialy_wejsciowe dostawca o id 2 złożył 2 zamówienia id 3,4,5 po jednym a dostawca 1 nie złożył żadnego. I w tabeli materialy wyjsciowe nie ma być możliwości wpisania id dostawcy nr 1 gdyż nie występuje w materialy_wejsciowe (id_dostawca).
A w materialy_wejsciowe (id_dostawca) mogę wybrać tylko z dostawcy(id_dostawcy)

Szukałem bardzo długo rozwiązania, wymiękam.

Może wyjaśnić coś więcej, wkleić kawałek kodu ?

0

A nie możesz wyciągać id_dostawcy z tabeli materialy_wejsciowe przy użyciu relacji?

0
  1. Jaka to baza
  2. Tak da się dodać kolejny klucz obcy z tabeli dostawcy tylko po co? Lepiej dodać daty zamówienia albo coś w ten deseń.
  3. Jeśli nie masz jakiegoś id w którejś tabelce, a powinno być to znaczy że coś zostało spartaczone w momencie dodawania tego id w różnych tabel. Po prostu trzeba odsłużyć dodanie rekordu.
  4. Jeśli dostawca nie złożył zamówienia to z jakiej okazji masz go widziec? Nie rozumiem toku rozumowania, nie złożył to nie złożył, chyba że zrobisz left join do tabelki dostawcy z jakąś adnotacja typu brak zamówienia.
    Coś na zasadzie

Select t1.id_dostawcy, t2.id_zamowienia
From TAB1 t1
Left join tab2 T2 on t1.id_dostawcy = t2.id_dostawcy

I taka konstrukcja pozwala na wykazanie dostawców bez zamówień.

1
kate87 napisał(a):
  1. Jaka to baza

To bez znaczenia.

  1. Tak da się dodać kolejny klucz obcy z tabeli dostawcy tylko po co? Lepiej dodać daty zamówienia albo coś w ten deseń.

Lepiej to rejestrować dokumenty dostaw, a każdy taki dokument ma jednego dostawcę.
I tak to się dzieje w realnym świecie, a wiec system go odwzoruje.
No i wtedy nie ma z niczym żadnego wyżej opisanego problemu.

  1. Jeśli nie masz jakiegoś id w którejś tabelce, a powinno być to znaczy że coś zostało spartaczone w momencie dodawania tego id w różnych tabel. Po prostu trzeba odsłużyć dodanie rekordu.
  2. Jeśli dostawca nie złożył zamówienia to z jakiej okazji masz go widziec? Nie rozumiem toku rozumowania, nie złożył to nie złożył, chyba że zrobisz left join do tabelki dostawcy z jakąś adnotacja typu brak zamówienia.
    Coś na zasadzie

Select t1.id_dostawcy, t2.id_zamowienia
From TAB1 t1
Left join tab2 T2 on t1.id_dostawcy = t2.id_dostawcy

I taka konstrukcja pozwala na wykazanie dostawców bez zamówień.

No nie wiem, bo ja tu widzę t2.id_zamowienia (skoro jest id_zamowienia to znaczy, że zamówienie istnieje w systemie) a potem złączenie do tab2 aby wyciągnąć dostawcę.
Ergo - tab2 to nagłówek zamówienia. Czy nie? :)

Ja bym to zrobił normlanie, czyli tak:

screenshot-20220110120420.png

I dalej; nie ma potrzeby tworzenia dwóch tabel materialy_Wejsciowe i materialy_wyjsciowe, ponieważ wszystko jest w dokumentach.
Wejście (na magazyn) to jest inny typ dokumentu tj. PW, PZ lub MM+.
A wyjście (na magazyn) to również inny typ dokumentu tj. WZ, RW lub MM-

Rozliczanie np. pobrania RW wg dostaw to jest kolejna tabela wiele-do-wielu pomiędzy tabelą ZamowieniaPozycje gdzie zapisujesz dokładnie co zostało pobrane, z jakiej konkretnie dostawy i w jakiej ilości. Dlatego wiele-do-wielu, ponieważ jedna dostawa może być rozliczona wieloma pobraniami.

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