2011-05-10 8 views
21

Mam tabelę, która przechowuje komentarze użytkowników dotyczące obrazów w witrynie. Tabela ma strukturę czterech kolumn: row_id, który jest kluczem podstawowym, image_id, user_id i komentarzem. Chcę tylko, aby użytkownik mógł zostawić tylko jeden komentarz na obraz. Czy po prostu utworzę unikalny indeks na dwóch kolumnach?MySQL Utwórz unikalną kombinację kolumn

CREATE UNIQUE INDEX imgusr ON comments (image_id, user_id); 

Chodzi o to, aby uzyskać następujące zapytanie do pracy:

INSERT INTO comments SET image_id = '1', user_id = '2', comment = 'nice' ON DUPLICATE KEY UPDATE comment = 'nice'; 

gotchya (? Gotme) jest to, że tabela jest InnoDB, ponieważ oczekuje się, aby uzyskać bardzo duże. Czy takie podejście zadziała, pomimo obecności klucza podstawowego?

+0

Spróbowałeś? Czy martwisz się, że to się nie udaje, lub że osiąga słabe wyniki? – outis

+0

Obie. W rzeczywistości przechodzę z jednego systemu na drugi, a początkowy stół będzie dość masywny (4 miliony wierszy natychmiast, w pierwszych kilku tygodniach ma wzrosnąć do 20 milionów), więc chcę być absolutnie pewny, że będę o tym mówić właściwą drogę od samego początku. – Wige

Odpowiedz

12

Tak, to działa idealnie.

W innym temacie, dlaczego miałeś row_id? Możesz po prostu umieścić klucz podstawowy jako (image_id, user_id), to też zadziała.

+0

Nie zdawałem sobie sprawy, że mogę to zrobić w tabeli InnoDB. Dzieki za sugestie. – Wige