ORM – Datenbanken in der Praxis – Sören Gade - 27.03.2014



ORM – Datenbanken in der Praxis – Sören Gade - 27.03.2014

0 0


reveal.js-orm

Reveal.js presentation about ORM.

On Github sgade / reveal.js-orm

ORM

Datenbanken in der Praxis

Sören Gade - 27.03.2014

Übersicht

SQL Crashkurs Problem ORM Beispiel für ORM

SQL Crashkurs

  • CREATE TABLE
  • INSERT INTO
  • SELECT
  • UPDATE
  • DELETE
  • DROP TABLE

CREATE TABLE

              
CREATE TABLE Users
( id INTEGER PRIMARY KEY AUTOINCREMENT,
  username VARCHAR(255) );
              
            

INSERT

              
INSERT INTO Users
( 'id', 'username' )
VALUES ( NULL, 'admin' );
              
            

SELECT

              
SELECT *
FROM Users
WHERE Users.id = 1;
              
            

UPDATE

              
UPDATE Users
SET 'username'='administator'
WHERE 'id'=1;
              
            

DELETE

              
DELETE FROM Users
WHERE 'id'=1;
              
            

DROP TABLe

              
DROP TABLE Users;
              
            

Problem in der Praxis?

              
SELECT *
FROM Users
WHERE Users.username = 'admin'
  AND Users.password = 'admin'
  AND Users.type = 'admin'
  LIMIT 1;
              
            
Das ist ja noch machbar...

Problem in der Praxis

Erstellen der Datenbank:

              
CREATE TABLE `Users`
( `id` INTEGER PRIMARY KEY AUTOINCREMENT,
  `username` VARCHAR(255),
  `password` VARCHAR(255),
  `type` TEXT);
              
            

Füllen mit Standarddaten:

(Aus den Logs von HGOTS-node)
                
INSERT INTO `Users`
(`id`,`username`,`password`,`type`,`createdAt`,`updatedAt`)
VALUES (NULL,'test',
  '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08',
  'admin','2014-03-26 22:03:38','2014-03-26 22:03:38');
                
              

Lösung:

ORM

Wikipedia

Objektrelationale Abbildung (englisch object-relational mapping, ORM) ist eine Technik der Softwareentwicklung, mit der ein in einer objektorientierten Programmiersprache geschriebenes Anwendungsprogramm seine Objekte in einer relationalen Datenbank ablegen kann.

Wikipedia

Wikipedia: Objektrelationale Abbildung (englisch object-relational mapping, ORM) ist eine Technik der Softwareentwicklung, mit der ein in einer objektorientierten Programmiersprache geschriebenes Anwendungsprogramm seine Objekte in einer relationalen Datenbank ablegen kann. Dem Programm erscheint die Datenbank dann als objektorientierte Datenbank, was die Programmierung erleichtert.

Funktionsweise

Zuordnung von

  • Tabellen zu Objekten
  • Tabellenspalten zu Objektattributen
  • Fremdschlüsseln zu Objektverweisen

Ziele

  • Vereinfachung der Programmierung (Objekte)
  • Kapselung der grundsätzlich verschiedenen Ansätze
  • Fehleranfälligkeit der SQL-Anfragen vermeiden
  • Verschiedene Datenbankmodelle gleich ansprechen können
    • SQLite
    • PostgreSQL
    • MySQL
    • Microsoft SQL Server
    • ...

Beispiel

in JavaScript

Sequelize.js

http://sequelizejs.com/

Tabelle erstellen

              
var User = sequelize.define('User', {
  username: Sequelize.STRING,
  password: Sequelize.STRING,
  type: {
    type: Sequelize.ENUM,
    values: [ 'user', 'admin' ]
  }
});
              
            

Daten einfügen

              
User.create({
  username: 'admin',
  password: 'admin',
  type: 'admin'
});
              
            

Daten finden

              
User.find({
  where: {
    id: 1
  }
}).success(function(user) {
  // user ist das Objekt für die Zeile
});
              
            

Daten ändern

              
// Benutzerobjekt finden...
User.find({
  where: {
    id: 1
  }
}).success(function(user) {
  // user ist das Objekt für die Zeile
  // jetzt Daten ändern...
  user.username = "administator";
  user.save();
});
              
            

Daten löschen

              
User.find(...).success(function(user) {
  // user ist wieder der gesuchte Benutzer
  user.destroy();
});
              
            

Assoziationen

              
// Models definieren
var User = sequelize.define('User', ...);
var Card = sequelize.define('Card', ...);

// Assoziation festlegen
User.hasMany(Card, {
  as: 'Cards'
});
              
            

Demo

Vielen Dank

Fragen und Anmerkungen