hotti: MySQL Tabellen zentral anlegen

moin,

bisher hab ich meine Tabellen entweder per Adminfrontend angelegt oder automatisiert im jeweiligen Script (Abfrage, ob vorhanden, wenn nicht, anlegen).

Heute morgen kam mir die Idee, das zentral zu machen mit einem CGI-Script, nennen wir es "createtables.cgi" (perl). Da gibt es einen hash, wie folgt:

  
my %soll = (  
 'tabelle' => 'createstatement',  
 'tab'     => 'create table tab...',  
);  

Den ist-Zustand frage ich so ab:
my %tabs = map{$_,1}$dbh->selectrow_array("show tables");
Und lass dann das Script durch die hashes rauschen...

Wie macht Ihr das? Was haltet Ihr von o.g. "zentralen Lösung"?

Hotte

--
Mach scho...
  1. Hi,

    (Abfrage, ob vorhanden, wenn nicht, anlegen).

    wann ist das relevant?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      »» (Abfrage, ob vorhanden, wenn nicht, anlegen).

      wann ist das relevant?

      Genau das ist die Frage: Bei _jedem_ Aufruf des jeweiligen CGI-Scripts würde eine solche Kontrollstruktur greifen.

      Jeder Busfahrer weiß, dass das irgendwie Blödsinn ist, denn die Tabelle muss nur _einmal_ angelegt werden. Bei HPW (Häufiger Provider Wechsel) machts die Sache jedoch einfach: Script hochladen, chmod 755 fertig. Oder vielleicht doch ein Script für alle create's?

      Hotte

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
      1. Hi,

        (Abfrage, ob vorhanden, wenn nicht, anlegen).

        wann ist das relevant?

        Genau das ist die Frage: Bei _jedem_ Aufruf des jeweiligen CGI-Scripts würde eine solche Kontrollstruktur greifen.

        Was ist jetzt das "jeweilige" CGI-Script?
        Das jenige, welches das "normale" Arbeiten mit den Tabellen erledigen soll, also Werte einfügen, Werte abfragen, ...?

        Jeder Busfahrer weiß, dass das irgendwie Blödsinn ist, denn die Tabelle muss nur _einmal_ angelegt werden. Bei HPW (Häufiger Provider Wechsel) machts die Sache jedoch einfach: Script hochladen, chmod 755 fertig. Oder vielleicht doch ein Script für alle create's?

        Jedes mal erst zu Fragen, ob einen Tabelle existiert, bevor man weiter mit ihr arbeitet, erscheint mir deutlich unperformant.

        Selektieren, Einfügen, Updaten - das lässt man ein Script einfach "drauf los" machen. Wenn's die Tabelle nicht geben sollte, wird die Datenbank sich mit einer entsprechenden Fehlermeldung äussern, auf die reagiert werden kann.

        Und einmalig aufzurufende Installationsroutinen sind weder im Bereich der Scriptsprachen noch bei deren als ausführbare Dateien kompilierten Pendants ungewöhnlich, sondern viel eher die Regel.
        Von diesem bewährten Konzept zugunsten einer deutlich unperformanteren Lösung abzuweichen, erscheint mir im Normalfall zwischen ungünstig und -sinnig zu rangieren.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Hi,

          Und einmalig aufzurufende Installationsroutinen sind weder im Bereich der Scriptsprachen noch bei deren als ausführbare Dateien kompilierten Pendants

          ungewöhnlich, sondern viel eher die Regel.

          Ok, das denke ich auch, danke!

          Hotte

          --
          .
      2. Hi,

        Bei HPW (Häufiger Provider Wechsel) machts die Sache jedoch einfach: Script hochladen, chmod 755 fertig.

        also im Prinzip ein Setup-Script, auch nützlich bei Änderungen des DB-Schemas durch neue Versionen einer Software. Ja, dafür würde ich auch etwas schreiben, das in die Richtung des von Dir genannten Codes geht. Allerdings würde ich es als separates Script notieren, welches ich ausschließlich bei Bedarf verwende.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. hi,

          also im Prinzip ein Setup-Script, auch nützlich bei Änderungen des DB-Schemas durch neue Versionen einer Software. Ja, dafür würde ich auch etwas schreiben, das in die Richtung des von Dir genannten Codes geht. Allerdings würde ich es als separates Script notieren, welches ich ausschließlich bei Bedarf verwende.

          Es läuft bei mir auf ein CGI-Script hinaus, was folgendes kann:

          • von allen vorhandenen Tabellen die create-Statements ausgeben (z.B. zum Sichern),
          • mehrere Tabellen mit einem Rutsch anlegen (statements in hash definiert).

          Es ist deswegen ein CGI-Script, weil ich beim Provider keinen Shell-Zugriff habe.

          Hier ein kleiner Auszug vom Code:

            
          # IST-Zustand ermitteln (Namen der vorh. Tabellen)  
          my $aref  = $dbh->selectall_arrayref("show tables");  
          my %tabs = map{$_->[0], 1}@$aref;  
            
          # Create-Statements ausgeben  
          print "\n\nShow create\n\n";  
          foreach my $t(keys %tabs){  
          	my $statement = qq(SHOW CREATE TABLE $t);  
          	my @row  = $dbh->selectrow_array($statement);  
          	print qq(  
          '$row[0]' => qq(  
            $row[1]  
          ),  
          		  
          );  
          }  
          # so sieht der hash aus, nur noch kopieren  
            
          
          

          Wieder was geschafft heute ;-)

          Hotte

          --
          Tatort jetzt.