Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 22-Dec-2009
< Voriger Tag   Nächster Tag >

Dienstag, 22. Dezember 2009

PHP: RuBisCO ORM -- Konzept

Die erste Version von RuBisCO Todo habe ich in ca. 8 Stunden geschrieben. RuBisCO ORM soll das Grundgerüst eines solchen Webprogramms per Mausklick aus einer SQL-Tabellendefinition plus zusätzlicher Informationen zur Überprüfung der Eingabe generieren.

Im Fall von RuBisCO Todo also aus:

CREATE TABLE tasks (
  id     INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  task   VARCHAR(256) NOT NULL,
  status VARCHAR(20) NOT NULL  DEFAULT "open"
) ENGINE = innodb
  DEFAULT CHARSET = utf8;

Plus den zusätzlichen Informationen zur Überprüfung der Eingabe:

CREATE TABLE tasks (
  id     INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  task   VARCHAR(256) NOT NULL rbsNotEmpty,
  status VARCHAR(20) NOT NULL  DEFAULT "open"
         rbsOptions = ["open", "closed", "work", "finished"]
) ENGINE = innodb
  DEFAULT CHARSET = utf8;

Dabei wird der ORM auch Joins und Foreign Keys unterstützen, so dass das status-Feld zur Normalisierung in eine eigene Tabelle ausgelagert werden kann:

CREATE TABLE tasks (
  id     INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  task   VARCHAR(256) NOT NULL,
  status INT NOT NULL DEFAULT 1,
  FOREIGN KEY (status) REFERENCES status(id)
)
  ENGINE = innodb,
  DEFAULT CHARSET = utf8;


CREATE TABLE status (
  id     INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  status VARCHAR(20) NOT NULL  DEFAULT "open"
         rbsOptions = ["open", "closed", "work", "finished"]
)
  ENGINE = innodb
  DEFAULT CHARSET = utf8;

Aufgebaut ist RuBisCO ORM aus Klassen für die SQL-Tabellen und -Felder, deren Methoden den Quelltext generieren:

namespace rubisco\tools\orm;

class SQLTable {
    public $name;
    public $fields = array();
}// SQLTable


namespace rubisco\tools\orm\type;

class SQLField {
    public $name;
    public $default;
    public $notNull;

    public $foreignKey;

    public $preg;      // String
    public $pregMatch; // Bool
}// SQLField


namespace rubisco\tools\orm\type;

class SQLInt extends SQLField {
    public $min;
    public $max;
}// SQLInt

Hmm, mal anhand eines Prototyps für eine Tabelle nur mit id INT ausprobieren, ob es grundsätzlich wie gedacht funktioniert.

[Direktlink]

< Voriger Tag   Nächster Tag >

  RSS V0.91

<Dezember 2009 >
 010203040506
07080910111213
14151617181920
21222324252627
28293031   

Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 22-Dec-2009
(C) 2000-2018 by Sven Drieling