# MySQL Tables 1:1 verbindung



## Generic1 (6. Mai 2010)

Hallo,

ich wollte zwishcen 2 Tabellen eine 1:1 verbindung erzeugen und bin mir jetzt nicht sicher ob das so stimmt?
Besten Dank,

```
CREATE TABLE TParticipant(id INT NOT NULL AUTO_INCREMENT,
                         PRIMARY KEY(id),
                         firstname VARCHAR(100),
                         surname VARCHAR(150)); 

CREATE TABLE TResult(ResultNr INT NOT NULL,
                     meantime1 TIMESTAMP(8),
                     meantime2 TIMESTAMP(8),
                     endtime TIMESTAMP(8) NOT NULL,
                     FOREIGN KEY(ResultNr) REFERENCES TParticipant(id));
```


----------



## SlaterB (6. Mai 2010)

sieht gut aus, gehts nicht?

edit:
zur Antwort von fastjack unten: oder unique, Primary Key kann auch was anderes sein


----------



## fastjack (6. Mai 2010)

ResultNr muß noch PrimaryKey sein, ansonsten hast Du den Effekt, das ein TParticipant von mehren TResult verwendet wird.

Nachtrag: Du mußt dafür sorgen, das TParticipant.id == TResult.ResultNr ist.


----------



## Generic1 (6. Mai 2010)

Besten Dank mal, es geht schon aber der Foreign key wurde nicht angezeit, jetzt war ich mir nicht sicher.
Habs jetzt noch ausgebessert nach:


```
CREATE TABLE TParticipant(id INT NOT NULL AUTO_INCREMENT,
                         PRIMARY KEY(id),
                         firstname VARCHAR(100),
                         surname VARCHAR(150),
                         chipnumber VarCHAR(8),
                         UNIQUE (chipnumber)
                         );

CREATE TABLE TResult(resultid INT NOT NULL,
                     meantime1 TIMESTAMP(8),
                     meantime2 TIMESTAMP(8),
                     endtime TIMESTAMP(8) NOT NULL,
                     FOREIGN KEY(resultid) REFERENCES TParticipant(id),
                     UNIQUE(resultid)
                     );
```

Meine SQL Vorlesung ist 1 Jahr her und es ist nichts mehr da außer SELECT und INSERT, das ist schon frustrierend :-(


----------



## Generic1 (6. Mai 2010)

Was jetzt noch nicht passt ist, ich kann in die Tabelle TResult einträge einfügen mit einer ID, die es in TParticipant gar nicht gibt:

TParticipant:

```
1  Hans Huber 1234
2  Albert Maier 3214
```

TResult:

```
1 ...
2 ...
3 ...
4 ...
```

Eintrag 3 und 4 in TResult dürften ja nicht gehen oder?


----------



## Gast2 (6. Mai 2010)

Zeig mal die vollen Inserts


----------



## SlaterB (6. Mai 2010)

vielleicht musst du noch angeben, dass die Tabelle vom Typ InnoDB ist

MyISAM ? Wikipedia


> MyISAM unterstützt allerdings im Unterschied zu z. B. InnoDB keine Transaktionen oder referenzielle Integrität.


----------



## Generic1 (6. Mai 2010)

Wenn ich das so eingebe funktionierts, obwohl es nicht funktionieren dürfte meiner Meinung nach, da noch keine TParticipants in der Tabelle sind wenn ich TResults inserte!?


```
Insert INTO TResult Values (4, null, null, now());
Insert INTO TResult Values (3, null, null, now());
Insert INTO TResult Values (2, null, null, now());
Insert INTO TResult Values (1, null, null, now());
Insert INTO TParticipant Values(1, 'Hans', 'Müller', 'DF-932DI');
Insert INTO TParticipant Values(2, 'Albert', 'Maier', 'DF-962DI');
```


----------



## Gast2 (6. Mai 2010)

Denke mal das SlaterB richtig liegt. Du brauchst InnoDB Tabellen.


----------



## srea (6. Mai 2010)

Richtig, MyISAM unterstützt keine Foreign Keys!


----------



## Generic1 (6. Mai 2010)

Habs jetzt mit der DB Firebird versucht -> funktioniert einwandfrei.

Mit dem InnoDB zeug kenn ich mich nicht aus, was soll das bewirkten und was müsste ich da in meinem Fall machen?
Besten Dank,


----------



## SlaterB (6. Mai 2010)

Link anklicken, Link lesen


----------



## Generic1 (6. Mai 2010)

Das war eine Prozetur, jetzt gehts, besten Dank!!
Das hat man davon, wenn man sich nur mir Firebird und Oracle auskennt


----------



## musiKk (6. Mai 2010)

Generic1 hat gesagt.:


> Das hat man davon, wenn man sich nur mir Firebird und Oracle auskennt



... oder wenn man MySQL einsetzt. *scnr*


----------



## tuttle64 (7. Mai 2010)

Generic1 hat gesagt.:


> Hallo,
> 
> ich wollte zwishcen 2 Tabellen eine 1:1 verbindung erzeugen und bin mir jetzt nicht sicher ob das so stimmt?Besten Dank,




Wenn eine 1:1 Beziehung besteht, weshalb legst Du nicht eine Tabelle mit allen Attributen an?


----------

