Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tabela produktów powiązanych z dwoma kolumnami ID
Forum PHP.pl > Forum > Bazy danych
adbacz
Mam tabelę produktów powiązanych z dwoma kolumnami:

  1. CREATE TABLE `csdx9r_shop_related_products` (
  2. `product_id` int(11) NOT NULL,
  3. `related_product_id` int(11) NOT NULL
  4. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


phpMyAdmin twierdzi, że trzeba stworzyć index. Tylko zastanawiam się, czy jest sens ustawiania indeksu na kolumnę pierwszą w ogóle, skoro jest ona typu INT no i jest ona tylko jedna, po drugiej nie będę wybierał danych ani sortował ich więc praktycznie nie ma sensu na nią zakładać indexu.

Mógłby ktos wypowiedzieć się na ten temat?
szeryff
Prawdopodobnie chodzi mu o to, że tabela nie ma zdefiniowanego klucza podstawowego
Hesto
Poprawne zapytanie:

  1. CREATE TABLE `csdx9r_shop_related_products` (
  2. `product_id` int(11) NOT NULL,
  3. `related_product_id` int(11) NOT NULL,
  4. PRIMARY KEY ( `product_id` )
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Tworzenie indexu ma sens ponieważ nakład to też UNIQUE na kolumne co uniemożliwi posiadania takich samych id przez produkty.
adbacz
@Hesto w przypadku produktów powiązanych raczej klucz UNIQUE się nie sprawdzi bo może się zdarzyć, że jeden produkt `product_id` będzie miał powiązanych ze sobą 5 innych produktów `related_product_id` więc będzie pięć rekordów:

Kod
product_id | related_product_id
------------------------------------
1       | 2
1       | 3
1       | 4
1       | 5
1       | 6
Crozin
Powinieneś mieć:
1. Klucz podstawowy obejmujący obie kolumny.
2. Dwa klucze obce (product_id -> product.id, related_product_id -> product.id) z dodatkowym warunkiem usunięcia rekordu, w przypadku usunięcia produktu (on delete cascade).
adbacz
Dziękuję za odpowiedzi, szczególnie @Crozin-owi.
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.