Hallo zusammen,
ich möchte mein Wissen bzgl. Datenbank-Strukturen auf die nächste Stufe bringen :-)
Bei einem aktuellen Projekt habe ich SQL-Statements, die über 5 Zeilen und 7 Tabellen laufen. Das kann nicht wirklich performant sein.
Hier das Szenario:
Es soll eine Art Raumbelegungsplan erstellt werden. Hier habe ich folgende Daten, die gespeichert werden müssen:
Buchung
======
Titel der Buchung
Startzeit (in stundengenau)
Endzeit (in stundengenau)
Räume
====
Ebene
Raum
Einschränkungen
==========
Titel der Einschränkung
Aktiv / Passiv
( -> Während ich den Raum gebucht hab, entsteht Lärm (aktiv); muss es leise sein (passiv))
Benutzer
======
Wer hat die Buchung gespeichert
Login PW etc.
Jede Buchung kann beliebig viele Räume und Einschränkungen haben, eine Einschränkung kann aktiv, passiv oder beides sein. Jede Buchung hat einen Benutzer.
Beim Eintragen muss geprüft werden, ob zu dem Zeitpunkt bereits eine Buchung besteht und ob diese mit den Einschränkungen kollidiert (wenn aktiv, darf nur aktiv, aber nicht passiv sein: Es können zwei gleichzeitig Lärm machen, aber nicht der eine macht Lärm, der andere braucht es ruhig).
Es muss nach Raum und nach Zeit angezeigt werden können. Bsp-Matrix:
g = gelb: Es existieren "normale" buchungen
r = rot: es wurde ein Zutrittsverbot gelegt, es darf kein anderer in den Raum
leer: keine Buchungen vorhanden
Konflikte und Zutrittsverbote müssen vom Administrator freigeschaltet werden.
Soweit der Rahmen.
Hierfür habe ich folgende Struktur:
Jetzt habe ich hier bei Fragen des öfteren gehört "irgendwie ist deine Db-Struktur nicht der Brüller" :-) Das kann gut sein.
Hat jemand Ideen/Anregungen, wie ich einiges eleganter angehen kann?
Oder ist die Struktur ok und nur meine Queries schlecht?
VIELEN DANK ALLEIN SCHON MAL FÜR DAS LESEN!!!!
strauberry
ich möchte mein Wissen bzgl. Datenbank-Strukturen auf die nächste Stufe bringen :-)
Bei einem aktuellen Projekt habe ich SQL-Statements, die über 5 Zeilen und 7 Tabellen laufen. Das kann nicht wirklich performant sein.
Hier das Szenario:
Es soll eine Art Raumbelegungsplan erstellt werden. Hier habe ich folgende Daten, die gespeichert werden müssen:
Buchung
======
Titel der Buchung
Startzeit (in stundengenau)
Endzeit (in stundengenau)
Räume
====
Ebene
Raum
Einschränkungen
==========
Titel der Einschränkung
Aktiv / Passiv
( -> Während ich den Raum gebucht hab, entsteht Lärm (aktiv); muss es leise sein (passiv))
Benutzer
======
Wer hat die Buchung gespeichert
Login PW etc.
Jede Buchung kann beliebig viele Räume und Einschränkungen haben, eine Einschränkung kann aktiv, passiv oder beides sein. Jede Buchung hat einen Benutzer.
Beim Eintragen muss geprüft werden, ob zu dem Zeitpunkt bereits eine Buchung besteht und ob diese mit den Einschränkungen kollidiert (wenn aktiv, darf nur aktiv, aber nicht passiv sein: Es können zwei gleichzeitig Lärm machen, aber nicht der eine macht Lärm, der andere braucht es ruhig).
Es muss nach Raum und nach Zeit angezeigt werden können. Bsp-Matrix:
Code:
2 3 4 5 6 7 8 9 10 (Uhrzeit) Raum 1 g g g g g Raum 2 r r r r
r = rot: es wurde ein Zutrittsverbot gelegt, es darf kein anderer in den Raum
leer: keine Buchungen vorhanden
Konflikte und Zutrittsverbote müssen vom Administrator freigeschaltet werden.
Soweit der Rahmen.
Hierfür habe ich folgende Struktur:
PHP-Code:
--
-- Tabellenstruktur für Tabelle `2801_adminzutritt`
--
CREATE TABLE `2801_adminzutritt` (
`id_adminzutritt` int(11) NOT NULL auto_increment,
`Taetigkeit` varchar(255) NOT NULL default '',
`id_benutzer` int(11) NOT NULL default '0',
`Startzeit` int(11) NOT NULL default '0',
`Endzeit` int(11) NOT NULL default '0',
`Zutrittsverbot` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id_adminzutritt`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_benutzer`
--
CREATE TABLE `2801_benutzer` (
`id_benutzer` int(11) NOT NULL auto_increment,
`Vorname` varchar(255) NOT NULL default '',
`Nachname` varchar(255) NOT NULL default '',
`Firma` varchar(255) NOT NULL default '',
`Telefon` varchar(100) NOT NULL default '',
`Email` varchar(255) NOT NULL default '',
`Benutzername` varchar(255) NOT NULL default '',
`Passwort` varchar(255) NOT NULL default '',
`Recht_Admin` tinyint(1) NOT NULL default '0',
`Recht_Facility` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id_benutzer`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_buchungen`
--
CREATE TABLE `2801_buchungen` (
`id_buchungen` int(11) NOT NULL auto_increment,
`Taetigkeit` varchar(255) NOT NULL default '',
`id_benutzer` int(11) NOT NULL default '0',
`Startzeit` int(11) NOT NULL default '0',
`Endzeit` int(11) NOT NULL default '0',
`Zutrittsverbot` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id_buchungen`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_buchungsflags`
--
CREATE TABLE `2801_buchungsflags` (
`id_buchungsflags` int(11) NOT NULL auto_increment,
`id_buchungen` int(11) NOT NULL default '0',
`Stunde` tinyint(2) NOT NULL default '0',
`Tag` tinyint(2) NOT NULL default '0',
`Monat` tinyint(2) NOT NULL default '0',
`Jahr` smallint(4) NOT NULL default '0',
`id_raeume` int(11) NOT NULL default '0',
`Zutrittsverbot` tinyint(13) NOT NULL default '0',
`UniqueFlag` varchar(20) NOT NULL default '0',
PRIMARY KEY (`id_buchungsflags`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_einschraenkungen`
--
CREATE TABLE `2801_einschraenkungen` (
`id_einschraenkungen` int(11) NOT NULL auto_increment,
`Einschraenkung` varchar(255) NOT NULL default '',
PRIMARY KEY (`id_einschraenkungen`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_einschraenkungen2buchungen`
--
CREATE TABLE `2801_einschraenkungen2buchungen` (
`einschraenkungen2buchungen` int(11) NOT NULL auto_increment,
`id_einschraenkungen` int(11) NOT NULL default '0',
`id_buchungen` int(11) NOT NULL default '0',
`Typ` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`einschraenkungen2buchungen`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_einschraenkungen2konflikte`
--
CREATE TABLE `2801_einschraenkungen2konflikte` (
`einschraenkungen2konflikte` int(11) NOT NULL auto_increment,
`id_einschraenkungen` int(11) NOT NULL default '0',
`id_konflikte` int(11) NOT NULL default '0',
`Typ` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`einschraenkungen2konflikte`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_konflikte`
--
CREATE TABLE `2801_konflikte` (
`id_konflikte` int(11) NOT NULL auto_increment,
`Taetigkeit` varchar(255) NOT NULL default '',
`id_benutzer` int(11) NOT NULL default '0',
`Startzeit` int(11) NOT NULL default '0',
`Endzeit` int(11) NOT NULL default '0',
`Zutrittsverbot` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`id_konflikte`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_raeume`
--
CREATE TABLE `2801_raeume` (
`id_raeume` int(11) NOT NULL auto_increment,
`Name` varchar(255) NOT NULL default '',
`Ebene` varchar(100) NOT NULL default '',
PRIMARY KEY (`id_raeume`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_raeume2adminzutritt`
--
CREATE TABLE `2801_raeume2adminzutritt` (
`id_raeume2buchungen` int(11) NOT NULL auto_increment,
`id_raeume` int(11) NOT NULL default '0',
`id_adminzutritt` int(11) NOT NULL default '0',
PRIMARY KEY (`id_raeume2buchungen`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_raeume2buchungen`
--
CREATE TABLE `2801_raeume2buchungen` (
`id_raeume2buchungen` int(11) NOT NULL auto_increment,
`id_raeume` int(11) NOT NULL default '0',
`id_buchungen` int(11) NOT NULL default '0',
PRIMARY KEY (`id_raeume2buchungen`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_raeume2konflikte`
--
CREATE TABLE `2801_raeume2konflikte` (
`id_raeume2konflikte` int(11) NOT NULL auto_increment,
`id_raeume` int(11) NOT NULL default '0',
`id_konflikte` int(11) NOT NULL default '0',
PRIMARY KEY (`id_raeume2konflikte`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_raumstatus`
--
CREATE TABLE `2801_raumstatus` (
`id_raumstatus` int(11) NOT NULL auto_increment,
`Raumstatus` varchar(255) NOT NULL default '',
PRIMARY KEY (`id_raumstatus`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_raumstatus2raum`
--
CREATE TABLE `2801_raumstatus2raum` (
`id_raumstatus2raum` int(11) NOT NULL default '0',
`id_raumstatus` int(11) NOT NULL default '0',
`id_raeume` int(11) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_raumstatuszuordnung`
--
CREATE TABLE `2801_raumstatuszuordnung` (
`raumstatuszuordnung` int(11) NOT NULL auto_increment,
`id_raeume` int(11) NOT NULL default '0',
`id_raumstatus` int(11) NOT NULL default '0',
PRIMARY KEY (`raumstatuszuordnung`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `2801_subkonflikte`
--
CREATE TABLE `2801_subkonflikte` (
`id_subkonflikte` int(11) NOT NULL auto_increment,
`id_konflikte` int(11) NOT NULL default '0',
`id_buchungen` int(11) NOT NULL default '0',
PRIMARY KEY (`id_subkonflikte`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Hat jemand Ideen/Anregungen, wie ich einiges eleganter angehen kann?
Oder ist die Struktur ok und nur meine Queries schlecht?
VIELEN DANK ALLEIN SCHON MAL FÜR DAS LESEN!!!!
strauberry