Klucz obcy

1

Cześć. Mam problem z nadawaniem klucza obcego np tworze tabelę klienci i kolumnę numer klienta która ma być kluczem podstawowym tej tabeli Następnie tworzy tabele zamówienia i chcę żeby w tej tabeli kluczem obcym był kolumna numer klienta wyniki powinny być te same ale nie są. w kolumnie klucza obcego jest wartość null wszędzie. Proszę o pomoc

1

Przecież nie wiemy, co robisz i jak to robisz - wrzuć zapytania, które odpalasz.

0

W jaki sposób insertujesz dane? Jakie środowisko?

0

SQL 2012. O to chodzi

0

Co dokładnie robisz, by wrzucić dane?
PK i FK na pewno są prawidłowo ustawione na odpowiednich kolumnach?
Używasz ORMa, czystego SQL, jakiegoś wrappera?

Treść wykonywanych zapytań podaj i sprawdź constrainty. Daj znać co znalazłeś.

0

screenshot-20180620181639.png
z tego korzystałem nadając klucze

0
Uczynny Ogórek napisał(a):

screenshot-20180620181639.png
z tego korzystałem nadając klucze

screenshot-20180620181930.png

0

Nie wiem co masz na myśli pytając czego używam. Zapytanie robię select * from nazwa tabeli

0

A czemu te klucze obce masz nullowalne?

2

A czemu masz PLiterki w nazwach obiektów bazy danych (tabele, pola constrainty)?

0

Skąd się wzięły dane w tabelach? Były sobie kiedyś a Ty teraz dodales klucze i myślisz że magicznie się wypełnia
? Zgadlem?

0

Tabele stworzyłem dzisiaj potem zrobiłem klucze. Jak sprawić by się wypełniły te klucze obce cyframi?

0
Mistrzowski Kret napisał(a):

Tabele stworzyłem dzisiaj potem zrobiłem klucze. Jak sprawić by się wypełniły te klucze obce cyframi?

Jeśli czas nie ma znaczenia to masz rację.

0

W jaki sposób dodales dane do tabel? Ręcznie w GUI? Czy insertami? Jak w GUI to uzupełnij w GUI. Jak kod to update.
Gdy dodasz do tabeli nowa kolumnę to na istniejących danych zawsze wypełni się nullami (bo czym by innym?)

0

W sensie
update zamówienia
Where idklient is null and idprodukt is null
Tyle wystarczy?

0

Możesz odpowiedzieć na pytanie?

Ps. To się "automatycznie" nie uzupełni wg wiedzy z Twoich marzeń. Komputer nie czyta w myślach, ja tylko odrobinę.

0

Ale czemu skoro klucze podstawowe tworzą mi się automatycznie {funkcja identity} to nie pobiera mi tych samych wartości do klucza obcego który jest oparty na kluczu podstawowymi?

0

Twój problem polega na tym że robisz oderwany od rzeczywistości przykład. Nie wiem czy próbujesz zaliczyć zajęcia czy coś zrozumieć?
Chcesz żeby tabela z zamówieniami się wypełniła automatycznie identyfikatorami klientów czyli po prostu liczysz że komputer się domysli które zamówie jest którego klienta?

0

Czyli klucze obce trzeba definiować samemu. Funkcja identity może być użyta tylko raz więc używam jej do klucza podstawowego żeby mi atomatycznie tworzyło numeracje. Potem muszę patrzeć jaki numer się utworzył dla danego klienta i jego brać do klucza obcego czy jakoś inaczej?

0

No tak, do klucza obcego bierzesz PK tego, z czym ma być powiązany dany rekord.

0

Bardzo ułatwiło by pomoc Tobie gdybyś powiedział w jaki sposób wprowadziles dane do rekordów. Zresztą nie ważne. Kiedy je wprowadzales nie było jeszcze kluczy dlatego masz null (czytaj nie wiadomo)

0

Najpierw stworzyłem tabele z kolumnami (kolumny z kluczem podstawowym w tym miejscu wypełniłem. Reszta kolumn pusta)
Potem wprowadziłem dane (do reszty kolumn)
Potem nadawalem klucze obce

0

Używałem funkcji insert. Jak macie jakieś dobre stronki gdzie będą przykłady to proszę

0

