Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Krotkie pytanie z baz danych

18.11.2013 13:00
1
poltar
176
Senator

Krotkie pytanie z baz danych

Mam pewien dylemat dotyczacy prostej kwestii w bazie danych. Szukalem (co prawda pobieznie) w sieci i niewiele mi sie rozjasnilo, sprobuje tu.

Czy moge zalozyc w zwyklej pojedynczej tabeli warunek unikalnosci na dwa pola? nie tak aby kazde osobno bylo uniklane, ale zeby ich kombinacja byla niepowtarzalna.

zakladajac ze mamy wydzielona kolumne id ktorej ten problem nie dotyczy (ona mi zapewnia p-key'a) mam dwie kolumny nazwijmy je k1 i k2 przyjmujace dane z zakresu zwykłego inta.

k1 k2
1 1 -> ok
1 2 -> ok
2 1 -> ok
...
1 2 -> to juz dubel, baza mi ma tego pilnowac

Problem moge rozwiazac oczywiscie banalnie po stronie kodu aplikacji, zalezy mi jednak by postawic tez w bazie ograniczenia ktore wyklucza probe wstrzykniecie dowolnego dubla.

Baza postgress. (z rozszerzeniem postgis, ale to raczej bez znaczenia.)

19.11.2013 08:18
2
odpowiedz
poltar
176
Senator

Poranny podbijak :)

19.11.2013 08:26
Sanchin
3
odpowiedz
Sanchin
207
Orchid Samurai

Tworząc tabelę lub później przez ALTER TABLE ADD CONSTRAINT ... coś w stylu CONSTRAINT jakis_key UNIQUE (k1, k2)

19.11.2013 08:35
4
odpowiedz
poltar
176
Senator

Jesli to az takie proste to jest mi teraz glupio. Nie wpadl mi kompletnie do glowy taki agregat. Zaraz odpalam jakas virtualke i testuje, dzieki wielkie.

/edit
na pewno dziala to przez zalozenie indeksu

CREATE UNIQUE INDEX index_paraunikalna ON test_pary USING btree (pole1 , pole2 );

Jest tylko efekt uboczny - jak mam pole pkey typu serial to kazde wywolanie takiego dubla podbija mi licznik. Constraint zachowuje sie identycznie. To nie jest jakis duzy problem, takie niuanse juz sobie rozgryze.

Forum: Krotkie pytanie z baz danych