Kilka kluczy głównych w tej samej tabeli, które są kluczami obcymi

0

Hej, mam taką bazę:

user image

Jaki jest cel ustawiania kilku kluczy głównych w jedej tabeli skoro są kluczami głównymi pozostałe poza jednym prawidłowym kluczem podstawowym ? Co ma na celu takie działanie ?

Zauważyłem że czasami pewne klucze w skryptach tworzenia bazy są przedstawiane jako klucze obce a inne które są kluczami obcymi są dodawane to tabeli jako klucze główne, dlaczego takie coś się robi ?

Korzystam z sql oracle.

Dziękówka za pomoc :]

0

to nie jest kilka kluczy głównych! Tabela może mieć tylko JEDEN PK. To jest złożony PK.
A drugiego nie bardzo rozumiem. Może chodzi o to, że FK może się odwoływać jedynie do PK

0
Misiekd napisał(a)

to nie jest kilka kluczy głównych! Tabela może mieć tylko JEDEN PK. To jest złożony PK.
A drugiego nie bardzo rozumiem. Może chodzi o to, że FK może się odwoływać jedynie do PK

Sry że tak późno odpisuję ale nie miałem dostępu do internetu przez 2 dni prawie, a więc przejdzmy do rzeczy oto przykład zastosowania z dwoma PK:

CREATE TABLE  "SAMOCHODY" 
   (	"ID_SAMOCHODU" NUMBER NOT NULL ENABLE, 
	"ID_DEALERA" NUMBER NOT NULL ENABLE, 
	"ID_MODELU" NUMBER NOT NULL ENABLE, 
	"POJSIL" NUMBER, 
	"WARTOSC" NUMBER NOT NULL ENABLE, 
	"ID_WLASCICIELA" NUMBER NOT NULL ENABLE, 
	 CONSTRAINT "SAMOCHODY_PK" PRIMARY KEY ("ID_SAMOCHODU", "ID_DEALERA") ENABLE
   )

Czyli dla IDSAMOCHODU nie ma nic nadzwyczajnego jako PK, ale IDDEALERA jest FK, a więc dlaczego zostaje ustawione jako PK ? ID_WLASCICIELA jest też FK ale tym razem nie ustawiany jest jako PK, dlaczego takie coś się robi ?

Pozdrawiam.

0

jeszcze raz TO NIE SĄ DWA PK!! TO JEST JEDEN ZŁOŻONY PK. A w tym wypadku fakt, że id_dealera jest też FK nie ma żadnego znaczenia - PK ma za zadanie jednoznacznie identyfikować rekord w tabeli. W tym konkretnym przypadku ktoś po prostu założył, że różne samochody mogą mieć u różnych dealerów takie same id więc aby jednoznacznie zidentyfikować konkretny samochód oprócz jego id musisz jeszcze wiedzieć do którego dealera należy.

0
Misiekd napisał(a)

jeszcze raz TO NIE SĄ DWA PK!! TO JEST JEDEN ZŁOŻONY PK. A w tym wypadku fakt, że id_dealera jest też FK nie ma żadnego znaczenia - PK ma za zadanie jednoznacznie identyfikować rekord w tabeli. W tym konkretnym przypadku ktoś po prostu założył, że różne samochody mogą mieć u różnych dealerów takie same id więc aby jednoznacznie zidentyfikować konkretny samochód oprócz jego id musisz jeszcze wiedzieć do którego dealera należy.

fooW tym konkretnym przypadku ktoś po prostu założył, że różne samochody mogą mieć u różnych dealerów takie same id więc aby jednoznacznie zidentyfikować konkretny samochód oprócz jego id musisz jeszcze wiedzieć do którego dealera należy. foo

No już trochę jaśniej ale nie do końca rozumiem kiedy może taka sytuacja zaistnieć - nie mogę sobie tego wyobrazić (?)

Przecież opisaną przez Ciebie sytuację realizuje FK a więc po co złożony PK tutaj ?

Czy mógłbyś to jakoś zobrazować, bo nie mogę tego sobie wyobrazić.

Dzięki za pomoc :)

0

to może inaczej bo widzę, że coś ciężko
odczep się od tego FK! Co Cię on tak obchodzi. FK jest tylko i wyłącznie po to abyś miał pewność, że wartość wpisana do komórki(ek) na których jest FK ma swoje odwzorowanie w tabeli na którą FK wskazuje (plus pewne automaty przy usuwaniu/zmianie wartości). Koniec kropka. Nic więcej nic mniej.
Natomiast PK ma za zadanie IDENTYFIKOWAĆ KONKRETNY WIERSZ W TABELI oraz gwarantować, że w jednej tabeli żadne dwie wartości z kolumn(y) na których jest założony PK nie będą się powtarzać. Koniec i kropka.

Co do tego jakie pola są PK to o tym decyduje PROJEKTANT bazy i jeśli w "jego chorym umyśle" narodzi się pomysł aby w każdej tabeli PK był np. na wszystkich kolumnach to może tak zrobić i nikt mu nie zabroni. A cy to jest poprawne, słuszne i ma jakiekolwiek uzasadnienie to już inna bajka.

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