Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> bład errno: 150, tworzenie obcych kluczy
squid
post
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


majac takie tabele :
  1. CREATE TABLE `nodes` (
  2. `nodeID` int(10) UNSIGNED NOT NULL,
  3. `nodeName` varchar(64) DEFAULT NULL,
  4. PRIMARY KEY (`nodeID`)
  5. ) TYPE=InnoDB;
  6.  
  7. # --------------------------------------------------------
  8.  
  9. #
  10. # Struktura tabeli dla `blood`
  11. #
  12.  
  13. CREATE TABLE `blood` (
  14. `parentID` int(10) UNSIGNED NOT NULL,
  15. `childID` int(10) UNSIGNED NOT NULL,
  16. INDEX (`parentID`,`childID`),
  17. FOREIGN KEY(`parentID`) REFERENCES nodes(`nodeID`),
  18. FOREIGN KEY(`childID`) REFERENCES nodes(`nodeID`)
  19. ) TYPE=InnoDB;


otrzymuje taki komunikat:
Cytat
Błąd


zapytanie SQL : 


CREATE TABLE `blood` (
`parentID` int( 10 ) unsigned NOT NULL ,
`childID` int( 10 ) unsigned NOT NULL ,
INDEX ( `parentID` , `childID` ) ,
FOREIGN KEY ( `parentID` ) REFERENCES nodes( `nodeID` ) ,
FOREIGN KEY ( `childID` ) REFERENCES nodes( `nodeID` )
) TYPE = InnoDB


MySQL zwrócił komunikat:


#1005 - Can't create table './test2/blood.frm' (errno: 150)


nie wiem co tam poprawic, ktos ma jakis pomysl?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
anas
post
Post #2





Grupa: Zarejestrowani
Postów: 172
Pomógł: 0
Dołączył: 22.09.2002
Skąd: Gorzów Wlkp

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


Hej.

Ostatnio musialem sprostac podobnemu wyzwaniu jak Ty - wiec podziele sie w jaki sposob udalo mi sie to zrobic:

Tabela Produkty:

  1. CREATE TABLE Produkty (
  2. ProduktID Bigint NOT NULL AUTO_INCREMENT,
  3. StawkaID Int NOT NULL,
  4. GrupaID Bigint NOT NULL,
  5. Nazwa Varchar(255) NOT NULL,
  6. CenaNetto Double(9,2) NOT NULL,
  7. Opis Longtext,
  8. UNIQUE (ProduktID),
  9. INDEX AI_ProduktID (ProduktID),
  10. PRIMARY KEY (ProduktID,StawkaID,GrupaID),
  11. INDEX IX_GrupyTowarowe_Produkty (GrupaID),
  12. FOREIGN KEY (GrupaID) REFERENCES GrupyTowarowe (GrupaID) ON DELETE cascade ON UPDATE cascade,
  13. INDEX IX_Relationship9 (StawkaID),
  14. FOREIGN KEY (StawkaID) REFERENCES StawkiVat (StawkaID) ON DELETE cascade ON UPDATE cascade
  15. ) TYPE = InnoDB
  16. ROW_FORMAT = DEFAULT;


Teraz tak - aby bylo prosciej nie patrz na nic w tej tabeli, oprocz klucza ProduktID - jak widzisz jest zdefiniowany jako Primary Key, ale nie jako jedyny - rowniez jako Primary Key zdefiniowane sa klucze obce StawkaID oraz GrupaID - wiec aby mogl zrobic relacje ktora dziedziczy mi tylko jeden klucz i identyfikuje po nim ustawiam to pole jako UNIQUE - pod polem opis znajduje sie to ustawienie. Ustawiam indexy itd...

i teraz druga tabela w ktorej bede trzymal powiazania:

  1. CREATE TABLE ProduktyPowiazania (
  2. ProduktID Bigint NOT NULL,
  3. PowiazanyZ Bigint NOT NULL,
  4. PRIMARY KEY (ProduktID,PowiazanyZ),
  5. INDEX IX_Relationship11 (ProduktID),
  6. FOREIGN KEY (ProduktID) REFERENCES Produkty (ProduktID) ON DELETE cascade ON UPDATE cascade,
  7. INDEX IX_Relationship12 (PowiazanyZ),
  8. FOREIGN KEY (PowiazanyZ) REFERENCES Produkty (ProduktID) ON DELETE cascade ON UPDATE cascade
  9. ) TYPE = InnoDB
  10. ROW_FORMAT = DEFAULT;


Jak widzisz sa zrobione dwie relacje - i dwa rozne indexy zalozone na klucze obce - nastepnie definicje tych relacji i co w przypadku kiedy zostanie skasowany rodzic - akurat CASCADE oznacza ze zostana rowniez skasowane wszystkie wiersze posiadajace klucz rodzica.

Nazewnistwo index'ow i niektorych pol moze wydawac sie dziwne - ale to jest wygenerowane prosto z narzedzia do projektowania baz i nie zdazylem jeszcze poprawic, bo projekt nadal jest na tapecie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ... jesli masz jakies pytania jeszcze to wal... postaram sie pomoc na tyle na ile potrafie, ale u mnie cos takiego dziala - a Twoj problem pokrywa sie z tym przykladem w 100%-tach (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

pozdrowka

anas
Go to the top of the page
+Quote Post

Posty w temacie


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: 26.12.2025 - 19:59