Złożnony klucz główny na podstawie naturalnego identyfikatora - czy to dobry pomysł?

0

Mam system składający się z nieustalonej liczby stanowisk (małej: n < 255).
Każde stanowisko ma własny unikalny numer nadany fizycznie w czasie produkcji.
Stanowiska mogą być uruchamiane niezależenie od siebie - trzeba być przygotowanym na dowolną kombinację uruchomionych stanowisk.
Każde stanowisko generuje dane. Udostępnia je pozostałym stanowiskom i zapisuje je do własnej bazy danych.
Dane pochodzące z innych stanowisk są również zapisywane w lokalnej bazie danych.

Czy tworzenie złożonego klucza głównego w tabeli z Danymi na podstawie naturalnego identyfikatora jakim jest Numer Stanowiska jest bardzo złym pomysłem?

CREATE TABLE test."Stanowiska"
(
  "ID_Stanowiska" integer NOT NULL,
  "Nazwa" character(255),
  CONSTRAINT "pk_Stanowiska" PRIMARY KEY ("ID_Stanowiska")
)

CREATE TABLE test."Dane"
(
  "Stanowisko_ID" integer NOT NULL,
  "NumerKolejny" integer NOT NULL,
  "Wartosc" integer,
  "CzasUtworzenia" time with time zone,
  CONSTRAINT "pk_Dane" PRIMARY KEY ("Stanowisko_ID", "NumerKolejny"),
  CONSTRAINT "fk_Stanowiska" FOREIGN KEY ("Stanowisko_ID") REFERENCES test."Stanowiska" ("ID_Stanowiska") MATCH SIMPLE  ON UPDATE NO ACTION ON DELETE NO ACTION
)

 
0

wg mnie w tym konkretnym przypadku nie - po pierwsze są to dwa inty więc indeksy czy też szukanie po nich nie będą jakieś ogromne. Po drugie wnioskując po nazwach kolumn to i tak większość wyszukiwań będzie po takim właśnie kluczu. Tylko mnie zastanawia jak chcesz wymusić numerowanie po stanowisko_id. Bo jeśli numerKolejny będzie autoinc to sens klucza złożonego bierze w łeb :)

0

System zakłada brak modułu centralnego, który można by obarczyć odpowiedzialnością za globalnie unikalne identyfikowanie danych.
W sytuacji, kiedy każde stanowisko może generować dane niezależnie od pozostałych,
zdecydowałem się na zapewnienie unikalności identyfikatorów w ramach stanowiska. (np. autoinc)

Chcę też mieć możliwość łącznego przetwarzania danych pochodzących z rożnych stanowisk.
Dlatego wymyśliłem, że na poziomie całego systemu, dane powinny być identyfikowane przez ID_Stanowiska + ID_Danych.

Może jest lepszy sposób na zapewnienie takiej rozróżnialności?

0

a to jak najbardziej będzie OK - bo rozumiem, że dane do centrali będą tylko z poszczególnych stanowisk spływały już obrobione i w tej tabelce centralnej nie będzie żadnych pól autoinc

0

stanowisko generując kolejne dane nada im kolejne numery (na podstawie lokalnej sekwencji - może niekoniecznie autoinc) , doklei własny identyfikator i pośle w świat

inne stanowiska odbiora dane i wrzuca do swoich tabel bez zadnych zmian

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