NetBeans 6.7 Beta. Почему некоторые таблицы не имеют первичного ключа? - PullRequest
1 голос
/ 09 мая 2009

Я использую NetBeans 6.7 Beta для создания классов сущностей из базы данных MySQL (версия '5.0.45-log'). NetBeans принимает большинство таблиц, но последовательно отклоняет определенные (я не вижу шаблон), говоря, что у них нет «первичного ключа». Все таблицы используют движок InnoDB. Все таблицы имеют первичные ключи одного или нескольких столбцов. Браузер запросов MySQL и навигатор внутренней базы данных NetBeans согласны с тем, что все таблицы действительно имеют первичный ключ. Что случилось?

Вот фрагмент скрипта, генерирующий неверные таблицы:

-- -----------------------------------------------------
-- Table `beamline`.`rq_requests`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `beamline`.`rq_requests` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `facility_id` INT NOT NULL ,
  `schedule_id` INT NOT NULL ,
  `experiment_id` INT NOT NULL ,
  `person_id` INT NOT NULL ,
  `shift_per_block` INT NOT NULL ,
  `block_count` INT NOT NULL ,
  `other_requirment` VARCHAR(1023) NULL ,
  `submitted` BOOLEAN NOT NULL ,
  `date_modified` DATETIME NOT NULL ,
  `date_created` DATETIME NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_rq_requests_xa_facilities` (`facility_id` ASC) ,
  INDEX `fk_rq_requests_xa_schedules` (`schedule_id` ASC) ,
  INDEX `fk_rq_requests_eec_exp_toc` (`experiment_id` ASC)
# ,INDEX `fk_rq_requests_eec_members` (`person_id` ASC)
 ,CONSTRAINT `fk_rq_requests_xa_facilities`
    FOREIGN KEY (`facility_id` )
    REFERENCES `beamline`.`xa_facilities` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
 ,CONSTRAINT `fk_rq_requests_xa_schedules`
    FOREIGN KEY (`schedule_id` )
    REFERENCES `beamline`.`xa_schedules` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
 ,CONSTRAINT `fk_rq_requests_eec_exp_toc`
    FOREIGN KEY (`experiment_id` )
    REFERENCES `beamline`.`eec_exp_toc` (`exp_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
# ,CONSTRAINT `fk_rq_requests_eec_members`
#    FOREIGN KEY (`person_id` )
#    REFERENCES `beamline`.`rq_questions` (`admin_uid` )
#    ON DELETE NO ACTION
#   ON UPDATE NO ACTION
)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `beamline`.`rq_questions_facilities`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `beamline`.`rq_questions_facilities` (
  `facility_id` INT NOT NULL ,
  `question_id` INT NOT NULL ,
  PRIMARY KEY (`facility_id`, `question_id`) ,
  INDEX `fk_req_faciliy_current_question_req_question` (`question_id` ASC) ,
  INDEX `fk_rq_questions_facilities_xa_facilities` (`facility_id` ASC),
  CONSTRAINT `fk_req_faciliy_current_question_req_question`
    FOREIGN KEY (`question_id` )
    REFERENCES `beamline`.`rq_questions` (`id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_rq_questions_facilities_xa_facilities`
    FOREIGN KEY (`facility_id` )
    REFERENCES `beamline`.`xa_facilities` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
 )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `beamline`.`rq_questions_supressed`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `beamline`.`rq_questions_suppressed` (
  `facility_id` INT NOT NULL ,
  `question_id` INT NOT NULL ,
  PRIMARY KEY (`facility_id`, `question_id`) ,
  INDEX `fk_req_facility_suppressed_question_req_question` (`question_id` ASC) ,
  INDEX `fk_rq_questions_suppressed_xa_facilities` (`facility_id` ASC),
  CONSTRAINT `fk_req_facility_suppressed_question_req_question`
    FOREIGN KEY (`question_id` )
    REFERENCES `beamline`.`rq_questions` (`id` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_rq_questions_suppressed_xa_facilities`
    FOREIGN KEY (`facility_id` )
    REFERENCES `beamline`.`xa_facilities` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Что дает? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 мая 2009

Я пытался выполнить ваши запросы (NB6.5.1), если они, кажется, работают нормально. Мне пришлось закомментировать все ограничения внешнего ключа, так что это не точное воспроизведение.

Учитывая это, возможно ли, что вы создали не все ссылочные таблицы (xa_facilities, rq_questions и т. Д.)? Они правильно структурированы?

Я рекомендую в будущем разделить реляционные ограничения на отдельные сценарии, чтобы вы всегда были уверены, что создаете их после всех ваших таблиц.

1 голос
/ 09 мая 2009

Проблема решена; внешний ключ к xa_facilities был INT (11), в то время как первичный ключ xa_facilities был INT (4). Duh!

...