2009-05-08 6 views
1

Ich verwende NetBeans 6.7 Beta, um Entity-Klassen aus einer MySQL-Datenbank (Version '5.0.45-log') zu erstellen. NetBeans akzeptiert die meisten Tabellen, lehnt bestimmte jedoch konsequent ab (ich sehe kein Muster) und sagt, dass sie "keinen Primärschlüssel" haben. Alle Tabellen verwenden die InnoDB-Engine. Alle Tabellen haben Primärschlüssel aus einer oder mehreren Spalten. Der MySQL Query Browser und der interne Datenbanknavigator von NetBeans stimmen überein, dass alle Tabellen tatsächlich einen Primärschlüssel haben. Was geht?NetBeans 6.7 Beta - Warum glaubt es, dass bestimmte Tabellen keinen Primärschlüssel haben?

Hier ist das Skript-Schnipsel, die schlechten Tabellen zu erzeugen:

-- ----------------------------------------------------- 
-- 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; 

Was soll das? Danke im Voraus.

+0

Sollte dies nicht ein NetBeans-Fehlerbericht sein? –

Antwort

1

Problem gelöst; Der Fremdschlüssel für xa_facilities war ein INT (11), während der Primärschlüssel von xa_facilities ein INT (4) war. Duh!

1

Ich habe versucht, Ihre Abfragen (NB6.5.1) laufen zu lassen, alle scheinen sie gut zu funktionieren. Ich musste alle Fremdschlüsseleinschränkungen auskommentieren, also ist es keine exakte Reproduktion.

Könnte es möglich sein, dass Sie nicht alle referenzierten Tabellen (xa_facilities, rq_questions usw.) erstellt haben? Sind sie richtig strukturiert?

Ich empfehle für die Zukunft relationale Einschränkungen in separate Skripte zu trennen, so dass Sie immer sicher sind, dass Sie sie nach Ihre Tabellen erstellen.