Rozum prosta rzecz, nigdy nie wprowadziles informacji o tym który klient jest związany z którym zamówieniem.
Spróbuj teraz użyć "funkcji insert". Zobacz co się stanie.

Ewentualnie spróbuj zrozumieć podstawy tego co się dzieje zamiast przeklikiwac to jak malpa, która nauczyli calkowania

0

No a jak jest ze 100 tys wierszy do wprowadzenia to każdy trzeba powiązać manualnie. Nie ma jakiegoś sposobu zrobić to automatycznie

1

Nie rozumiesz.
W normalnej sytuacji aplikacja podejmuje decyzję o powiązaniu na podstawie danych, jakie do niej wprowadzisz.
Zamówienie tworzy się na podstawie koszyka, który zawiera ileś przedmiotów. Gdy finalizujesz zamówienie, zostaje ono wrzucone do bazy wraz z kluczami przedmiotów, które zakupiłeś. To w mocnym, uogólnionym skrócie.

To co Ty usiłujesz zrobić to jakaś manualna aberracja, nie masz przed oczami tego jak to powinno wyglądać, więc nie umiesz sobie tego wyobrazić. Przecież nikt normalny nie dodaje takich danych ręcznie na dużą skalę... To byłoby absurdalne, nie sądzisz? :P

Powiedz jeszcze raz co chcesz uzyskać i w jakim celu, bo tworzenie sobie powiązań dla samego tworzenia, nie mając żadnego mechanizmu logicznego, który za to odpowiada jest bez sensu.

0

Po kiego grzyba Ci kolumny produkt, imie i nazwisko w tabeli zamówienia? Przecież te dane już są w innych tabelach!

Jak masz dane w tabeli produkt i klient to po prostu piszesz insert into zamówienie (idklienta, idproduktu) values (2, 5) i wtedy w tabeli zamówienie masz rekord łączący klienta 2 z produktem 5.

0

Mam 3 tabele. Produkt, klient i zamówienie. W tabeli zamówienie znajdują się informacje po części z produkt po części z klient. Chcę żeby tabela zamówienie była powiązana z tabelą klient i tabelą produkt, bo np chce wiedzieć jaki jest wiek osoby która kupiła kota (wieku nie ma w tabeli zamówienie). Do tego muszę mieć identyczne kolumny w tych 2 tab. Przy 5 wierszach to zrobię manualnie ale przy np 1000000 to już nie. Więc nie wiem jak to zrobić. Ponadto klucz podstawowy ma być unikatowy więc jak jest nim numer zamówienia to trochę lipa bo np jak ktoś kupi kota i psa to będzie to 1 zamówienie ale zapisane w 2 wierszach. To z kolei będą 2 różne numery zamówień więc tego też nie wiem bo przecież ma być ten sam numer

0
Mistrzowski Kret napisał(a):

Mam 3 tabele. Produkt, klient i zamówienie. W tabeli zamówienie znajdują się informacje po części z produkt po części z klient. Chcę żeby tabela zamówienie była powiązana z tabelą klient i tabelą produkt, bo np chce wiedzieć jaki jest wiek osoby która kupiła kota (wieku nie ma w tabeli zamówienie). Do tego muszę mieć identyczne kolumny w tych 2 tab. Przy 5 wierszach to zrobię manualnie ale przy np 1000000 to już nie. Więc nie wiem jak to zrobić. Ponadto klucz podstawowy ma być unikatowy więc jak jest nim numer zamówienia to trochę lipa bo np jak ktoś kupi kota i psa to będzie to 1 zamówienie ale zapisane w 2 wierszach. To z kolei będą 2 różne numery zamówień więc tego też nie wiem bo przecież ma być ten sam numer

tabela zamówienie przechowuje

id zamowienia
id produktu albo id produktów.
id klienta
i stąd to wyciągasz.

Poczytaj: Normalizacja baz danych, bo to jest w dużej mierze ten twój problem.

0

@WeiXiao:

tabela zamówienie przechowuje

id zamowienia
id produktu albo id produktów.
id klienta

Jeśli dobrze zrozumiałem to ma być tabela przechowująca poszczególne pozycje zamówień, więc "id klienta" jest tutaj zupełnie zbędne i powinno być w nadrzędnej tabeli zawierającej listę zamówień

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