Archiv der Kategorie: Datenbanken

Lasst die Datenbank ihren Job machen!

Oft schau ich mir Code an und sehe, dass Leute offenbar zu faul für vernünftige SQL-Statements sind. Da wird eine extrem allgemein gehaltene Abfrage auf die Datenbank losgelassen, um dann im Nachklang mit PHP zu filtern / zu gruppieren. Warum? Die Datenbank ist doch zum rechnen und für genau so Aufgaben gedacht. Zudem ists auch noch viel performanter, die Datenbank einfach ihren Job erledigen zu lassen. Vielleicht programmieren gewisse Leute einfach viel zu gern PHP, als das sie sich von der Datenbank die Arbeit abnehmen lassen würden?

Berechnungen im SELECT

SELECT price FROM product

while ($row = $sql->fetch())
{
    print $row['price'] * 1.95583;
}

Warum nicht einfach:

SELECT price*1.95583 AS europreis FROM product

Veröffentlicht unter php, Datenbanken, Software Engineering, Performance, webdev | 6 Kommentare

MySQL Inputvalidierung mit Triggern

Ich finds sehr praktisch, direkt auf Datenbankseite soviel wie möglich zu erledigen. Da wirds dann auch noch einen Artikel zu geben. Ich wurde neulich von Oracle inspiriert, wo folgende Konstrukte möglich sind:

create table Product
( 
	ProdNr integer constraint PK_Product primary key,
	ProdPreis integer constraint min_price check (ProdPreis >= 10)
);

Damit rejected Oracle Werte kleiner als 10 für ProdPreis beim Insert / Update – super Sache und besser als das in der Application-Logik ausschließen zu müssen. Einzig doof daran ist, dass man solche Fehler sinnvoll im Programm abfangen muss und mit sprechenden Fehlermeldungen quittieren muss – sonst kanns für unbedarfte Programmierer verwirrend werden, warum denn gewisse Werte nicht in der Datenbank eingefügt werden können.

Veröffentlicht unter Datenbanken, webdev | 4 Kommentare

Best-of-the-Web 3

Und wiedermal gibts das – meiner Meinung nach – spannendste aus der Blogwelt der letzten Zeit.

Veröffentlicht unter php, Datenbanken, Performance, Best of the Web, webdev | Hinterlasse einen Kommentar

Best-of-the-Web 2

Und eine neue Linkserie mit kleinen Web-Leckerbissen, bunt gemischt über MySQL, CSS, PHP und Javascript.

  • Can I use? – Welche HTML 5 / CSS 3 – Features sind in welchem Browser bereits implementiert?
  • PEAR HTTP Download – Nette Klasse, um sauber und schmerzfrei HTTP Requests / Downloads zu tätigen
  • Head JS – Kleines Javascript, was das zusammenfassen von CSS / Javascript ermöglicht + ein paar weitere schöne Features mitbringt.
  • PHP dependency strategies – Zusammenfassung von 3 Dependency-Injection Strategien und einigen sinnvollen Lösungsansätzen der mit DI aufkommenden Probleme.
Veröffentlicht unter php, Javascript, Datenbanken, Best of the Web, webdev | 3 Kommentare

Datenbank-Klasse (auf PDO basierend)

Es ist wohl eine der am häufigsten neu geschriebenen Klassen. Jedem Entwickler seinen Datenbank-Wrapper. PDO macht die Sache eigentlich schon sehr angenehm, trotz allem vermisst man hier und da ein paar Komfort-Features. Habe neulich meine Datenbank-Klasse auf Github hochgejagt.

Features

  • Kommt komplett mit Unit-Tests daher
  • Komfortables Handling mit Prepared Statements
  • Möglichkeit, das PDO DB-Handle aus der Datenbank herauszubekommen – volle Flexibilität
  • Unterstützt mehrere Datenbank-Verbindungen gleichzeitig
  • Komplett sauberes exceptionbasiertes Fehlerverhalten
  • Komfortfeatures (siehe unten)
  • Komplette Dokumentation

Einen Einblick in die Klasse erhaltet ihr in diesem kleinen howto auf github.

Veröffentlicht unter php, Datenbanken, webdev | 1 Kommentar

MySQL Views

