400 likes | 562 Views
MySQL. relationale Datenbanken. SQL : Sprache fuer relationale Datenbanken . jede Information nur einmal gepeichert Dazu macht man mehrere Tabellen, die alle ueber Schluessel miteinander verknuepft sind.
E N D
relationale Datenbanken • SQL : Sprache fuer relationale Datenbanken. • jede Information nur einmal gepeichert • Dazu macht man mehrere Tabellen, die alle ueber Schluessel miteinander verknuepft sind. • Bsp. Projektpartner, Versuchsteilnehmer, ganze Schulklasssen, etc.Bei Versuch z.B. nur Id-Nr. der Schlusklasse eintragen. Daraus auf Schüler-Id und daraus auf e-mail Liste schliessen.
Normalisierung • Ein Datenbankkonzept, das alle Bedinungen fuer Konsistenz erfuellt, nennt man normalisiert. • In der Literatur sind Konzepte zur Normalisierung fuer Datenbankentwuerfe zu finden.
Benutzerrechte • Rechte auf verschiedenen Stufen: • Servers, Datenbank, Tabelle, Kolonnen • verschiedene Rechte z.B.: • Datensatz suchen, einfuegen, loschen, ändern • SQL-Befehl grant.
Client • Ansteuerung der DB über Client, der SQL-Befehle übergibt • Bsp: • update nanoworld.partners set vorname = 'Dino' • where login = 'dino'; • select ident, vorname, nachname, login, emailfrom nanoworld.partners where mailinglist = 'y';
Beispiel • create table Personen( id int not null primary key auto_increment, vorname varchar(30), nachname varchar(30), mailinglist enum('y','n'),... PLZ smallint );
Zope - MySQL • Z MySQL Database Connection einfuegen • Datenbase Conection String: database[@host[:port]] [user [password [unix_socket]]] • In unserem Fall:personen@localhost homepage homepassw /tmp/mysql.sock
Z SQL Methoden • Die DB steuert man mit Z SQL Methoden an: • SQL-Befehl darf dtml-tags enthalten • Parameter können verlangt werden • Rückgabe: Liste von Objekten, die als Attribute die gefragten Feldnamen enthält. • Zugriff: über <dtml-in sql_Methoden_Name><dtml-var Feldname>
Interface für Partner • Datenbank: nanoworld.partners
/anmeldung/index_html • <FORM NAME="email" METHOD="POST" onReset="history.back()" ACTION="formular"> • Bitte geben sie Ihre e-mail Adresse an: • <INPUT TYPE=TEXT NAME="email" SIZE=30 MAXLENGTH=30> • <INPUT TYPE="submit" VALUE="Submit"> • <INPUT TYPE="reset" VALUE="Abbrechen">
anmeldung/formularUberprüfung • <dtml-if Cemail> • <dtml-call "REQUEST.set('fehler','Sie sind bei uns schon angemeldet.')"> • </dtml-if>
anmeldung/formularFormular • <FORM NAME="formular" METHOD="POST" onReset="history.back()" action="report"> • Anrede: • <input type="text" name="anrede" value="" size=20 maxlength=20> • …. • <INPUT TYPE="hidden" NAME="email" VALUE="<dtml-var "_.string.lower(email)">" > • ….
anmeldung/report • Diverser Überprufungen • Willkommen • <dtml-var "REQUEST.get('anrede')"> • <dtml-var"REQUEST.get('nachname')"><br> • <dtml-call Insert_Person_MySQL> • <dtml-call benachrichtigen>
Insert_Person_MySQL • Insert into partners • (vorname, nachname, login, passwort, email, mailinglist,strasse,nr,ort,plz,land,position,sprache,anrede ) • values ( • <dtml-sqlvar vorname type="string" optional>, • <dtml-sqlvar nachname type="string" optional>, • … )
benachrichtigen • <dtml-sendmail mailhost="an_guggi"> • To: martin.guggisberg@unibas.ch • From: nanopartners.anmeldung • Subject: Partner hat sich angemeldet • Angemeldet hat sich • <dtml-in Abfrage> • <dtml-var Field> <dtml-var expr="_.getitem(Field)"> • </dtml-in> • </dtml-sendmail>
login/index_html • <form action="report" method="post"> • Login:<input type="text" name="login"><br> • Passwort:<input type="password" name="passwort"><br> • <INPUT TYPE="submit" NAME="submit" VALUE="Submit"> • <INPUT TYPE="submit" NAME="submit" VALUE="Passwort vergessen"> • </form>
login/report • <dtml-in Ueberpruefen size=1> • <dtml-in "Personendaten(ident=ident)"> • Login erfolgreich.<br> • Willkommen • <dtml-var anrede> <dtml-var nachname> • <form action="../auswahl" onReset="history.back()"> • ...
/bearbeiten/bearbeitenParameter: ident • <dtml-in Personendaten> • <dtml-in Abfrage> • <dtml-var "_.string.capitalize(Field)“> • <dtml-if "Type[0]=='v'"> • <INPUT TYPE=TEXT NAME="<dtml-var Field>" VALUE="<dtml-var expr="_.getitem(Field,1)">" SIZE=<dtml-var "Type[8:_.string.find(Type,')')]"> MAXLENGTH=<dtml-var "Type[8:_.string.find(Type,')')]"> >
Personendaten • Parameter: ident • Select * from nanoworld.partners • where • ident=<dtml-sqlvar ident type="int">
Abfrage • show columns from nanoworld.partners
bestaetige_bearbeiten • div. Überprüfungen • Aenderungen gespeichert: • <form action="../auswahl"> • <input type="submit" value="OK"> • <input type="hidden" value="<dtml-var ident>" name="ident"> • </form><br> • <dtml-call Update_Person_MySQL>
abmeldung/abmelden • Wollen Sie sich sicher abmelden? • <form action="abgemeldet“ • onReset="history.back()"> • <input type="submit" value="OK"> • <input type="reset" value="Abbrechen"> • <INPUT TYPE="hidden" NAME="ident" VALUE="<dtml-var ident>" > • </form>
abgemeldet • Auf Wiedersehen!<br> • Sie wurden abgemeldet. • <form action="../anmeldung"> • <input type="submit" value="OK"> • </form><br> • <dtml-call Abmelden>
Abmelden • Parameter: ident • delete from nanoworld.partners • where • ident=<dtml-sqlvar ident type="int">