Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Czy zawsze warto dodać pole "ID" auto increment ?
phpmack
post
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 11.06.2011

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


Mam nietypowe pytanie (IMG:style_emoticons/default/wink.gif)
Otóż mam takie przyzwyczajenie że zawsze do każdej tabeli dodaje pole ID auto increment, ale czy to jest dobra praktyka? np przy systemie logowania i tak nazwa użytkownika czy email musi być unikalny więc na co komu pole ID? Kiedyś ktoś mocno przekonywał mnie że zawsze warto dodać takie unikalne i jednoznaczne pole ID w tabeli, ale czy aby na pewno ?

pozdrawiam
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Generalnie, warto. Koszt dodania takiej kolumny jest niemal zerowy, a jest to mimo wszystko najwygodniejszy sposób identyfikacji rekordów.
Go to the top of the page
+Quote Post
Fifi209
post
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


A warto dlatego, że lepiej operować na liczbach niż stringach. (IMG:style_emoticons/default/smile.gif) Choćby dlatego, że liczby są ułożone w ściśle określony sposób i wiesz, że po 1 wystąpi 2 (zakładając brak dziur w rekordach), a stringi trzeba najpierw posortować alfabetycznie.
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@Fifi209: Tekst to nic innego jak ciąg liczb, a indeksy w obu przypadkach muszą być posortowanie. Na dobrą sprawę indeks kolumny tekstowej też jest numeryczny.
Go to the top of the page
+Quote Post
phpmack
post
Post #5





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 11.06.2011

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


Jednym słowem jedyny plusem jest to że przetwarzając rekord po pobraniu z bazy posługujmy się krótkim nr ID a nie dłuższym stringiem...
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@Crozin, @Fifi: w większości przypadków pole primary z autoincrement ma sens, ale nie zawsze. Dla mnie w przypadku choćby tabeli łączącej dla relacji many-2-many nie ma to sensu. Niby po co by miała tam taka kolumna być? (IMG:style_emoticons/default/wink.gif) Tam gdzie faktycznie trzeba identyfikować pojedyncze wiersze, ma to sens. A więc tabele userów, newsów, komentarzy, artykułów czy czego tam się chce mają uzasadnione istnienie takiej kolumny. Tak samo tabele skrajne dla złączenia, ale już dla tabeli łączącej jest to zbędne. Bo niby czemu mielibyśmy identyfikować konkretne złączenie, które w przypadku wspomnianej many-2-many może być zaledwie jednym z większej ilości dopasowań dla elementu po jednej ze stron.
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@thek: Sytuacji, gdzie klucze główne są złożone nie brałem pod uwagę. Znalazło by się jeszcze kilka innych przykładów gdzie wrzucanie ID nie ma sensu, ot chociażby tabele z tłumaczeniami (id_zasobu, id_języku) czy nadrzędna relacja 1-1.
Go to the top of the page
+Quote Post
5k7
post
Post #8





Grupa: Zarejestrowani
Postów: 65
Pomógł: 2
Dołączył: 5.12.2006

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


INDEXY na strinach działają tylko w pewnych sytuacjach w sensie faktycznie przyśpieszają przeszukiwanie. Warto doczytać dokumentacje. Wyszukanie rekordu po id gdzie primary jest z pewnością dużo szybsze. Tak samo z edycją. Dlatego zawsze warto, pomijając tabele o których była mowa.

Pozdrawiam
Go to the top of the page
+Quote Post
thek
post
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




I właśnie dlatego o tych sytuacjach wspomniałem. Niech autor wie, że są takowe sytuacje, gdzie wrzucanie klucza primary z autoincrement nie ma sensu i jedyne co robi to tworzy zbedny indeks. Ba, całą zbędną kolumnę. My raptem podaliśmy pewne warianty najpowszechniejsze, gdzie podejście autora nie ma racji bytu.
Go to the top of the page
+Quote Post
5k7
post
Post #10





Grupa: Zarejestrowani
Postów: 65
Pomógł: 2
Dołączył: 5.12.2006

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


W sumie zmieniłbym nawet zdanie i powiedział że jest sens zawsze chociażby ze względu na prędkość złączenia za pomocą klucza, jeśli złączenie nie po kluczu to i tak edycja szybsza. Poza tym chciałbym jeszcze dodać że w praktyce rozróżnianie userow po e-mailu bardzo złym pomysłem pomijajac kwestie wspomniane wcześniej. Załóżmy że masz iluś tam użytkowników i masz ich profile. I teraz chcesz mieć link do jego profilu. I co w tedy ? Rozumiem że będziesz wszędzie podawał ich e-maile ; ) Reasumując ja zawsze dodaje to id, nawet jeśli ktoś twierdzi że może do końca to nie ma sensu. Nic Cię to nie kosztuje, a taka pseudo optymalizacja zapewne wywiedzie Cię w pole. Pozdr
Go to the top of the page
+Quote Post
Korab
post
Post #11





Grupa: Zarejestrowani
Postów: 202
Pomógł: 36
Dołączył: 10.06.2011
Skąd: Dokąd

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


A jaki jest konkretny, z życia wzięty przykład tabeli many-2-many, gdzie stosowanie id jest niepotrzebne?
Go to the top of the page
+Quote Post
thek
post
Post #12





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A widziałeś kiedyś tabelę many-2-many z kluczem autoincrement primary założonym na jedną z kolumn? Ja najwyżej z założonym unique na obie jednocześnie. To, że obie kolumny zawierają pola z jakimś id typu int to chyba logiczne. Sednem problemu jest to jaki indeks założono i na jakie kolumny. Przykład tabeli życiowy? Produkt i kategorie w sklepie (IMG:style_emoticons/default/smile.gif) Jeden produkt może należeć do kilku kategorii, a jednocześnie jedna kategoria może zawierać wiele przedmiotów. Tabela łącząca zawiera id_produktu i id_kategorii, a indeks założony na obie kolumny jednocześnie z atrybutem unique. Implikacje? Chyba nie trzeba przytaczać (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.10.2025 - 04:14