Ich habe einige Sportanlagen, die Felder haben, in denen man 5x5 Fußball spielen kann. Ich versuche, ein einfaches Reservierungssystem für sie zu machen. Mein Problem ist, dass einige Felder kombinieren und größere Felder machen, die die Verwaltung der Einrichtungen als ihre eigenen Entitäten behandeln möchte (macht Sinn, wenn sie sie so buchen, warum nicht).Datenbank-Design für eine Entität, die aus anderen Entitäten bestehen könnte
Lassen Sie uns ein aktuelles Beispiel geben. Wir haben Anlage FA
. Sie haben 3 5x5 Felder nebeneinander, nennen wir dann sa, sb, sc
und zwei von ihnen können kombinieren, um ein 7x7 Feld zu machen, nennen wir es dd
und alle drei, um ein 10x10 Feld zu machen, nennen wir es te
. Dies passiert auch bei den anderen Einrichtungen, aber dies ist der extremste Fall.
Ich habe versucht zu denken, wie man die Tabellen für die Felder modelliert, wenn ich die Reservierung mache und damit umgehe, aber ich bin nicht sicher.
Eine Lösung, die ich habe, ist eine Tabelle zu haben, für die Felder
CREATE TABLE IF NOT EXISTS field (
id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
arena_id SMALLINT(4) UNSIGNED NOT NULL,
internal_id TINYINT(3) UNSIGNED NOT NULL,
is_composite BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (id),
UNIQUE (arena_id, internal_id),
CONSTRAINT fk_field_arena_id FOREIGN KEY (arena_id) REFERENCES arena(id) ON UPDATE CASCADE ON DELETE CASCADE
)
;
Und theh hat eine Eins-zu Eins oder Null Beziehung mit einem anderen Tisch
CREATE TABLE IF NOT EXISTS field_component (
field_id SMALLINT(5) UNSIGNED NOT NULL,
component SMALLINT(5) UNSIGNED NOT NULL,
PRIMARY KEY (field_id, component),
CONSTRAINT fk_field_component_field_id FOREIGN KEY (field_id) REFERENCES field(id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT fk_field_component_field_id2 FOREIGN KEY (component) REFERENCES field(id) ON UPDATE CASCADE ON DELETE CASCADE
)
;
, die Einträge mit den Feldern haben die ein Komponentenfeld umfassen. Ein Eintrag existiert nur dann, wenn das Flag is_composite in der Tabelle field
wahr ist.
Eine einfachere Lösung Ich dachte, dass ist ein bisschen mehr manuell, war statt der zweiten Tabelle und der Flagge, nur eine Zeichenfolge Spalte, wo ich die IDs der Felder, die das zusammengesetzte Feld als Komma machen getrennte Liste.
In einer separaten Notiz, ich habe darüber nachgedacht, die Flagge zu einer dritten Tabelle mit der Bezeichnung field_info
zusammengesetzt zu verschieben, die ich eins zu eins Beziehung mit dem Feld haben könnte und Informationen über jedes Feld enthalten wird. d. h. Größe, Material des Bodens, wenn es zusammengesetzt ist oder nicht, Anmerkungen dazu etc.
Alle Gedankenvorschläge, Kritik, Alternativen sind willkommen.
Was ist 'Feld_Komponente'? – Drew
@Drew Sorry, schlechte Benennung. Unter der Annahme, dass die IDs für die Felder "sa", "sb", "sc", "dd" und "te" jeweils 1, 2, 3, 4 und 5 für das "te" -Feld wären, gäbe es drei Einträge in der field_component Tabelle (5, 1), (5,2), (5,3). Das ist das Feld 5 hat als Komponenten die Felder 1, 2 und 3 –
nur einige offensichtliche Tippfehler nichts Material – Drew