Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> czym się różni PRIMARY KEY( c1, c2 ) od UNIQUE ( c1, c2 )
jolam
post 20.09.2009, 22:40:02
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


Witam serdecznie

Chciałabym aby w mojej tabeli pary wartości z 2 kolumn się nie powtarzały. Czyli aby nie było np takiej pary: 2,2,3 jeśli już istnieje 2,3,3.
Znalazłam dwa rozwiązania:
CREATE TABLE t(
c1 INTEGER,
c2 INTEGER,
c3 INTEGER,
UNIQUE( c1, c2 )
)
CREATE TABLE t(
c1 INTEGER,
c2 INTEGER,
c3 INTEGER,
PRIMARY KEY( c1, c2 )
)

Czym one się różnią? Które lepsze? Bardzo proszę o pomoc

pozdrawiam Jola
Go to the top of the page
+Quote Post
jmail
post 21.09.2009, 03:10:30
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

Ostrzeżenie: (0%)
-----


Primary key utworzy CI klucz główny co ma duże znaczenie przy korzystaniu z kluczy obcych. Poza tymw oparciu o ten klucz będzie stworzony główny index dla tabeli.

w Twoim wypadku nie ma to znaczenia większego chyba, że zamierzasz przechowywać miliony informacji - wtedy index zdecydowanie się nada. tablica zindexowana działa szybciej
Go to the top of the page
+Quote Post
jolam
post 22.09.2009, 21:27:07
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


Czyli PRIMARY KEY przyśpiesza wyszukiwanie w takiej tabeli? A jeśli ja będę szukać w tej tabeli tylko po pierwszej kolumnie to takie
CREATE TABLE t(
c1 INTEGER PRIMARY KEY,
c2 INTEGER,
c3 INTEGER,
UNIQUE( c1, c2 )
)
rozwiązanie będzie lepsze?
Szukałam na stronach sqlite i tam coś było o jakimś błędzie, który dopiero ma zostać poprawiony właśnie z PRIMARY KEY ale nie zrozumiałam. Wiesz o co chodzi?
Go to the top of the page
+Quote Post
jolam
post 22.09.2009, 21:58:48
Post #4





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


A jeszcze chciałam się zapytać, czy dobrze jest od razu przy definicji tabeli dodawać ograniczenie UNIQUE(kolumny) jeśli prawdopodobnie dane powinny być w nich unikalne?. No teraz jeszcze nie jestem tego pewna, ale tak mi się wydaje, to od razu warto dodać to UNIQUE?

pozdrawiam Jola
Go to the top of the page
+Quote Post
erix
post 23.09.2009, 09:10:56
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zależy. Z praktycznego punktu widzenia - można korzystać z konstrukcji insert into ... on duplicate key update, a jeśli chodzi o teorię - DBMS nie dopuści do wstawienia więcej niż jednego rekordu z takim indeksem.

Wówczas baza zwróci błąd, a jest to najczęściej sytuacja niepożądana.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
jolam
post 23.09.2009, 12:25:23
Post #6





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 12.07.2009

Ostrzeżenie: (10%)
X----


Ale zawsze wtedy będę mogła wygenerować choćby tymczasowy wpis który będzie unikalny. No już sama nie wiem. Wstawianie UNIQUE gdzie tylko się da pozwoli ustrzec się błędów później, zdublowanych wpisów? Jak mi radzicie?


pozdrawiam Jola
Go to the top of the page
+Quote Post
jmail
post 24.09.2009, 11:34:41
Post #7





Grupa: Zarejestrowani
Postów: 352
Pomógł: 53
Dołączył: 10.08.2009

Ostrzeżenie: (0%)
-----


erix - nie znasz się to nie odzywaj i nie wprowadzaj w błąd - jasno i wyraźnie jola napisała, że chodzi o sqlite więc czemu wyjeżdżasz jej z propozycją składni MySQL'a? zadziała jej to? nie sądzę.

jola - standardowy insert wystarczy, zastanów się tylko co chcesz zrobić jeżeli się "popsuje"

  1.  
  2. INSERT bla bla bla ON CONFLICT REPLACE
  3.  


tu masz opisane

http://www.sqlite.org/lang_conflict.html
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 07:05