Nie można dodać tabeli

Odpowiedz Nowy wątek
2015-07-31 08:30
0

Hej. Mam w bazie taką tabelę:

DROP TABLE IF EXISTS `ironman_msp`.`customer_order` ;

CREATE TABLE IF NOT EXISTS `ironman_msp`.`customer_order` (
  `customero_id` INT NOT NULL AUTO_INCREMENT,
  `customero_company_id` INT NOT NULL,
  `customero_contractor_id` INT NOT NULL COMMENT 'id klienta, kontrahenta',
  `customero_inventoryl_id` INT NOT NULL,
  `customero_priceg_id` INT NOT NULL,
  `customero_number` VARCHAR(45) NULL,
  `customero_create_date` DATE NULL,
  `customero_notes` TEXT NULL,
  `customero_price_list` INT NULL,
  `customero_create_user` INT NULL,
  `customero_status` VARCHAR(45) NULL,
  `customero_street` VARCHAR(45) NULL,
  `customero_postcode` VARCHAR(6) NULL,
  `customero_country_id` VARCHAR(45) NULL,
  `customero_selected` VARCHAR(45) NULL,
  `customero_selectedvalue` VARCHAR(45) NULL,
  `customero_city` VARCHAR(45) NULL,
  `customer_billcreated` DATE NULL,
  `customero_realized` DATE NULL,
  `customero_serie` VARCHAR(45) NULL,
  `customero_wz` INT NULL,
  PRIMARY KEY (`customero_id`),
  UNIQUE INDEX `customero_number_UNIQUE` (`customero_number` ASC),
  INDEX `fk_customer_order_company1_idx` (`customero_company_id` ASC),
  INDEX `fk_customer_order_contractor1_idx` (`customero_contractor_id` ASC),
  INDEX `fk_customer_order_inventory_location1_idx` (`customero_inventoryl_id` ASC),
  INDEX `fk_customer_order_price_group1_idx` (`customero_priceg_id` ASC),
  INDEX `fk_customer_order_inventory_document1_idx` (`customero_wz` ASC),
  CONSTRAINT `fk_customer_order_company1`
    FOREIGN KEY (`customero_company_id`)
    REFERENCES `ironman_msp`.`company` (`company_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_customer_order_contractor1`
    FOREIGN KEY (`customero_contractor_id`)
    REFERENCES `ironman_msp`.`contractor` (`contractor_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_customer_order_inventory_location1`
    FOREIGN KEY (`customero_inventoryl_id`)
    REFERENCES `ironman_msp`.`inventory_location` (`inventoryl_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_customer_order_price_group1`
    FOREIGN KEY (`customero_priceg_id`)
    REFERENCES `ironman_msp`.`price_group` (`priceg_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_customer_order_inventory_document1`
    FOREIGN KEY (`customero_wz`)
    REFERENCES `ironman_msp`.`inventory_document` (`inventoryd_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'zamówienie klienta - jest jednoczesnie rezerwacją towaru na magazynie, na tej podstawie można wydrukować dokument WZ';

i próbuję dodać kolejną, lecz nie mogę:

Error: #1215 - Cannot add foreign key constraint

DROP TABLE IF EXISTS `ironman_msp`.`customer_order_line` ;

CREATE TABLE IF NOT EXISTS `ironman_msp`.`customer_order_line` (
  `customerol_id` INT NOT NULL AUTO_INCREMENT,
  `customerol_customer_order_id` INT NOT NULL,
  `customerol_inventoryl_id` INT NOT NULL,
  `customerol_part_no` VARCHAR(45) NOT NULL,
  `customerol_qty` DECIMAL(10,2) NOT NULL,
  `customerol_qty_prev` DECIMAL(10,2) NULL DEFAULT 0,
  `customerol_unit_meas` VARCHAR(45) NOT NULL,
  `customerol_discount` DECIMAL(10,2) NULL DEFAULT 0,
  `customerol_net_price` DECIMAL(10,2) NULL,
  `customerol_tax_rate` DECIMAL(10,2) NULL,
  `customerol_net_value` DECIMAL(10,2) NULL,
  `customerol_gross_value` DECIMAL(10,2) NULL,
  `customerol_currency` VARCHAR(3) NULL,
  `customerol_status` VARCHAR(45) NULL,
  `customerol_reserved` INT(2) NULL DEFAULT 1,
  PRIMARY KEY (`customerol_id`),
  INDEX `fk_customer_order_line_customer_order_idx` (`customerol_customer_order_id` ASC),
  INDEX `fk_customer_order_line_inventory_part1_idx` (`customerol_part_no` ASC),
  INDEX `fk_customer_order_line_inventory_location1_idx` (`customerol_inventoryl_id` ASC),
  CONSTRAINT `fk_customer_order_line_customer_order`
    FOREIGN KEY (`customerol_customer_order_id`)
    REFERENCES `ironman_msp`.`customer_order` (`customero_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_customer_order_line_inventory_part1`
    FOREIGN KEY (`customerol_part_no`)
    REFERENCES `ironman_msp`.`inventory_part` (`inventoryp_part_no`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_customer_order_line_inventory_location1`
    FOREIGN KEY (`customerol_inventoryl_id`)
    REFERENCES `ironman_msp`.`inventory_location` (`inventoryl_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'pozycje zamówienia klienta - jest to jednocześnie tabela rezerwacji';

Pomożecie?

Pozostało 580 znaków

2015-07-31 08:39
0

Czy w drugiej tabeli, w której masz klucze obce istnieją te tabele do których się odwołują ? Czy istnieją tam kolumny te do których odwołuje się klucz obcy ? Czy są one kluczami głównymi w tamtych tabelach ? Czy nazwa constraint się nie dubluje ? MySQL wyrzucił jeszcze jakąś informacje ? Problemów może być kilka.

edytowany 1x, ostatnio: mariano901229, 2015-07-31 08:39

Pozostało 580 znaków

2015-07-31 09:04
0

Istnieją tabele, wszystkie kolumny, a niektóre komórki, do których się odwołuję są kluczami głównymi. Czy to problem?

Nie rozumiem, jak czy nazwa Constraint się dubluje?

Pozostało 580 znaków

2015-07-31 09:54
0

Spróbuj zmienić nazwę nazwę tego na inny, ponieważ jest zdublowany w poprzedniej tabeli:

  CONSTRAINT `fk_customer_order_line_inventory_location1`

Nie mam pewności czy to rozwiąże problem, ale w jakimś systemie baz danych bodajże Oracle czy PostgreSQL wymagał on innych nazw CONSTRAINT w różnych tabelach.
Pozdrawiam

nie jest zdublowana, użyj Ctrl + F, by się przekonać - Webowiec 2015-07-31 10:02
Sorry, masz rację faktycznie źle spojrzałem :D Może typ danych kolumny klucza obcego nie jest taka sama jak klucz główny w innej tabeli ? - mariano901229 2015-07-31 10:06

Pozostało 580 znaków

2015-07-31 10:11
0

Rozwiązałem problem - dodanie do tabeli customer_order kilku wpisów załatwiło sprawę.

Wniosek - nie utworzysz klucza obcego, jeśli w tabeli do której się odnosisz nie ma rekordów.

Dzięki

Pozostało 580 znaków

2015-07-31 10:24
0
Webowiec napisał(a):

Rozwiązałem problem - dodanie do tabeli customer_order kilku wpisów załatwiło sprawę.

Wniosek - nie utworzysz klucza obcego, jeśli w tabeli do której się odnosisz nie ma rekordów.

Dzięki

Można przecież bezproblemowo. Chyba, że miałeś już jakieś wartości, które były kluczem obcym, wówczas muszą one być związane z rekordem w tabeli do której się odnosisz.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0