Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Regualar Expressions für unterschiedliche Funktionen

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von tcs_ulli, 21 November 2014.

  1. tcs_ulli

    tcs_ulli Neuer Benutzer

    Hallo,

    Ich arbeite an einem Verwaltungssystem das auf unterschiedlichen Datenbanken läuft.
    Dabei wird es langsam zum Standardproblem das es für viele Funktionen auf unterschiedlichen Datenbanken nichtmal ähnliche Funktionen gibt. Mit Funktionen meine ich hier z.b. die Dateums Zeit Routinen o.ä.

    Nun ist mir vorhin die Idee gekommen das man warscheinlich mit Regular Expresssions zum ersetzen glattbügeln könnte.

    Wenn man quasi von und zu jedem großen Datenbanksystem einen Satz Regualr Expressions für die Unterschiede im SQL hätte wäre das sicherlich sehr nützlich ?!

    Gibt es da Leute die ein Interesse daran hätten und zumindest Funktionsequivalente mit sammeln würden ?!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ich bin prinzipiell der Meinung, daß das zwar ein edles Ziel ist, in der Praxis aber eine schlechte Idee. Wenn Du das auf N verschiedene Systeme loslassen willst, kannst Du nur das nehmen, was alle verstehen.

    Schau Dir http://www.sql-workbench.net/dbms_comparison.html an und überleg, ob das gut ist, was Du planst.
     
  3. ukulele

    ukulele Datenbank-Guru

    Ich denke auch das ein simples Ersetzen schwer wird, die Syntax kann sehr unterschiedlich und sehr komplex sein. Besser wirst du warscheinlich mit einer vernünftigen Doku fahren.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Selbst bei exakt gleicher Syntax kommen unterschiedliche Dinge raus.

    MySQL:

    Code:
    mysql> create table demo (id int primary key, val int, check (val < 10));
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into demo values (1,5);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into demo values (2,15);
    Query OK, 1 row affected (0.00 sec)
    
    PostgreSQL:
    Code:
    test=*# create table demo (id int primary key, val int, check (val < 10));
    CREATE TABLE
    Time: 104,200 ms
    test=*# insert into demo values (1,5);
    INSERT 0 1
    Time: 0,515 ms
    test=*# insert into demo values (2,15);
    ERROR:  new row for relation "demo" violates check constraint "demo_val_check"
    DETAIL:  Failing row contains (2, 15).
    Time: 0,264 ms
    
    Meine create - und insert-Befehle sind EXAKT gleich (Copy&Paste), das Resultat komplett unterschiedlich.

    MySQL:
    Code:
    mysql> select * from demo;
    +----+------+
    | id | val  |
    +----+------+
    |  1 |  5 |
    |  2 |  15 |
    +----+------+
    2 rows in set (0.00 sec)
    
    PostgreSQL:
    Code:
    test=*# select * from demo;
     id | val
    ----+-----
      1 |  5
    (1 row)
    
    Ich könnte da noch weitere Beispiele bringen, kein Problem.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    MySQL:
    Code:
    mysql> create table master(id int primary key);
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create table slave(master_id int references master);
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into slave values (1);
    Query OK, 1 row affected (0.00 sec)
    
    PostgreSQL:
    Code:
    test=# create table master (id int primary key);
    CREATE TABLE
    Time: 3,529 ms
    test=*# create table slave (master_id int references master);
    CREATE TABLE
    Time: 50,503 ms
    test=*# insert into slave values (1);
    ERROR:  insert or update on table "slave" violates foreign key constraint "slave_master_id_fkey"
    DETAIL:  Key (master_id)=(1) is not present in table "master".
    Time: 1,561 ms
    
     
  6. akretschmer

    akretschmer Datenbank-Guru

    einer geht noch, MySQL:

    Code:
    mysql> create table null_test(id int, i int not null);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert into null_test(id) values (1);
    Query OK, 1 row affected, 1 warning (0.00 sec)
    
    PostgreSQL:

    Code:
    test=*# create table null_test(id int, i int not null);
    CREATE TABLE
    Time: 12,344 ms
    test=*# insert into null_test (id) values (1);
    ERROR:  null value in column "i" violates not-null constraint
    DETAIL:  Failing row contains (1, null).
    Time: 0,279 ms
    
     
  7. ukulele

    ukulele Datenbank-Guru

    Das MySQL z.B. CHECK Constraints akzeptiert, dann aber nicht beachtet ist ja kein Problem der Syntax, die ist ja in beiden Fällen richtig. Das Problem kann einen auch bei ausreichender Dokumentation treffen, wenn man nicht weiß was MySQL tut und was nicht.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Genau. Es reicht nicht, die Syntax anzupassen, daß es auf N verschiedenen Plattformen läuft, man muß deutlich höher in der Anwendung schon wissen, was welches System kann.
     
  9. tcs_ulli

    tcs_ulli Neuer Benutzer

    Doch reicht :) das einige dbms constrains nicht checken interessiert bei nem datenimport doch nicht. Da muss man sich halt ein dbms aussuchen das die Features hat die man will. Das muss aber keine Software leisten sondern ein Admin. Für die Software reicht es die Syntax so anzupassen das die Querys laufen.
    Aber gut ich hab meine Antwort, kein Interesse.
     
  10. Walter

    Walter Administrator Mitarbeiter

    Ich habe so etwas schon einmal realisiert, für eine sehr umfangreiche Software.

    Lass Dir gesagt sein, Du stehst vor einer zwar nicht unlösbaren, aber komplexen Aufgabe. SQL-Standard? Vergiss es, jede Datenbank kocht ihr eigenes Süppchen. Funktionen sind da eher noch das geringere Problem, dafür kann man automatische Umsetzungsfunktionen schreiben.

    Du musst Dich nicht nur von SQL her auf den kleinsten gemeinsamen Nenner zurückziehen, es lauern auch einige Fallstricke in den Details. Unterschiedliche Datentypen, Datentypen die zwar gleich zu sein scheinen aber teilweise minimal anders reagieren, die Behandlung von NULL-Werten, etc
     
  11. tcs_ulli

    tcs_ulli Neuer Benutzer

    Naja meine Software existiert ja seit 10 Jahren, iche rlaube nur an einigen Stellen direkt SQL Abfragen zu benutzen. Das mit dem kleinsten gemeinsamen nenner ist schon ne weile für Postgres,MSSql,Firebird und SQLite realisiert. ich würd nur gern weiter in Richtung generische Abfragen ziehn und da haperts jetzt ziemlich in Richtung Datumsfunktionen, die implementiert jeder komplett anders. Und da dacht ich man sammelt etwas das bringt sicher mehr Leuten was.
     
Die Seite wird geladen...
Ähnliche Themen - Regualar Expressions unterschiedliche
  1. akretschmer
    Antworten:
    0
    Aufrufe:
    3.804

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden