Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z kluczem obcym
Forum PHP.pl > Forum > Bazy danych > MySQL
f4ll3ns3raf1n
panowie, mam problem, utworzylem tabele place, w ktorej category_tree_id ma byc kluczem obcym do tabeli category_tree.id.
o ile inne kolumny, ktore byly kluczami obcymi innych tabel chodzily bez najmniejszego problemu, tutaj nie moge tego rozgryzc...

typy obu kolumn takie same, a ciagle ten sam problem...
nic mi gogelki nie podpowiedziały, dlatego prosze dośw. userów baz danych o pomoc :-/
nospor
pewnie się typy nie zgadzają. Pokaz dokladnie strukturę obu tabel
f4ll3ns3raf1n
  1. CREATE TABLE IF NOT EXISTS `pgarnek_bm_database`.`category_tree` (
  2. `id` BIGINT NOT NULL AUTO_INCREMENT ,
  3. `parent_id` BIGINT NULL DEFAULT NULL ,
  4. `name` VARCHAR(128) NOT NULL ,
  5. PRIMARY KEY (`id`) ,
  6. UNIQUE INDEX `id` (`id` ASC) ,
  7. INDEX `parent_id` (`parent_id` ASC) ,
  8. CONSTRAINT `category_tree_ibfk_1`
  9. FOREIGN KEY (`parent_id` )
  10. REFERENCES `pgarnek_bm_database`.`category_tree` (`id` )
  11. ON DELETE CASCADE)
  12. ENGINE = InnoDB
  13. AUTO_INCREMENT = 25
  14. DEFAULT CHARACTER SET = utf8
  15. COLLATE = utf8_general_ci


  1. CREATE TABLE IF NOT EXISTS `pgarnek_bm_database`.`place` (
  2. `place_id` INT NOT NULL AUTO_INCREMENT ,
  3. `place_name` VARCHAR(50) NOT NULL ,
  4. `description` TEXT NULL ,
  5. `content` TEXT NULL ,
  6. `keywords` VARCHAR(320) NOT NULL ,
  7. `category_tree_id` BIGINT NOT NULL ,
  8. `street_id` INT NOT NULL ,
  9. `adress_numeric` SMALLINT(6) NOT NULL ,
  10. `map_latitude` FLOAT NULL ,
  11. `map_longitude` FLOAT NULL ,
  12. `phone_no` BIGINT NULL ,
  13. `mobile` BIGINT NULL ,
  14. `rating` DOUBLE NULL ,
  15. `ratings_ammount` INT NULL ,
  16. `place_status` TINYINT NULL ,
  17. `recomended` TINYINT(1) NULL ,
  18. `client_id` INT NULL ,
  19. PRIMARY KEY (`place_id`) ,
  20. INDEX `fk_place_client1` (`client_id` ASC) ,
  21. INDEX `fk_place_street1` (`street_id` ASC) ,
  22. INDEX `fk_place_category_tree1` (`category_tree_id` ASC) ,
  23. CONSTRAINT `fk_place_client1`
  24. FOREIGN KEY (`client_id` )
  25. REFERENCES `pgarnek_bm_database`.`client` (`client_id` )
  26. ON DELETE NO ACTION
  27. ON UPDATE NO ACTION,
  28. CONSTRAINT `fk_place_street1`
  29. FOREIGN KEY (`street_id` )
  30. REFERENCES `pgarnek_bm_database`.`street` (`street_id` )
  31. ON DELETE NO ACTION
  32. ON UPDATE NO ACTION,
  33. CONSTRAINT `fk_place_category_tree1`
  34. FOREIGN KEY (`category_tree_id` )
  35. REFERENCES `pgarnek_bm_database`.`category_tree` (`id` )
  36. ON DELETE NO ACTION
  37. ON UPDATE NO ACTION)
  38. ENGINE = InnoDB
  39. DEFAULT CHARACTER SET = utf8
  40. COLLATE = utf8_general_ci


a tutaj taki error dokladnie wyskakuje.


a ze jeszcze zapytam, jesli jeden wpis place mialby nalezec do wielu kategorii, to moze lepiej zrobic osobna tabele, z relacja wiele do wielu, place.id i category_tree.id ?
nospor
Cytat
jesli jeden wpis place mialby nalezec do wielu kategorii, to moze lepiej zrobic osobna tabele, z relacja wiele do wielu, place.id i category_tree.id ?
tak
f4ll3ns3raf1n
jak sie okazało, wpis należy tylko do jednej kategorii, wiec tabela wiele do wielu nie będzie rozwiązaniem. udało się coś niepokojącego znaleźć w strukturze tych 2 tabel? sciana.gif sciana.gif
nospor
No mi to dziala.
Jedyne co mi sie rzuca w oczy:
- po co dajesz nazwe baz danych wszedzie?
- czy liczba kategorii naprawdę bedzie tak duza, ze wymagany jest typ BIGINT? Oszczedzaj miejsce smile.gif

ps: blad jaki dostajesz wyskakuje na ALTER TABLE, a tutaj podales kod na CREATE TABLE. Czy ty na pewno nam wszystko pokazales?
f4ll3ns3raf1n
nospor, moze i rzeczywiscie id kategorii zatrzymam na INT,
kod podalem na create table, owszem, bo taki najszybciej z Workbencha było skopiować, zarówno CREATE TABLE jak i ALTER TABLE wywala sie na tym samym, zwraca ten sam blad. dlatego... zrobilem dokladnie taka sama tabele PLACES ale bez kluczy obcych, a nastepnie poprzez alter table je pokolei dodawalem, by zobaczyc przy ktorym FK sie dokladnie wywalalo. i o ile FK street_id i client_id udalo sie powiazac bez problemu, trudnosci sprawilo mi wlasnie to.
na chwile obecna jestem w pracy, wroce to sprobuje to zrobic na prostym INT
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.