MySQL - Was ist Kardinalitaet?
Kalle_B
- datenbank
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
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
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
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
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
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...