Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nazewnictwo klucza głównego
Forum PHP.pl > Forum > Bazy danych > MySQL
markonix
Cały czas nie umiem się zdecydować nad konwencją nazewnictwa kolumn, zwłaszcza klucza głównego.

Ma to małe znaczenie dopóki nie będziemy robić łączeń na tabelach - czym większych tym poważniejsze komplikacje.

1. id i tylko id.
+ w miarę czytelne
+ dzięki analogii szybciej się pisze, kopiuje fragmenty kodu
+ przyda się przy pętlach
- spore problemy z JOIN (wymaga tworzenia Aliasów, co jest dosyć uciążliwe)

2. tid czyli już coś mówi.
Czyli np. dla użytkowników będzie to uid.
+ czytelniejsze od zwykłego id
+/- Przy join już lepiej choć może się zdarzyć, że uid będzie pasował do dwóch różnych tabel.
- nie ma już analogii.
- przy join w tabeli dodawanej zwykle jest kolumna łącznikowa czyli np. uid tak więc w jednym miejscu problem znika, w drugim się pojawia choć mniejszy bo alias już nie jest potrzebny bo uid tu i tu będzie taki sam, a po prostu trzeba będzie poprzedzać uid w ON nazwą tabeli

3. table_id czyli już typowo zależne od nazwy tabeli (może bez prefixu).
Czyli np. dla użytkowników będzie to user_id.
+ bardzo czytelne
+ Przy join nie ma szans na problemy, przynajmniej w ID ale widziałem też pomysły aby każdą kolumnę takim prefixem obdarowywać.
- troszkę brzydkie rozwiązanie bo zwykle nazwa tabeli jest w liczbie mnogiej i powinno być tak naprawdę users_id ..
- nie ma już analogii (choć znając nazwy tabeli można np. w pętli stworzyć analogiczne zapytania z jednym wyjątkiem patrz wyżej)..
- przy join w tabeli dodawanej zwykle jest kolumna łącznikowa czyli np. user_id tak więc w jednym miejscu problem znika, w drugim się pojawia choć mniejszy bo alias już nie jest potrzebny bo user_id tu i tu będzie taki sam, a po prostu trzeba będzie poprzedzać user_id w ON nazwą tabeli


Co u Was? smile.gif
pedro84
Używam zawsze ID.

Parę słów komentarza:
1. To już naprawdę jest kwestia osobistej preferencji i ewentualnie dostosowania do konwencji nazewnictwa w istniejącej bazie. Widziałem już kwiatki typu: ID, Username, ale user_profile.
2. Problem przy joinach mogą pojawić się z wykorzystaniem każdej z metod. Nie ma problemów, kiedy stosujesz zapis: Table.ID = AnotherTable.ID, czyli poprzedzasz nazwę kolumny nazwą tabeli.
3. Używaj tego, co jest dla Ciebie wygodne - tak naprawdę tylko to ma znaczenie, w momencie kiedy nie musisz się dostosowywać do obowiązującej konwencji.
4. Każda konwencja jest lepsza, niż jej brak.

Tyle ode mnie.
mortus
Osobiście wszędzie używam nazwy id dla klucza głównego i aliasów dla tabel w zapytaniach. Tak naprawdę przy większej ilości złączeń nadanie nazwy user_id już trzem kolumnom w trzech różnych tabelach niczego nie ułatwi. To chyba kwestia gustu.

BTW: W punkcie 1 alias również nie jest potrzebny przy złączeniach, ale trzeba poprzedzić nazwy kolumn nazwami tabel. No i pamiętaj, że jeśli w dwóch tabelach kolumny mają takie same nazwy, to łącząc te tabele można użyć klauzuli USING, zamiast ON.
Damonsson
Ja używam nazwatabeliId. Przede wszystkim największe plusy dla mnie to czytelność i wykluczenie powtarzania się nazwy kolumny.
sazian
ja stosuje następujące "reguły":
1)nazwy tabel w liczbie mnogiej, a nazwy kolumn w liczbie pojedynczej
2)każda kolumna ma prefiks będący nazwą tabeli w liczbie pojedynczej
3)camelCase

czyli np. w tabeli users mam kolumny userId, userName, ...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.