MySQL. relationale Datenbanken SQL : Sprache fuer relationale Datenbanken. jede Information nur...

Preview:

Citation preview

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. 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, email

from 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

Ablauf: Verzeichnis anmeldung:

anmeldung.index_html

anmeldung/formular

anmeldung/report

/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>

CemailZ SQL Methode

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

/login/report

auswahl

Bearbeiten

Abmelden

Abgmeldet

anmeldung/index_html

anmeldung/formular

anmeldung/report

Ablauf

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">

Recommended