Datenbank-Struktur

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbank-Struktur

    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:

    Code:
            
                 2   3   4   5   6   7   8   9   10 (Uhrzeit)
    
    Raum 1       g   g                  g    g   g
    
    Raum 2       r   r     r    r
    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:

    PHP-Code:
    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_adminzutritt`
    -- 

    CREATE TABLE `2801_adminzutritt` (
      `
    id_adminzutrittint(11NOT NULL auto_increment,
      `
    Taetigkeitvarchar(255NOT NULL default '',
      `
    id_benutzerint(11NOT NULL default '0',
      `
    Startzeitint(11NOT NULL default '0',
      `
    Endzeitint(11NOT NULL default '0',
      `
    Zutrittsverbottinyint(1NOT NULL default '0',
      
    PRIMARY KEY  (`id_adminzutritt`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_benutzer`
    -- 

    CREATE TABLE `2801_benutzer` (
      `
    id_benutzerint(11NOT NULL auto_increment,
      `
    Vornamevarchar(255NOT NULL default '',
      `
    Nachnamevarchar(255NOT NULL default '',
      `
    Firmavarchar(255NOT NULL default '',
      `
    Telefonvarchar(100NOT NULL default '',
      `
    Emailvarchar(255NOT NULL default '',
      `
    Benutzernamevarchar(255NOT NULL default '',
      `
    Passwortvarchar(255NOT NULL default '',
      `
    Recht_Admintinyint(1NOT NULL default '0',
      `
    Recht_Facilitytinyint(1NOT NULL default '0',
      
    PRIMARY KEY  (`id_benutzer`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_buchungen`
    -- 

    CREATE TABLE `2801_buchungen` (
      `
    id_buchungenint(11NOT NULL auto_increment,
      `
    Taetigkeitvarchar(255NOT NULL default '',
      `
    id_benutzerint(11NOT NULL default '0',
      `
    Startzeitint(11NOT NULL default '0',
      `
    Endzeitint(11NOT NULL default '0',
      `
    Zutrittsverbottinyint(1NOT NULL default '0',
      
    PRIMARY KEY  (`id_buchungen`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_buchungsflags`
    -- 

    CREATE TABLE `2801_buchungsflags` (
      `
    id_buchungsflagsint(11NOT NULL auto_increment,
      `
    id_buchungenint(11NOT NULL default '0',
      `
    Stundetinyint(2NOT NULL default '0',
      `
    Tagtinyint(2NOT NULL default '0',
      `
    Monattinyint(2NOT NULL default '0',
      `
    Jahrsmallint(4NOT NULL default '0',
      `
    id_raeumeint(11NOT NULL default '0',
      `
    Zutrittsverbottinyint(13NOT NULL default '0',
      `
    UniqueFlagvarchar(20NOT NULL default '0',
      
    PRIMARY KEY  (`id_buchungsflags`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_einschraenkungen`
    -- 

    CREATE TABLE `2801_einschraenkungen` (
      `
    id_einschraenkungenint(11NOT NULL auto_increment,
      `
    Einschraenkungvarchar(255NOT NULL default '',
      
    PRIMARY KEY  (`id_einschraenkungen`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_einschraenkungen2buchungen`
    -- 

    CREATE TABLE `2801_einschraenkungen2buchungen` (
      `
    einschraenkungen2buchungenint(11NOT NULL auto_increment,
      `
    id_einschraenkungenint(11NOT NULL default '0',
      `
    id_buchungenint(11NOT NULL default '0',
      `
    Typtinyint(1NOT NULL default '0',
      
    PRIMARY KEY  (`einschraenkungen2buchungen`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_einschraenkungen2konflikte`
    -- 

    CREATE TABLE `2801_einschraenkungen2konflikte` (
      `
    einschraenkungen2konflikteint(11NOT NULL auto_increment,
      `
    id_einschraenkungenint(11NOT NULL default '0',
      `
    id_konflikteint(11NOT NULL default '0',
      `
    Typtinyint(1NOT NULL default '0',
      
    PRIMARY KEY  (`einschraenkungen2konflikte`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_konflikte`
    -- 

    CREATE TABLE `2801_konflikte` (
      `
    id_konflikteint(11NOT NULL auto_increment,
      `
    Taetigkeitvarchar(255NOT NULL default '',
      `
    id_benutzerint(11NOT NULL default '0',
      `
    Startzeitint(11NOT NULL default '0',
      `
    Endzeitint(11NOT NULL default '0',
      `
    Zutrittsverbottinyint(1NOT NULL default '0',
      
    PRIMARY KEY  (`id_konflikte`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_raeume`
    -- 

    CREATE TABLE `2801_raeume` (
      `
    id_raeumeint(11NOT NULL auto_increment,
      `
    Namevarchar(255NOT NULL default '',
      `
    Ebenevarchar(100NOT NULL default '',
      
    PRIMARY KEY  (`id_raeume`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_raeume2adminzutritt`
    -- 

    CREATE TABLE `2801_raeume2adminzutritt` (
      `
    id_raeume2buchungenint(11NOT NULL auto_increment,
      `
    id_raeumeint(11NOT NULL default '0',
      `
    id_adminzutrittint(11NOT NULL default '0',
      
    PRIMARY KEY  (`id_raeume2buchungen`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_raeume2buchungen`
    -- 

    CREATE TABLE `2801_raeume2buchungen` (
      `
    id_raeume2buchungenint(11NOT NULL auto_increment,
      `
    id_raeumeint(11NOT NULL default '0',
      `
    id_buchungenint(11NOT NULL default '0',
      
    PRIMARY KEY  (`id_raeume2buchungen`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_raeume2konflikte`
    -- 

    CREATE TABLE `2801_raeume2konflikte` (
      `
    id_raeume2konflikteint(11NOT NULL auto_increment,
      `
    id_raeumeint(11NOT NULL default '0',
      `
    id_konflikteint(11NOT NULL default '0',
      
    PRIMARY KEY  (`id_raeume2konflikte`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_raumstatus`
    -- 

    CREATE TABLE `2801_raumstatus` (
      `
    id_raumstatusint(11NOT NULL auto_increment,
      `
    Raumstatusvarchar(255NOT NULL default '',
      
    PRIMARY KEY  (`id_raumstatus`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_raumstatus2raum`
    -- 

    CREATE TABLE `2801_raumstatus2raum` (
      `
    id_raumstatus2raumint(11NOT NULL default '0',
      `
    id_raumstatusint(11NOT NULL default '0',
      `
    id_raeumeint(11NOT NULL default '0'
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_raumstatuszuordnung`
    -- 

    CREATE TABLE `2801_raumstatuszuordnung` (
      `
    raumstatuszuordnungint(11NOT NULL auto_increment,
      `
    id_raeumeint(11NOT NULL default '0',
      `
    id_raumstatusint(11NOT NULL default '0',
      
    PRIMARY KEY  (`raumstatuszuordnung`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1;

    -- --------------------------------------------------------

    -- 
    -- 
    Tabellenstruktur für Tabelle `2801_subkonflikte`
    -- 

    CREATE TABLE `2801_subkonflikte` (
      `
    id_subkonflikteint(11NOT NULL auto_increment,
      `
    id_konflikteint(11NOT NULL default '0',
      `
    id_buchungenint(11NOT NULL default '0',
      
    PRIMARY KEY  (`id_subkonflikte`)
    ENGINE=MyISAM DEFAULT CHARSET=latin1
    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
Lädt...
X