Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klucze główne i relacja wiele do wielu, Jak ustawić klucze główne ?
Fluke
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
bpskiba
post
Post #2





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


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ę
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: 6.10.2025 - 21:06