Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tabela produktów powiązanych z dwoma kolumnami ID, Czy warto zakładać na nie Index?
adbacz
post
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
szeryff
post
Post #2





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.11.2013

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


Prawdopodobnie chodzi mu o to, że tabela nie ma zdefiniowanego klucza podstawowego
Go to the top of the page
+Quote Post
Hesto
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.11.2013

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


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





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


@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


Ten post edytował adbacz 15.11.2013, 11:14:32
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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).

Ten post edytował Crozin 15.11.2013, 12:04:56
Go to the top of the page
+Quote Post
adbacz
post
Post #6





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Dziękuję za odpowiedzi, szczególnie @Crozin-owi.
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: 4.10.2025 - 00:11