Kalle_B: MySQL - Was ist Kardinalitaet?

Hallöle,

mit altgriechisch habe ich es nicht so ;-)

Weil eine einzige SQL- Abfrage zu lange braucht, habe ich die Keys der Tabellen überprüft und diesen Eintrag gefunden:

Name           Typ       Kardinalität
PRIMARY        PRIMARY   27752
adr_slot       UNIQUE        0
owner_id_slot  INDEX        61

Der Key "adr_slot" kommt infrage, aber die Kardinalität 0 machte mich stutzig, gibt es da keine Einträge?

Wikipedia meint:

Ausführliche Definition

Die Kardinalität eines Beziehungstyps (Relationshiptypes) gibt an, mit wieviel anderen Entitäten eine Entität eines bestimmten Entitätstyps in einer konkreten Beziehung stehen muss bzw. kann. Die Angabe erfolgt im ER-Diagramm durch eine Zahl bzw. einen Buchstaben oder eine Buchstabenkombination an der die Beziehung repräsentierenden Raute oder gelegentlich nur bestehenden Verbindungslinie zwischen den die Entitätstypen repräsentierenden Rechtecken.

Da steh ich nun, ich armer Tor und bin so klug als wie zuvor.

Kalle

  1. Hi,

    ich würde das etwas unterscheiden zwischen dem was die Wikipedia meint und was MySQL sagt.
    MySQL möchte dir schlicht und einfach mitteilen wie viele Einträge ihm unter diesem Index bekannt sind - ich nehme mal an, er meint in jedem Fall verschiedene Einträge, also z.B. in Datensatz 1, 2, 3 steht jedes Mal der indizierte Begriff X drin, dann würde trotzdem Kardinalität 1 rauskommen. Aber da mag ich mich täuschen.

    Die Wikipedia hingegen spielt auf die generelle Kardinalität (~Mächtigkeit) von Beziehungen an. Eine Beziehung mit Kardinalität 1:1 zwischen x und y hat zu einem Datensatz in x immer genau einen Datensatz in y. Bei Kardinalität 1:n bzw. n:1 steht n für eine beliebige Zahl, d.h. zu einem Datensatz können beliebig viele andere gehören. Die höchste Form ist n:m, bei der in beiden Richtungen beliebig viele Teilnehmer erlaubt sind, z.B. hat eine Person m Freunde und diese Person kann Freund von n Personen sein.

    MfG
    Rouven

    --
    -------------------
    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
    1. Hi,

      MySQL möchte dir schlicht und einfach mitteilen wie viele Einträge ihm unter diesem Index bekannt sind

      Oha, dann muss etwas kaputt sein. Die Tabelle hat 27.752 Zeilen, alle Felder sind NOT NULL.

      Der betr. Key ist UNIQUE und geht über 2 Felder:
      adr_id   int(11)
      slot_nr  int(11)
      müsste demnach auch 27.752 Einträge haben.

      Ich denke, ich baue die Tabelle nochmal neu auf?

      Kalle

      1. Der betr. Key ist UNIQUE und geht über 2 Felder:
        adr_id   int(11)
        slot_nr  int(11)
        müsste demnach auch 27.752 Einträge haben.

        Ich denke, ich baue die Tabelle nochmal neu auf

        Natürlich die Test-Tabelle.

        Das Exportieren von 27.xxx Datensätzen geht ja noch, kommen als INSERT alle auf den Schirm ...

        Okay, mit cut and paste in den Editor, Tabellenname geändert und dann ...

        Uuuups, wo kann ich importieren bei phpMyAdmin 2.5.3 ?

        Ach hier, SQL im Abfragefenster, Tab "Dateiimport". Klick drauf, kommt die Meldung:
        Auf das festgelegte Upload-Verzeichnis kann nicht zugegriffen werden.

        Gut, Sackgasse. Also den CREATE und meine 27.xxx INSERTs in das briefmarkengroße Feld
        SQL-Befehl(e) in Datenbank db4534 ausführen

        hineinkopiert und "OK"

        Es dauert ....

        Dann ein weißer Bildschirm. Suche in der Datenbank, meine neue Tabelle nirgends zu finden.

        Also nochmal in kleinen Häppchen. CREATE und nur 950 INSERTS.

        Das klappt endlich und die verdächtige Kardinalität steht tatsächlich auf 950.

        Frischen Mutes den Rest der INSERTs eingegeben.

        Es dauert ...

        Wieder der weisse Bildschirm und 950 Einträge in der Datenbank.

        Okay, ich verabschiede mich mal eben, muss jetzt 27 mal 1000 Datensätze übertragen.

        Ich glaube, ich bin im Kindergarten.

        Kalle

        1. Hehe..
          vielleicht erst einmal nachdenken!
          Bei den meisten Providern sollte ein klitzekleines Skript helfen die Daten in die Datenbank einzufügen!
          Brauchst du noch Hilfe oder suchst Du selbst?
          Viel grüße TomIRL

    2. Die Wikipedia hingegen spielt auf die generelle Kardinalität (~Mächtigkeit) von Beziehungen an. Eine Beziehung mit Kardinalität 1:1 zwischen x und y hat zu einem Datensatz in x immer genau einen Datensatz in y. Bei Kardinalität 1:n bzw. n:1 steht n für eine beliebige Zahl, d.h. zu einem Datensatz können beliebig viele andere gehören. Die höchste Form ist n:m, bei der in beiden Richtungen beliebig viele Teilnehmer erlaubt sind, z.B. hat eine Person m Freunde und diese Person kann Freund von n Personen sein.

      Das solltest du ja bereits aus meinem letzten Beitrag kennen. Und wenn du das wirklich beherzigen würdest, bräuchtest du auch keinen subquery...