Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Pytanie o strukturę tabeli - klucz w tabeli łączącej
Forum PHP.pl > Forum > Przedszkole
arturpiotrowski
Mam taką strukturę bazy danych:
  1. --
  2. -- Struktura tabeli dla tabeli `categories`
  3. --
  4.  
  5. CREATE TABLE `categories` (
  6. `cat_id` smallint(5) UNSIGNED NOT NULL,
  7. `cat_name` varchar(60) NOT NULL,
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  9.  
  10. -- --------------------------------------------------------
  11.  
  12. --
  13. -- Struktura tabeli dla tabeli `categories_products`
  14. --
  15.  
  16. CREATE TABLE `categories_products` (
  17. `id` int(10) UNSIGNED NOT NULL,
  18. `cat_id` int(10) UNSIGNED NOT NULL,
  19. `product_id` int(10) UNSIGNED NOT NULL
  20. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  21.  
  22. -- --------------------------------------------------------
  23.  
  24. --
  25. -- Struktura tabeli dla tabeli `products`
  26. --
  27.  
  28. CREATE TABLE `products` (
  29. `product_id` int(10) UNSIGNED NOT NULL,
  30. `name` varchar(255) NOT NULL
  31. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  32.  
  33.  
  34. ALTER TABLE `categories`
  35. ADD PRIMARY KEY (`cat_id`),
  36.  
  37. ALTER TABLE `categories_products`
  38. ADD PRIMARY KEY (`id`),
  39. ADD UNIQUE KEY `cat_id` (`cat_id`,`product_id`),
  40. ADD KEY `cat_id` (`cat_id`),
  41. ADD KEY `product_id` (`product_id`);
  42.  
  43. ALTER TABLE `products`
  44. ADD PRIMARY KEY (`product_id`);
  45.  
  46. ALTER TABLE `categories`
  47. MODIFY `cat_id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
  48.  
  49. ALTER TABLE `categories_products`
  50. MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
  51.  
  52. ALTER TABLE `products`
  53. MODIFY `product_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;


Moje pytanie dotyczy tego czy w tabeli categories_products, zasadne jest to pole id z kluczem? Czy może całkiem zrezygnować z tego pola i spokojnie zostawić tylko jako unikalną parę pola cat_id i product_id
viking
W większości takich relacji klucz syntetyczny nie jest wymagany. Głównie zależy od projektu. Ale raczej można go pominąć.
arturpiotrowski
Jakie są plusy i minusy używania takiego klucza i kiedy jest on zalecany?
Pyton_000
w category_product wystarczy Primary na 2 kolumny bez kolumny `id` bo jest ona zbędna.
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.