Matze: Tabellenstruktur/Konzeptfrage

Beitrag lesen

Hallo Vinzenz!

ein Produkt kann es bei mehreren Märkten geben,
ein Markt kann mehrere Produkte führen,
=> das ist eine n:m-Beziehung, die Du in MySQL mit einer Beziehungstabelle
   umsetzen solltest.

Also war meine Vermutung gar nicht so verkehrt. Nur wie sieht so eine Tabelle aus?

So etwas löst man in Datenbankmanagementsystemen mit Foreign-Key-Constraints und ON DELETE CASCADE. MySQL kann das, aber nicht mit jeder Tabellenengine. MySQL unterstützt dies bei der InnoDB-Engine.

Du hast nicht zufällig 1, 2 Beispiele ausser einem Link auf das Handbuch?
Woher weiß ich welche Engine mein MySQL benutzt? Bis jetzt wusste ich nicht einmal, dass es mehrere gibt ;)

Nein, vergiß kommaseparierte Adressen. Einfach eine Spalte mit der ID des Marktes und eine Spalte mit der ID des Produktes. Gegebenenfalls weitere Spalten mit Informationen zur Zuordnung: zum Beispiel die verfügbare Anzahl eines Produktes in einem bestimmten Markt, den Standardpreis des Artikels in diesem Markt - der Preis wird ja nicht überall der gleiche sein, ...

Der Preis ist in dem Fall nicht relevant.
Also nur eine Tabelle mit den Spalten ID-Markt und ID-Produkt?
Und wenn ein Produkt in mehreren Märkten verfügbar ist, trage ich es mehrmals mit der jeweiligen ID ein?

z.B. (mit den Beispieldaten aus dem OP mit "Tante Emma Laden"...)
+------------+-----------+
| id_product | id_market |
+------------+-----------+
| 1          | 6         |
+------------+-----------+
| 1          | 7         |
+------------+-----------+

Wie muss dann die Struktur der Tabelle aussehen? Index? Spaltentypen?
Oder reicht eine Tabelle mit 2 Integer-Spalten?

»» Komplizierter wird es dann noch, wenn ich einen Markt lösche, ein Produkt dadurch ohne Zuordnung dasteht und dashalb ebenfalls gelöscht werden muss.
Nein, ein Produkt wird nicht durch die Schließung von Märkten vom Markt genommen. Es wird deswegen vom Markt genommen, weil es nicht mehr hergestellt wird.

Ich nehm es nicht vom Markt, ich nehm es nur aus der Liste der den Märkten zuzuordnenen Produkten.
Zusätzlich möchte ich noch eine Spalte in der das Produkt "deaktiviert", also verübergehend aus der Liste genommen werden kann ohne den Eintrag und die Zuordnungen selbst komplett zu löschen. Diese stehen, solange sie "deaktiviert" sind, nicht in der Liste der Artikel die den Märkten zugeordnet sind. Bzw. werden nicht beachtet. Bsp. Saisonartikel.
Diese Angabe müsste also auch noch in die Beziehungstabelle?
Genauso können Märkte verübergehen "gesperrt" werden.
In dem Fall können zwar weiter Produkte zugeordnet werden, aber der Markt soll nicht mehr abgefragt werden können. Also z.B. welche Produkte vorhanden.
Dazu komm ich aber wahrscheinlich erst später.

mit einer Zuordnungstabelle. Mit der InnoDB-Engine. Mit Foreign-Key-Constraints, mit ON DELETE CASCADE.

Mh, ich hoffe das Handbuch ist nicht zu geizig mit der deutschen Übersetzung und Beispielen...

Danke und Grüße, Matze