MySQL - mehrere Werte in einer Zeile einbinden wie stell ich dies am besten an?

...komplette Frage anzeigen

4 Antworten

Über die Anzahl an Zeilen kannst du das nicht steuern, da es in jeder Tabelle beliebig viele Zeilen geben kann.

Du kannst aber, wenn es dir nichts aus macht, auf Designrichtlinien zu pfeifen, in der Tabelle Trainer einfach 6 Spalten für die Pokemon, die er trainiert, anlegen.

Der Primary Key identifiziert lediglich eindeutig einen Datensatz in einer Tabelle und ist indiziert.

Antwort bewerten Vielen Dank für Deine Bewertung

Hallo!

Mit dem Key liegst du richtig -- aber die max(6) entweder in das Umgebende Programm oder einen "Trigger" in die Pokemontabelle, z.B. einen Zähler für jeden Key in die Pokemon-Tabelle, der zählt, wievielmal der Key vergeben ist und dann nicht mehr als 6 zulassen -- ist aber sehr umständlich. Würde das ausserhalb der DB machen.

Andere Idee, eine dritte Tabelle "Key-Verwaltung" -- hier für jeden Key noch eine Spalte mit  "x-mal vergeben", und immer bevor der Key vergeben wird, dort nachschauen, ob es noch geht (eigentlich wieder nur mit einem Trigger realisierbar)

Gruß

Antwort bewerten Vielen Dank für Deine Bewertung

Ich würde eine Hilfstabelle einrichten, die nur eine Spalte mit den Zahlen 1 bis 6 als Primärschlüssel hat und diese Tabelle mit den 6 möglichen Sätzen füllen. In der Pokemontabelle würde ich einen Zähler als Fremdschlüssel vorsehen und einen unique Index in Verbindung mit der Trainer-Id drauflegen.

Jetzt muss jeder Pokemonsatz, der geschrieben wird, im Zähler eine Zahl zwischen 1 und 6 haben (wegen Fremdschlüssel) und keine Zahl kann innerhalb einer Trainer-Id mehrfach vorkommen (wegen eindeutigem Index). So gibt es keine Möglichkeit für einen Trainer, mehr als 6 Sätze anzulegen. Jeder Versuch, einen 7. Satz anzulegen würde gegen die Regelung verstoßen und von der Datenbank abgewiesen werden.

Vor dem Schreiben eines Satzes müsste immer erst eine freie Nummer ermittelt werden. Nachfolgende Abfrage würde die erste freie Nr. des Trainers mit der Id 12345 bringen:

  
SELECT MIN(zaehler) FROM hilfstabelle
WHERE zaehler NOT IN
(SELECT zaehler FROM pokemontabelle
WHERE trainer-id = 12345)

Die Anzahl der erlaubten Sätze wäre dann frei wählbar, je nach der Anzahl der Sätze in der Hilfstabelle. Zu dieser dürfte natürlich nur der Administrator Zugriff haben.

Antwort bewerten Vielen Dank für Deine Bewertung

Das ist auch Teil der Geschäftslogik und hat im Datenbankdesign nix zu suchen.

Antwort bewerten Vielen Dank für Deine Bewertung
BGSBNNY 06.01.2016, 18:15

könntest du das näher erläutern?

0
EightSix 06.01.2016, 19:16
@BGSBNNY

Dass das im Programmcode überprüft werden muss und nicht in der Datenbank. Ich beziehe mich auf die Anzahl.

0
wotan38 07.01.2016, 17:46
@EightSix

Warum sollte man eine Geschäftslogik nicht in der Datenbank realisieren?

0

Was möchtest Du wissen?