Primaerschluessel erstellen ueber mehrere Felder hinweg

Papp Nase

Aktiver Benutzer
Beiträge
48
Hallo,

ich moechte in einer Tabelle einen Primaerschluessel von mehreren Spalten erstellen.

Spalt_A, bigint(20),
Spalt_B, bigint(20),
Spalt_C,text, utf16_german_2_ci
Spalt_D,float

Ich moechte den Primaerschluessel ueber die Spalten A-C erstellen.
Code:
ALTER TABLE `eine_tabelle` ADD PRIMARY KEY ( `Spalt_A` , `Spalt_B` , `Spalt_C` ) ;


Fehlermeldung:
Code:
#1170 - BLOB/TEXT column 'Spalt_C' used in key specification without a key length

Ich habe zwar schon den Google-Dienst beauftragt, nach einer Problemloesung zu suchen. Soweit ich diese Fehlermeldung verstehe, darf ein Primaerschluessel nicht groesser als 724bit sein und wahrscheinlich ist das Feld Spalt_C zu groß.

Ich habe den Primaerschluessel geloescht, weil es sonst zur Fehlermeldung kam, dass doppelte Eintraege vorhanden sind. Primaerschluessel nur ueber die Spalten A und B ist nicht ausreichend, weil das Merkmal in C eben auch wichtig ist.

Ich bin damit aber ungluecklich. Die Spalten A bis C bestimmen den eindeutigen Schluessel fuer die Spalte D.
 
Werbung:
Ich bin damit aber ungluecklich. Die Spalten A bis C bestimmen den eindeutigen Schluessel fuer die Spalte D.

MySQL halt.

Code:
test=# create table foo(a bigint, b bigint, c text, d float, primary key(a,b,c,d));
CREATE TABLE

Du könntest versuchen, mit einem TRIGGER aus dem TEXT-Feld in einem weiteren Feld den md5 -Hash abzulegen und dann dieses Feld im Index zu nutzen. Oder aber eben gleich eine Datenbank nehmen.
 
Hallo, vielen Dank für Deine Antwort.

Was meinst Du denn damit - "Oder aber eben gleich eine Datenbank nehmen." Ich nehme doch eine Datenbank.

Ich habe das Problem

Zeitstempel, GeräteID, Messgröße, Messwert

Zu einem Zeitstempel und Gerät gehören verschiedene Messwerte, z.B. Temperatur I, Temperatur II, Geschwindigkeit ...

In einem anderen Thread habt ihr mir dazu geraten, nicht in einer mehrspaltigen Tabelle zu arbeiten, in der alle Messwerte erfasst werden, sondern es mit vier Spalten zu machen und später in der Auswertung die Daten dann zusammenzufassen. Das gefällt mir auch viel beser, weil ich so in meiner Anwendung die Messwerte nicht vorsortieren brauche, um sie dann in die DB zu schreiben.

Oder meinst Du mit "Oder gleich eine Datenbank nehmen", dass ich eine zweite Tabelle erstelle, in der ich zwei Felder habe

MessgroesseID, Messgroesse
1, Temperatur 1
2, Temperatur 2
3, Geschwindigkeit

Und dann bei Messgröße in der anderen Tabelle nicht den Namen einsetze, sondern den Schlüssel? Ich glaube, dass macht auch mehr Sinn, oder?


Zeitstempel, GeräteID, MessgroesseID, Messwert
 
Hallo, vielen Dank für Deine Antwort.

Was meinst Du denn damit - "Oder aber eben gleich eine Datenbank nehmen." Ich nehme doch eine Datenbank.

Es gibt Datenbanken wie M$SQL, Oraggle, PostgreSQL, Informix, SQLlite und so. Und es gibt MySQL. *g*


Ich habe das Problem

Zeitstempel, GeräteID, Messgröße, Messwert

Zu einem Zeitstempel und Gerät gehören verschiedene Messwerte, z.B. Temperatur I, Temperatur II, Geschwindigkeit ...

In einem anderen Thread habt ihr mir dazu geraten, nicht in einer mehrspaltigen Tabelle zu arbeiten, in der alle Messwerte erfasst werden, sondern es mit vier Spalten zu machen und später in der Auswertung die Daten dann zusammenzufassen. Das gefällt mir auch viel beser, weil ich so in meiner Anwendung die Messwerte nicht vorsortieren brauche, um sie dann in die DB zu schreiben.

Ja, das paßt so schon. Die Messgröße ist dann Text, und MySQL kann das dann nicht mehr indizieren? Nun - in PostgreSQL geht es.

Oder meinst Du mit "Oder gleich eine Datenbank nehmen", dass ich eine zweite Tabelle erstelle, in der ich zwei Felder habe

MessgroesseID, Messgroesse
1, Temperatur 1
2, Temperatur 2
3, Geschwindigkeit

Und dann bei Messgröße in der anderen Tabelle nicht den Namen einsetze, sondern den Schlüssel? Ich glaube, dass macht auch mehr Sinn, oder?


Zeitstempel, GeräteID, MessgroesseID, Messwert

Das wäre auch eine Möglichkeit. Hätte den Charme, daß da nicht Müll als Meßgröße gespeichert werden kann (Foreign Keys - Constraints vorausgesetzt)
 
Werbung:
Es gibt Datenbanken wie M$SQL, Oraggle, PostgreSQL, Informix, SQLlite und so. Und es gibt MySQL. *g*

@Papp Nase MySql ist natürlich auch eine Datenbank. aber er hat schon recht, sie lässt einiges durch gehen wass im grunde blödsinn ist.
Das macht es im zusammenspiel mit sprachen wie php (die ebenfalls zum schweinischen programmieren gedacht sind) einfach mal schnell etwas hinzupfriemeln, was natürlich auch daran liegt, dass man bei solchen sprachen inzwischen bei der x-ten Itteration mit Frameworks und virtuellen maschienen und haste nicht gesehen angekommen ist.
Ich mache selber viel mit PHP und MySql und es hat auch seine Vorteile.
Für ernste und performante Anwendungen würde ich aber auch auf andere mittel zurückgreifen

Wenn man aber keine andere wahl hat muss man halt damit leben (so wie ich schnief)
 
Zurück
Oben