Views sollten eigentlich jedem Webdeveloper bekannt sein, deswegen versteht sich der Post hier eher als kleiner „Reminder“. Legen wir doch direkt mit einem Beispiel los. Ich habe eine Tabelle pizzas:

Tabelle pizzas

Tabelle pizzas

Und eine Tabelle ingredients:

Tabelle ingredients

Tabelle ingredients

Klassische 1:n-Beziehung also. Ich habe eine wunderbare, normalisierte Datenhaltung (okay, man könnte auch den Zutaten noch eine Zutaten-ID geben aber das verkompliziert das Beispiel unnötig). Wenn ich jetzt allerdings häufig den Bezug der Pizza zu den Zutaten brauche, schreibe ich in vielen Funktionen joins von ingredients auf pizzas. Das geht schlauer! – mit Views.

CREATE VIEW pizzaingredients AS
	SELECT p.*, i.ingredient
	FROM pizzas p
	LEFT JOIN ingredients i ON i.pizzaid = p.id

Veröffentlicht unter Datenbanken, webdev | 1 Kommentar

Java Hibernate Tutorial

Nachdem ich mit SQLite das Java-Fass aufgemacht hab, gibts nun noch Hibernate hinterher. Hibernate ist wohl eines der bekanntesten ORM-Frameworks. Ich zeige das ganze anhand von Netbeans, aber auch hier sollte Eclipse nicht weit entfernt sein. Es wird frech davon ausgegangen, dass das Java-Plugin installiert ist.

1) Hibernate Plugin installieren

In Netbeans unter Tools -> Plugins -> Availible Plugins -> Hibernate. Sollte schmerzfrei durchlaufen.

2) Java Projekt anlegen

File -> New Projekt -> Java Application. Darf auch eine DesktopApplication sein, wenn ihr den GUI-Builder (Swing) als Plugin mitinstalliert habt – tut aber für Hibernate nichts zur Sache. Die Standardeinstellungen tun es unter Netbeans für das neue Projekt.

Veröffentlicht unter Datenbanken, Java | 1 Kommentar

Java und SQLite

Was folgt ist ein etwas themenfremder Exkurs in die Java-Welt. Und zwar ein kleines Tutorial zur Anbindung einer (dateibasierten) SQLite Datenbank an Java. Ich werde Netbeans benutzen, unterstelle aber das Eclipse da sehr ähnlich zu handhaben sein wird. Als OS kommt Windows 7 zum Einsatz, ich werde aber an den entsprechenden Stelle auch den „Linux way“ dazuschreiben. Los gehts auf Basis eines frisch installierten Netbeans ohne Java-Plugin – wenn Java also schon drauf sein sollte, einfach bei Schritt 3 loslegen.

Veröffentlicht unter Datenbanken, Java | 5 Kommentare

Über ORM

ORM ist an sich eine feine Sache. Durch die zusätzliche Abstraktionsschicht ist man so gut wie vollkommen datenbankunabhängig. Weiterhin hat man einen sauberen OOP Ansatz duchgehend im Projekt ohne hässliche SQL Statements dazwischengemischt zu haben. Es fühlt sich sehr „smooth“ an und steigert – richtig gemacht – auch durchaus die Verständlichkeit des Codes.

Veröffentlicht unter Datenbanken, Software Engineering, Performance, webdev | 3 Kommentare

Best-of-the-Web 1

Los gehts mit einer furiosen Linkserie aus dem Informativsten, was mir in der letzten Zeit im Feedreader begegnet ist. Naturgemäß wird der Themenschwerpunkt webdev-zentriert sein, es ist jedoch nicht auszuschließen das sonstige Perlen des Internets hier auftauchen werden. Und ab dafür.

  • PHP5 – Einstieg in SOAP – Wer noch nie was von SOAP gehört hat sollte unbedingt hier starten. Die PHP Dokumentation selbst ist dazu recht mies. Ich war bei SOAP erst sehr skeptisch, finde es mittlerweile aber echt super – u.a. da es 1a in PHP implementiert ist
  • Die Reflection API von PHP – Auch hierzu findet man kaum was einsteigertaugliches in der API Dokumentation selbst.
Veröffentlicht unter php, Datenbanken, Best of the Web, webdev, Persönlich | Hinterlasse einen Kommentar