Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Primaerschluessel erstellen ueber mehrere Felder hinweg

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Papp Nase, 14 April 2014.

  1. Papp Nase

    Papp Nase Fleissiger Benutzer

    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.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. Papp Nase

    Papp Nase Fleissiger Benutzer

    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
     
  4. akretschmer

    akretschmer Datenbank-Guru

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


    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.

    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)
     
  5. NeoPrince

    NeoPrince Aktiver Benutzer

    @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)
     
    akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden