Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Mój pomysł: brak ID w tabeli, Czy rozwiązanie ma jakieś minusy?
Zajec
post
Post #1





Grupa: Zarejestrowani
Postów: 1 086
Pomógł: 8
Dołączył: 10.12.2003

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


Potrzebuję stworzyć tabelę, która będzie kojarzyła ze sobą pozycje dwóch innych tabel:

1) Tabela "users" z id użytkownika i jego danymi
2) Tabela "hobby" z id hobby i nazwą hobby

Chcę, aby każdy użytkownik mógł sobie obrać kilka zdefiniowanych przeze mnie hobby. Tworzę więc tabelę z dwoma polami:
1) user_id
2) hobby_id

Teraz pytanie: Czy jest jakiś silny argument, aby dodawać pole id w tabeli łączącej? Zawsze mnie uczono, że id musi być i że ułatwia pracę, ale w tym przypadku szczerze mówiąc nie widzę zastosowania. Gdy user zmienia hobby po prostu kasuję jego dotychczasową listę hobby i tworzę jeszcze raz. Nie mam potrzeby odwoływania się do konkretnego wiersza tabeli łączącej.

Co więcej boję się, że przy częstej zmianie hobby, wartości jej pól "id" drastycznie urosną mimo ogólnie małej ilości wierszy. Dlatego głównie nie chciałbym dodawać pola "id".

Ten post edytował Zajec 6.04.2007, 23:10:03
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Darti
post
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


@dr_bonzo coś Twoja metoda nie działa, zmontowałem na szybko takie dwie tabelki:
  1. CREATE TABLE `hobbies` (
  2. `user_id` int(5) NOT NULL DEFAULT '0',
  3. `hobby_id` int(5) NOT NULL DEFAULT '0'
  4. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  5.  
  6. INSERT INTO `hobbies` VALUES (5, 8);
  7. INSERT INTO `hobbies` VALUES (1, 1);
  8. INSERT INTO `hobbies` VALUES (1, 2);
  9. INSERT INTO `hobbies` VALUES (1, 3);
  10. INSERT INTO `hobbies` VALUES (2, 1);
  11. INSERT INTO `hobbies` VALUES (2, 2);
  12. INSERT INTO `hobbies` VALUES (2, 3);
  13. INSERT INTO `hobbies` VALUES (3, 3);
  14. INSERT INTO `hobbies` VALUES (4, 9);
  15.  
  16. CREATE TABLE `users` (
  17. `user_id` int(5) NOT NULL DEFAULT '0',
  18. `name` varchar(20) NOT NULL DEFAULT ''
  19. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  20.  
  21. INSERT INTO `users` VALUES (5, 'piaty');
  22. INSERT INTO `users` VALUES (1, 'pierwszy');
  23. INSERT INTO `users` VALUES (2, 'drugi');
  24. INSERT INTO `users` VALUES (3, 'trzeci');
  25. INSERT INTO `users` VALUES (4, 'czwarty');


i wmontowałem Twoje (podobne) zapytanie (pomińmy że miało być dwóch) :
  1. SELECT hu.name, u.name FROM hobbies h JOIN users hu ON h.hobby_id = hu.user_id JOIN users u ON h.user_id = u.user_id


Powinien wyświetlić tylko userów: pierwszy, drugi (bo mają zainteresowania 1,2,3) a wmieszał się tam jeszcze trzeci dziwnym trafem (bo ma tylko i wyłącznie zainteresowanie 3, ale się wkręcił na imprezkę i nie ma o czym gadać z pierwszym i drugim bo zeszli na tematy 1 lub 2 i trzeciemu grozi picie browara i rwanie lasek koło baru a chciał pogadać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ).
Go to the top of the page
+Quote Post

Posty w temacie


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: 5.10.2025 - 17:26