Hallo Forum,
ich stehe vor folgender Aufgabe:
Ich habe in meiner MySQL-DB eine Tabelle 'Anbieter'. In der stehen
Informationen zum Anbieter, wie bzw. Name usw. und unter anderem auch
ein feld 'id'. Jetzt soll ein Tagging eingeführt werden: Einem Anbieter
ist ein oder mehrere Tags zugeordnet. Hinter diesen Tags verbergen sich
letzdenlich Namen wie z.B. 'Gartenmöbel', 'Planzen', 'Tiernahrung'. Nun
sollen z.b der Anbieter mit der anbieter_id 1 die Tags 'Gartenmöbel' und 'Planzen' und der Anbieter mit der anbieter_id 3 die Tags 'Planzen' und 'Tiernahrung' zugeordnet werden. Die Tags kann man ganz eifach mit einer Tabelle auflösen:
tag_id: 1; tag_name: 'Gartenmöbel',
tag_id: 2; tag_name: 'Planzen',
tag_id: 3; tag_name: 'Tiernahrung'
Dann müsste man nur die Kombination aus tag-id und anbieter_id in relation setzen. Nur wie?
Der für mich logisch naheliegende Gedanke ist ein weiteres Feld 'Tags'
in meine Anbietertabelle aufzunehmen, in der dann für jeden Anbieter
durch Komma getrennt, die ihm zugeordneten Tags stehen. Ich weiss aber
selbst, dass das Quatsch weil unsinniges DB-Modell ist. Nur wie macht
man 's richtig. Wenn ich das Thema 'Normalisierung' damals richtig
verstanden habe, würde man die Zuordnung in einer separaten Tabelle
machen, in der ein Datensatz dann nur aus:
tag-id und anbieter_id
... bestünde. Damit wären in dem Beispiel für den Anbieter anbieter_id:1
sowie für den Anbieter anbieter_id:3 jeweils 2 Datensätze vorhanden.
Was ich mir dabei schwierig vorstelle ist die Praxis:
ich stelle mir vor, die Tagzuordnug für den Anbieter über eine
Multiselectbox abzubilden. Das hiesse aber beim Update (ein Formular,
das diese Mulitselectbox wird verschickt) mit zwei SQL-Statements
gearbeitet werden muss:
1. lösche alle datensätze mit z.B. anbieter_id:3
2. füge 2 datensätze: anbieter_id:3 tag_id:2 UND anbieter_id:3 tag_id:3
hinzu.
... korekt ?
Das geht sicher so, aber 'gefühlt' würde ich ein 'UPDATE' der Infoamtionen eines Anbieters für richtig halten.
Was meint Ihr ?
gute Nacht und
viele gruesse,
heinetz
für richtig halten.