Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klucze główne i relacja wiele do wielu
Forum PHP.pl > Forum > Bazy danych
Fluke
Witam.
Mam pewną rozkmnię odnośnie kluczy glównych w tabeli wiele do wielu.

Pszypuszczając, mamy tabelę "User"
"USER":
-Id, PK AUTO_INCREMENT
-Name
-Surname

Następnie mamy tabelę "Car"
-Id, PK AUTO_INCREMENT
-Name

I teraz sedno problemu, tabela "User_car"
-Id, PK AUTO_INCREMENT
-IdUser
-IdCar

IdUser oraz IdCar mają ustawiony indeks unikalny.
Teraz pytanie czy to id w tabelu user_car jest przydatne. Od razu jeszcze wspomnę, że główne założenie to jeden użytkownik może jeździć wieloma samochodami ale tylko jednym jednej marki.
Wydaje mi się, że to może być przydatne jak usuwamy bądź modyfikujemy rekordy bo wystarczy znać Id.
Ale wcześniej ustawiałem klucze główne na IdUser oraz IdCar i nie musiałem dawać indeksu unikatowego ale gdy modyfikowałem rekord musiałem znać IdUser oraz IdCar.

Na wykładach z modelowania danych gość mówił, że zawsze powinno się tworzyć klucz sztuczny w każdej tabeli i nie powinno się wybierać klucza naturalnego. Argumentu nie pamiętam jaki dawał.

Myślę że to chyba nie ma wielkiej róźnicy w wydajności ale pozowlę was spytać się o opinię.

Pozdrawiam.
bpskiba
Cytat(Fluke @ 21.04.2012, 13:53:14 ) *
Witam.
Mam pewną rozkmnię odnośnie kluczy glównych w tabeli wiele do wielu.

Pszypuszczając, mamy tabelę "User"
"USER":
-Id, PK AUTO_INCREMENT
-Name
-Surname

Następnie mamy tabelę "Car"
-Id, PK AUTO_INCREMENT
-Name

I teraz sedno problemu, tabela "User_car"
-Id, PK AUTO_INCREMENT
-IdUser
-IdCar

IdUser oraz IdCar mają ustawiony indeks unikalny.
Teraz pytanie czy to id w tabelu user_car jest przydatne. Od razu jeszcze wspomnę, że główne założenie to jeden użytkownik może jeździć wieloma samochodami ale tylko jednym jednej marki.
Wydaje mi się, że to może być przydatne jak usuwamy bądź modyfikujemy rekordy bo wystarczy znać Id.
Ale wcześniej ustawiałem klucze główne na IdUser oraz IdCar i nie musiałem dawać indeksu unikatowego ale gdy modyfikowałem rekord musiałem znać IdUser oraz IdCar.

Na wykładach z modelowania danych gość mówił, że zawsze powinno się tworzyć klucz sztuczny w każdej tabeli i nie powinno się wybierać klucza naturalnego. Argumentu nie pamiętam jaki dawał.

Myślę że to chyba nie ma wielkiej róźnicy w wydajności ale pozowlę was spytać się o opinię.

Pozdrawiam.


To jest zagadka akademicka czy użytkowa baza danych??
Jeżeli użytkownik może jeździć wieloma samochodami, ale tylko jednym danej marki, to powinieneś mieć w bazie czytelny podział:
marka->model->samochód
Więc trzy tabele dla samego samochodu
Tabela user_car akademicko może mieć klucz naturalny na dwóch polach, ale w praktyce zaraz się okaże, że taki klucz jest niepraktyczny gdy będziesz chciał tą tabelę połączyć z następną (tankowania, naprawy, faktury)
Nie trudno też wymyślić sytuację, gdy użytkownik jeździł daną marką dwa lata temu i obecnie chce jeździć dalej. Jak założysz klucz naturalny zablokujesz się
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.