MySQL - Zwei Beziehungen zwischen zwei Tabellen

suevas

Grünschnabel
Hallo zusammen

Ich arbeite an einer Datenbank, bei der ich Probleme habe Verbindungen zwischen zwei Tabellen herzustellen.

In der einen Tabelle (Z) habe ich unteranderem 2 Primary Keys (iAN, iVN) welche beide benötigt werden um eine eindeutige Identifizierung des Datensatzes zu ermöglichen.

In der anderen Tabelle (X) habe ich ebenfalls die 2 Attribute interneAuftragsNr, interneVersionsNr welche auf die andere Tabelle, in Form von Foreign Keys, referenzieren sollten. Diesesmal ist der Primary Key ein Standard Attribut ID.

Mein Problem ist es, dass ich es nicht fertig bringe die Tabellen mit einander zu verlinken, ausser wenn ich für eines der Attribute der zweiten Tabelle mit mehr als einem Index versehe, was mir als unsauber und merkwürdig scheint.

Kennt jemand das Problem, bzw. ist es normal das man für ein solches Szenario "zu viele" Indexe erstellen muss?

MySQL: 5.1.44
OS: Mac OS X 10.6.6

Test-Script (Erstellt das gewünschte Modell allerdings eben mit dem Index der meiner Meinung nach zu viel ist):
Code:
CREATE TABLE Z (
iAN VARCHAR( 10 ) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL ,
iVN VARCHAR( 20 ) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL ,
Beschreibung VARCHAR( 50 ) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL ,
PRIMARY KEY ( iAN , iVN )
) ENGINE = InnoDB CHARACTER SET latin1 COLLATE latin1_german1_ci;


INSERT INTO Z (
iAN ,
iVN ,
Beschreibung
)
VALUES (
'GGG', 'v0.3.2', ''
), (
'GGG', 'v0.4', ''
);


CREATE TABLE X (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
interneAuftragsNr VARCHAR( 10 ) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL ,
interneVersionsNr VARCHAR( 20 ) CHARACTER SET latin1 COLLATE latin1_german1_ci NOT NULL
) ENGINE = InnoDB CHARACTER SET latin1 COLLATE latin1_german1_ci;



INSERT INTO X (
ID ,
interneAuftragsNr ,
interneVersionsNr
)
VALUES (
NULL , 'GGG', 'v0.4'
);


ALTER TABLE X ADD INDEX ( interneAuftragsNr , interneVersionsNr ) ;


ALTER TABLE X ADD INDEX ( interneVersionsNr ) ;

ALTER TABLE Z ADD INDEX ( iVN ) ;

ALTER TABLE X ADD FOREIGN KEY ( interneAuftragsNr ) REFERENCES Z (
iAN
);

ALTER TABLE X ADD FOREIGN KEY ( interneVersionsNr ) REFERENCES Z (
iVN
);
 
Zurück