Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Zablokowanie dodania powtarzającej się zależności
Forum PHP.pl > Forum > Bazy danych > MySQL
redsov
Witam Was,
chciałbym utworzyć tabelę 'web_similar_words' przechowującą zależności między rekordami z tablicy 'web_words'.
czy z poziomu MySQL mogę zablokować możliwość dodania rekordu do tabeli w poniższym przypadku:

haha11 - haha22 // rekord istniejący już w 'web_similar_words' - (haha11, haha22 - id_words)

haha22 - haha11 // czy mogę zablokować możliwość dodania takiej zależnosci? powyższy rekord w zupełności mi wystarczy




  1. CREATE TABLE web_words (
  2. id_words INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. pl_word VARCHAR(255) NOT NULL,
  4. fg_word VARCHAR(255) NOT NULL,
  5. PRIMARY KEY(id_words)
  6. )
  7. TYPE=InnoDB;
  8.  
  9. CREATE TABLE web_similar_words (
  10. word1 INTEGER UNSIGNED NOT NULL,
  11. word2 INTEGER UNSIGNED NOT NULL,
  12. PRIMARY KEY(word1,word2),
  13.  
  14. FOREIGN KEY (word1) REFERENCES web_words(id_words) ON UPDATE CASCADE ON DELETE CASCADE,
  15. FOREIGN KEY (word2) REFERENCES web_words(id_words) ON UPDATE CASCADE ON DELETE CASCADE,
  16.  
  17. )
  18. TYPE=InnoDB;



dzięki za pomoc.
wookieb
Tak. Nałóż klucz unique na niepowtarzającą się kolumnę
redsov
Cytat(wookieb @ 24.10.2009, 13:13:02 ) *
Tak. Nałóż klucz unique na niepowtarzającą się kolumnę


tzn. unikalne mialyby być jedynie przypisania:

haha1 - haha2 jest równe haha2 - haha1, więc nie chciałbym dublowac.

dopuszczam mozliwosc dodania kolejnych rekordow:
haha1 = haha3
haha3 = haha2

być może źle kombinuję, ale ustawiając unique na kolumny word1 czy word2 tracę tę mozliwosc.
nie umiem sie doszukac jak ustawić unikalność pary dwóch pol.
erix
Przecież możesz każdy indeks utworzyć na kilka kolumn.

http://pl.lmgtfy.com/?q=mysql+unique

Na przyszłość włącz tryb Kubusia Puchatka - myśl, myśl, myśl. tongue.gif
redsov
Cytat(erix @ 24.10.2009, 14:09:07 ) *
Przecież możesz każdy indeks utworzyć na kilka kolumn.

http://pl.lmgtfy.com/?q=mysql+unique

Na przyszłość włącz tryb Kubusia Puchatka - myśl, myśl, myśl. tongue.gif

dzięki za tę pionierską radę, ale kiedyś słyszałem o tym calym google... ;<

mój problem polega na tym, iż nie bardzo mogę poradzić sobie z odpowiednim zastosowaniem 'unique', tzn. :

  1. CREATE TABLE web_words (
  2. id_words INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. pl_word VARCHAR(100) NOT NULL,
  4. fg_word VARCHAR(100) NOT NULL,
  5. PRIMARY KEY(id_words)
  6. )
  7. TYPE=InnoDB;
  8.  
  9. CREATE TABLE web_similar_words (
  10. id_similar INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  11. word1 INTEGER UNSIGNED NOT NULL,
  12. word2 INTEGER UNSIGNED NOT NULL,
  13. PRIMARY KEY(id_similar),
  14.  
  15. UNIQUE INDEX (word1,word2),
  16. FOREIGN KEY (word1) REFERENCES web_words(id_words) ON UPDATE CASCADE ON DELETE CASCADE,
  17. FOREIGN KEY (word2) REFERENCES web_words(id_words) ON UPDATE CASCADE ON DELETE CASCADE
  18. )
  19. TYPE=InnoDB;

nie rozwiązuje problemu...

pewnie osobie z większym doświadczeniem, poprawienie lub dopisanie odpowiedniej linijki zajmie minutkę...
dziękuję.
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.