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

Zunächst eine allgemeine Frage

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

  1. Sophus

    Sophus Datenbank-Guru

    Hallo Leute,

    kurz zu meinem Vorhaben. Ich bin dabei ein kleines Projekt zu schreiben - ein Verwaltungssystem. Mit meinem Projekt möchte ich darauf hinaus, dass es möglich sei, dass ich mich entscheiden kann, ob ich mit der Anwendung auf meinen MySQL, PostGreSQL-Server zugreifen möchte oder eher mit lokalen Datenbanken wie MS Access oder SQLite arbeiten möchte. Vor diesem Hintergrund möchte ich natürlich eine "generelle" Modellierung anfertigen. Was kann man mit meinem Projekt so alles speichern? Ich möchte darauf hinaus, dass ich Informationen über Filme, Serien, Alben, Singles, Schallplatten, Videosspiele, Kontaktdaten, Briefmarken etc speichern kann. Es wird also ein groß angelegtes Projekt. Ich modelliere zur Zeit mit dem Programm namens Toad Data Modeler 5.2.

    Vor diesem Hintergrund wollte ich euch fragen, ob ich hier im Forum richtig bin, wenn ich bei und während meiner Modellierung stets an euch wenden kann, um so eure Meinung einholen zu können? Oder ist diese Forum-Gemeinde eher darauf ausgelegt abstrakte Fragestellungen zu beantworten bzw. abstrakte Antworten zu formulieren und das möglichst "selten" wie möglich. Denn bei meinem Vorhaben ist es durchaus wahrscheinlich, dass ich mich des öfteren an euch wenden würde.

    Es grüßt euch
    Sophus
     
  2. Hony%

    Hony% Datenbank-Guru

    Hi Sophus,

    Fragen werden hier nach bestem Wissen beantwortet. Es spielt keine Rolle ob die Frage abstrakt oder konkret ist. Konkrete Probleme sind für gewöhnlich aber leichter zu lösen als abstrakte. ;)

    Wenn du auch mal ein paar Stunden auf die Antwort warten kannst, sollte es kein Problem sein dich bei deinem Projekt zu begleiten. Welche Software du verwendest ist im Grunde egal. Zumindest solange du keinen Support für die Software erwartest.

    Gruß
    Hony
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Die Idee ist so gut wie auch gefährlich. Wenn Deine Applikation auf N Plattformen laufen soll, so bist Du gezwungen, Dich am 'Kleinsten gemeinsammen Nenner' dieser N Systeme zu orientieren.

    Mal so paar Beispiele:

    • angenommen, Du willst in mehreren Tabellen eine ID verwenden, die über alle Tabellen Unique ist. In z.B. PostgreSQL einfach via einer Sequence, in MySQL müßtest Du das in eine extra Tabelle auslagern, die Du bei Bedarf sperrst und nimmst MyISAM, weil das ist schön schnell. Machst Du das aber in PG wird es unerträglich lahm (bzw. erheblich lahmer als in MySQL), weil Sperren in PG erheblich teurer sind.
    • In MySQL kannst Du dieses Konstrukt 'Insert or Replace' verwenden (genaue Syntax kenne ich nicht) - das geht wiederum in PG (noch) nicht. Du wirst drauf verzichten müssen.
    • Check-Constraints versteht MySQL zwar, beachtet sie aber nicht. Du wirst drauf verzichten müssen.
    • PG kennt viele Datentypen wie z.B. Ranges, die anderen nicht - Du wirst drauf verzichten müssen.

    Du solltest Dir also auch mal anschauen, was die Datenbanken im einzelnen so können (nehme Dir viel Zeit für PG, das kann sehr viel...) und dann prüfen, was Du brauchst und was welche Systeme können.
     
  4. Hony%

    Hony% Datenbank-Guru

    Das finde ich jetzt ehrlich gesagt nicht allzu schlimm. Ranges lassen sich problemlos durch zwei Felder ersetzen. Außerdem verletzen Ranges streng genommen die 1. NF, da sich ein Wertebereich immer über die beiden Extreme definiert und damit nicht mehr Atomar ist.

    Ansonsten stimmt es natürlich, dass MySQL den Standard setzen dürfte, da es im Vergleich mit allen anderen relevanten DBMS die geringste Funktionsvielfalt besitzt.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Ähm, nein. Zum einen haben Range-Typen in PG noch die Information, ob die Grenzen inklusive oder exclusive sind, zum anderen bekommst Du keine Exclusion Constraints hin.
     
  6. Hony%

    Hony% Datenbank-Guru

    Entweder meinst du gerade etwas anderes als ich oder du willst ernsthaft behaupten, es gäbe keinen Unterschied zwischen <= und <.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Vermutlich. Ich zeig es mal:

    Code:
    test=# create table int_range_test(id int, i_range int4range, exclude using gist(id with =, i_range with &&))  ;
    CREATE TABLE
    test=*# insert into int_range_test values (1, '[1,5)');
    INSERT 0 1
    test=*# insert into int_range_test values (2, '[5,9)');
    INSERT 0 1
    test=*# select * from int_range_test ;
     id | i_range
    ----+---------
      1 | [1,5)
      2 | [5,9)
    (2 rows)
    
    test=*# insert into int_range_test values (3, '(9,10]');
    INSERT 0 1
    test=*# select * from int_range_test ;
     id | i_range
    ----+---------
      1 | [1,5)
      2 | [5,9)
      3 | [10,11)
    (3 rows)
    
    test=*# insert into int_range_test values (2, '[7,13)');
    ERROR:  conflicting key value violates exclusion constraint "int_range_test_id_i_range_excl"
    DETAIL:  Key (id, i_range)=(2, [7,13)) conflicts with existing key (id, i_range)=(2, [5,9)).
    STATEMENT:  insert into int_range_test values (2, '[7,13)');
    ERROR:  conflicting key value violates exclusion constraint "int_range_test_id_i_range_excl"
    DETAIL:  Key (id, i_range)=(2, [7,13)) conflicts with existing key (id, i_range)=(2, [5,9)).
    test=*#
    
    Insbesondere den Exclusion Constraint wirst Du schwer nachmachen können ...
     
  8. Sophus

    Sophus Datenbank-Guru

    Hallo Leute,

    dann bin ich hier genau richtig. Und auf Antworten kann ich gut warten, denn ich habe nicht vor Berlin oder Rom in 5 Minuten zu bauen. Ihr wisst was ich meine :) Mir geht es eher darum, dass ich bei meiner Modellierung mehrere Meinungen bräuchte. Und eure Anmerkungen zu den Datenbanken wie PostGreSQL und MySQL könnten wir gern während der Modellierung an entsprechenden Stellen vertiefen. Zunächst geht es mir erst einmal darum, dass am Ende des Tages die Datenbank gründlichst modelliert steht.

    Kann man hier im Forum Bilder hochladen? Einige Foren bieten ja solch einen Service an, dass man die Bilder nicht erst auf fremde Upload-Server hochladen musst. Mir geht es darum, dass ich sehr visuell veranlagt bin, und meine Modellierung gerne grafisch darstellen möchte.
     
  9. akretschmer

    akretschmer Datenbank-Guru

    selber noch nie gemacht, aber schon oft gesehen.
     
  10. Hony%

    Hony% Datenbank-Guru

    Mal sehen ob ich das richtig interpretiere. Durch den Constraint verhinderst du, dass es zwei Datensätze mit gleicher id (nicht unique) gibt deren i_range sich überschneidet? Das wäre tatsächlich eine Herausforderung. ;)

    Du kannst unter »weitere Einstellungen« Anhänge bis 1mb hoch laden. Darunter sind auch Bilder erlaubt.
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Jupp.

    • Terminplan: man kann nicht gleichzeitig an 2 Orten sein
    • Planung von Ressourcen: ein Hotelzimmer sollte nicht mehrfach gebucht sein, das Auto der Autovermietung ebenfalls nicht

    Ich dachte, Du würdest das schon kennen ...
     
  12. Hony%

    Hony% Datenbank-Guru

    Bislang noch keinen Bedarf gehabt oder per Anwendung verhindert.
     
  13. Hony%

    Hony% Datenbank-Guru

    @akretschmer
    Zum Thema Nachbau:
    Code:
    sqlite> SELECT * FROM rangeerror;
    1|1|5
    2|5|9
    3|10|11
    
    sqlite> INSERT INTO rangeerror VALUES( 2, 7, 13);
    Error: Range Constraint violated.
    
    Code:
    CREATE TRIGGER exclusion INSERT ON rangeerror
    WHEN
    CASE
      WHEN  EXISTS (
      SELECT id
      FROM rangeerror
      WHERE id = new.id
      AND range2 > new.range1
      )
      THEN RAISE (FAIL, 'Range Constraint violated.')
    END
    BEGIN
      INSERT INTO rangeerror VALUES(new.id, new.range1, new.range2);
    END;
    
    Da steckt mit Sicherheit noch Verbesserungspotential drin. Aber für einen schnellen ersten Versuch finde ich das nicht schlecht. Die Fehlermeldung lässt natürlich auch zu wünschen übrig. Allerdings hallte ich es für Denkbar auch da was Ansehnliches zu produzieren. Und ja, die Methode ist deutlich umständlicher als deine. ;)

    @Sophus
    Sorry, dass ich deinen Thread gekapert habe.
     
    akretschmer gefällt das.
Die Seite wird geladen...

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