Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Zablokowanie dodania powtarzającej się zależności
redsov
post 24.10.2009, 12:01:53
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 29.05.2009

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


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.

Ten post edytował redsov 24.10.2009, 12:08:42
Go to the top of the page
+Quote Post
wookieb
post 24.10.2009, 12:13:02
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Tak. Nałóż klucz unique na niepowtarzającą się kolumnę


--------------------
Go to the top of the page
+Quote Post
redsov
post 24.10.2009, 12:54:45
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 29.05.2009

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


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.

Ten post edytował redsov 24.10.2009, 12:58:46
Go to the top of the page
+Quote Post
erix
post 24.10.2009, 13:09:07
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
redsov
post 24.10.2009, 15:13:24
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 29.05.2009

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


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

Ten post edytował redsov 24.10.2009, 15:20:25
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:20