Importierung Daten als FK von PK in anderen Tabellen

vector_ever

Mitglied
Hallo,

Ich habe Daten Bank mit 7 Tabellen, jede Tabelle hat eigene PK, und ich möchte noch andere Tabelle hat auch eigene PK und dazu 7 FK, jedes Fremdschlüssel referenziert zu andere PK in andere Tabelle
Code:
 String createTable = "CREATE TABLE  eumonis.PowerPlant ("
               + "  plantId VARCHAR(25) PRIMARY KEY NOT NULL," 
               + "  manufacturerId VARCHAR(25) NOT NULL," 
               + "  distOpId VARCHAR(25) NOT NULL," 
               + "  TransOpId VARCHAR(25)  NOT NULL," 
               + "  LocationId VARCHAR(25)  NOT NULL," 
               + "  StateId VARCHAR(25) NOT NULL," 
               + "  LevelId VARCHAR(25) NOT NULL,"
               + "  SourceId VARCHAR(25) NOT NULL," 
               + "  FOREIGN KEY (manufacturerId) REFERENCES eumonis.Manufacturer(name),"
               + "  FOREIGN KEY (TransOpId) REFERENCES eumonis.TransmissionGridOperator(operatorId)," 
               + "  FOREIGN KEY (distOpId) REFERENCES eumonis.DistributionGridOperator(operatorId)" 
               + ")";
	   
	   /* 
	    String createTable = "CREATE TABLE  eumonis.Location( " 
        + " locationId int(50)  PRIMARY KEY AUTO_INCREMENT, "
        + " bundesland VARCHAR(25) NOT NULL," 
        + " ort VARCHAR(75) NOT NULL," 
        + " plz VARCHAR(25) NOT NULL,"
        + " strasse VARCHAR(255) NOT NULL)"; 
	    */	
		            
	   /* String createTable = "CREATE TABLE  eumonis.Manufacturer " 
		          + "(name VARCHAR(75) PRIMARY KEY NOT NULL)";*/
	  /* 
	   String createTable = "CREATE TABLE  eumonis.DistributionGridOperator " 
		          + "(operatorId VARCHAR(25)  PRIMARY KEY NOT NULL," +
		          		"name VARCHAR(75) NOT NULL)";
	   */
	   
	  /*   String createTable = "CREATE TABLE  eumonis.TransmissionGridOperator " 
		          + "(operatorId VARCHAR(25)  PRIMARY KEY NOT NULL," +
		          		"name VARCHAR(75) NOT NULL)";
	    */
		   
	   /*
	    	String createTable = "CREATE TABLE  eumonis.federalState " 
		          + "(stateId VARCHAR(8) PRIMARY KEY NOT NULL)";
	    */
	   
	  /* 
	   String createTable = "CREATE TABLE  eumonis.feedInLevel " 
		          + "(levelId VARCHAR(25) PRIMARY KEY NOT NULL)";
	   
	   
	   String createTable = "CREATE TABLE  eumonis.energySource " 
		          + "(sourceId VARCHAR(45) PRIMARY KEY NOT NULL)";
	  */

die frage ist jetzt, wie kann man diese Primärschlüsseln von alle tabellen in eumonis.PowerPlant Tabelle als Fremdschlüsseln hinzufügen?
Code:
String query = "insert into eumonis.PowerPlant values(?,?,?,?,?,?,?)";
	       PreparedStatement ps = null;
