PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : m:n beziehung


gencha
18.02.2004, 02:28
also vorab ich hab so gut wie klein plan von datenbanken und bin da im allgemeinen auch sehr schwer von begriff.

meine momentane datenbank sieht wie folgt aus.
ich hab 10 tabellen (werden später circa 2000) jede dieser tabellen ist gleich aufgebaut. im grunde werden hier daten zu tv-serien gespeichert. so wie produktions code, titel, seriencode usw.

jetz soll man die möglichkeit haben so einem eintrag eine beliebige menge an strings zuzuordnen. diese sind md5 hashes welche dateien repräsentieren. das soll den zweck haben das man später eine suchanfrage nach dem hash starten kann und somit z.b. den titel der folge bekommt.

ich weiss nur nich ganz wie ich den letzten schirtt realisiern sollte. ein hash wäre ja noch relativ unproblematisch, bei mehreren hörts aber leider auf.

ich weiss das wir das in der schule als m:n beziehung bezeichnet haben. das is aber auch alles :(

bin sehr dankbar für jede hilfe :)


Scavi
18.02.2004, 11:04
Mach doch ne Tabelle Hash, mit einer ID (auto-inc), Key, Value und einem Foreign Key auf den PrimaryKey deines Eintrages.

Oder andersrum, im Eintrag eine neue Spalte mit ner eineindeutigen ID (faktisch gefaketer Foreign Key), die schreibste in die Tabelle Hash als neue eigene Spalte und lässt dafür den Foreign Key weg.

Musste mal sehen, was besser passt.
Ich hoffe, das war alles verständlich.

Esher
20.02.2004, 18:33
Nun ich hab auch gerade Probleme mit n:m Beziehungen :)

Also das Beispiel oben hat mir leider nicht weiter geholfen weil sich erstens die db von gencha zu meiner um Welten unterscheidet und zweitens ich den Tip vonScavi leider nicht verstanden habe :rolleyes:

Also es geht halt um n:m beziehungen.
Ich habe eine 1:n BEziehung das war ja kein Problem, da hab ich einfach die ID aus der ersten Tabelle als Fremdschlüssel in die zweite eingefügt.

Dann hab ich noch eine n:m Beziehung und da hab ich gehört, dass man noch eine Tabelle, mit den Ids beider Tabellen machen soll um zwei 1:n Beziehungen zu machen. Nur wenn ich dass mach sehe ich da irgendwie kein 1:n Beziehung. Kann das evtl jemand an einem Beispiel erklären :confused:

windmaster
23.02.2004, 09:30
Also,

es ist so diese tabelle die erstellst ist eine Beziehungstabelle, du nimmst die FKs der beiden Tabellen die du in eine Beziehung setzten willst und schreibst sie in eine Neue Tabelle. Daraus wird dann der neue PK. solltest du noch Attribute haben wie z.B. Preise, dann kommen die auch in die Beziehungstabelle.

Scavi
23.02.2004, 17:46
Daraus wird dann der neue PK ...den PK brauchst du extra (Extra ID-Spalte).

windmaster
23.02.2004, 17:50
...den PK brauchst du extra (Extra ID-Spalte).

verstehe ich nicht wozu braucht er noch eine extra ID. Der zusammen gesetzte PK reicht doch aus.

Scavi
23.02.2004, 17:59
Weil Strings nicht als PK geeignet sind.

Esher
23.02.2004, 23:02
Die PKs aus den beiden m:n Tabellen sind auch keine Strings

Ids vom Typ INT Auto Increment da brauch ich nochmal extra ne dritte Spalte mit noch einer ID in der Zusatz Tabelle? :confused:

windmaster
24.02.2004, 10:00
Womit Scavi recht hat das man keine Strings als PKs nehmene sollte. Aber da du ja keine strings verwendest ist es kein Problem die beiden IDs als PK in der Beziehungstabelle zu benutzten.

Scavi
24.02.2004, 17:57
Und wie speicherst du dann Hashs, die bis auf wenige Elemente doppelt vorkommen ? Da kannst du dann deine n-m-PKs nicht mehr nutzen.

Esher
24.02.2004, 20:50
Ich hab mich ja nicht auf das Beispiel aus dem ersten PÜost bezogen sondern allgemein auf n:m Beziehung wie du sicher aus meinen Posts lesen wirst :rolleyes:

windmaster
25.02.2004, 09:19
Also Scavi:

Da ich nie mit Hashs arbeite habe ich mir um dieses Problem auch nie gedanken gemacht. Bei zwei Autowerten die zusammen einen PK bilden, kann es nie doppelte Elemente geben. Oder sehe ich das falsch?

Scavi
25.02.2004, 15:22
Das siehst du richtig. Allerdings sollte die m-n Tabelle nur eine Referenztabelle sein und um auf ihre Einträge korrekt zugreifen zu können, muss ja eine ID existierien, die anzeigt, welcher Hash gesucht wird. Diese ID-Spalte ist ein FK auf die ID der den Hash verwaltet. Da, wenn mehrere Hashs in der Referenztabelle gespeichert werden, die m-n Beziehung doppelt vorkommen kann. Max. geht eine Komb. aus id-m-n als PK.

windmaster
27.02.2004, 13:03
Ja wie gesagt ich arbeite nie mit Hashs und deswegen habe ich nicht so die Einsicht wie du aber man lernt ja nie aus. Aber um das mal abzuschließen, ich benutze auch in kleineren Datenbanken eine eigene ID in den n:n-Tabellen