ps = con.prepareStatement(query);

	           Iterator<PowerPlant> it = dataHolder.iterator();
	           while (it.hasNext()){
	        	   PowerPlant obj = it.next();
//benutz ps um die Fremdschlüsseln in datenbank addieren, aber wie
 
>benutz ps um die Fremdschlüsseln in datenbank addieren, aber wie

Was genau willst du haben? Was willst du addieren****?
"insert into eumonis.PowerPlant ..." du willst also etwas inserten, und du fragst uns was du inserten sollst? Das musst doch du wissen, welche FK Verknüpfungen du mit diesem Datensatz abspeichern willst. Frage doch die 3 FK Tabellen ab, wo der "name" deiner Vorgabe entspricht und nimm dann die Id und übergeben das zum insert statement.
Oder habe ich jetzt deine Frage einfach nicht richtig verstanden?
 
Also, kann sein, du hast die Frage falsch verstanden, ich weiß genau was ich in meinem DB addieren möchte, aber die frage, weiß nicht wie.

Du kannst oben sehen (Erste Kode) wo ich alle Tabellen erzeugt, und jede Tabelle hat eigene PK, Z.B:
Code:
String createTable = "CREATE TABLE  eumonis.Location( " 
        + " locationId int(50)  PRIMARY KEY AUTO_INCREMENT, "
        + " bundesland VARCHAR(25) NOT NULL," 
        + " ort VARCHAR(75) NOT NULL," 
        + " plz VARCHAR(25) NOT NULL,"
        + " strasse VARCHAR(255) NOT NULL)";

Hier mein PK ist "locationId" (die Elementen schon bereit in dieser Tabelle), und diese "locationId" ist FK in Tabelle eumonis.PowerPlant (die ist ganz leer)

jetzt was ich möchte genau, dass diese Spalte "locationId" in Tabelle "eumonis.Location" zu Spalte "locationId" in Tabelle eumonis.PowerPlant aber als FK hinzufüge

Ist das möglich oder gehe ich ganz falsche Richtung
 
achso, also nach dem "CREATE TABLE eumonis.Location( " kannst du folgendes machen:

SQL:
ALTER TABLE eumonis.PowerPlant ADD FOREIGN KEY (LocationId) REFERENCES eumonis.Location(LocationId);
Das fügt einen zusätzlichen FK hinzu. Ich denke du suchst das.

PS: addieren != hinzufügen, mit SQL kann man nämlich auch addieren, also a+b
 
Zuletzt bearbeitet von einem Moderator:
Auch das meinte ich nicht, das habe schon gemacht, du kannst es in meiner ersten Kode oben anschauen.

Was meinte ich, wie kann ich die spalten von anderen Tabellen, die schon PK sind, zu Spalten die FK sind, in "eumonis.PowerPlant" Tabelle hinzufügen.

Z.B:
"locationId" ist PK in "eumonis.Location" Tabelle
HTML:
locationId 	bundesland    ort       plz       strasse 
------------------------------------------------------------------------
2134	            SN      Leipzig    04324	   Str.1
1265	           NRW      Duisburg   47057       Str.3
2341	            BB      Berlin     10115       Str.5

Jetzt "locationId" ist Fremdschlüßel in "eumonis.PowerPlant" Tabelle
HTML:
plantId            LocationId 
------------------------------------------------------------------------
734	            ********?
584	            ********?
324	            ********?

Jetzt alles was ich möchte, füge diese spalte "LocationId " von "eumonis.Location" Tabelle zur "eumonis.PowerPlant" hinzu. (wo "locationId" ist FK und referenziert zu PK "locationId" in "eumonis.Location".

wie kann ich so machen?
 
Auch das meinte ich nicht, das habe schon gemacht, du kannst es in meiner ersten Kode oben anschauen.

Wo hast du das denn schon gemacht? In deinem ersten Code gibt es lediglich 3 FKs und keiner davon geht auf eumonis.Location(LocationId) :
SQL:
               + "  FOREIGN KEY (manufacturerId) REFERENCES eumonis.Manufacturer(name),"
               + "  FOREIGN KEY (TransOpId) REFERENCES eumonis.TransmissionGridOperator(operatorId)," 
               + "  FOREIGN KEY (distOpId) REFERENCES eumonis.DistributionGridOperator(operatorId)"

Und wie denn bitte schön sollten wir wissen, welches PowerPlant zu welcher Location gehört? Das musst du wissen, wir können das nicht sagen. Ich habe keine Anhung was PlantId 734 ist und ob das zur Loaction 2134, 1265 oder 2341 gehört. Du kennst die Daten und solltest das eigentlich sagen können.

Wenn ich deinen Code so anschaue, nehme ich mal an das ist Java. Wenn du also weist, dass für dein PowerPlantId 734 die Location 1265 die richtige wäre, dann fülle doch ersteinmal die LoactionId in eine Variable ab (z.B.: select locationid from eumonis.Location where plz=47057) und übergib dann die an das insert statement.

Oder aber du kannst auch das insert into statement erweitern:
SQL:
INSERT INTO eumonis.PowerPlant (plantId, locationId)
SELECT 
734 AS plantId, 
loc.locationId 
FROM 
(select locationid from eumonis.Location where plz=47057) loc;

Aber in jedem Fall musst du wissen welche loactionid die richtige ist...
 
Zuletzt bearbeitet von einem Moderator:
Sorry noch mal, ich meinte so:
PowerPlantId 734 für die Location 2134
PowerPlantId 584 für die Location 1265
PowerPlantId 324 für die Location 2341

Also wie Kann man so machen mit
Code:
INSERT IGNORE into eumonis.PowerPlant values(?,?,?,?)
 
Zurück