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

UUID/GUID - Architektur

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von SideKick, 9 August 2013.

  1. SideKick

    SideKick Benutzer

    Hallo

    Ich muss ein Programm zur Bauteileverwaltung für 200 Mittarbeiter Programmieren.

    Ich habe:
    • 2 Standorte, mit einem VPN verbunden
    • Die Möglichkeit weiter Standort hinzuzufügen soll in der Architektur implementiert sein
    • Evtl. kommt auch ein Standort ohne VPN aber mit Internet-Verbindung hinzu
    • Oracle-Datenbanken
    • Die größte Tabelle wird ca. 50 Spalten haben.
    • C#.NET
    Anforderungen:
    • Die Möglichkeit zeitversetzt Daten in die gleiche Tabelle zu schreiben soll gegeben sein. Die Daten sollen an beiden (evtl. mehrere) Standorte verfügbar sein.
    • Derzeit besteht jedoch nur die Anforderung an einem Standort, die Daten zu erzeugen.
    • Ich denke das ich Daten von anderen Standorden als referenzierenden Tabelle (Nur Lesen) benötige
    • Die Architektur soll bei weiteren Anforderungen nicht zu klein gewählt sein.
      • Ich habe schon oft die Erfahrung gemacht das ich meine zu klein gebaute Architektur sehr mühsam erweitern musste
      • Ich möchte auf keinen Fall die Architektur verändern müssen wenn weiter Anforderungen gestellt werden.
    • Ich möchte keine Natürlichen Schlüssel einsetzen!
    Gedanke zum Ablauf:
    1. Der Benutzer legt einen neuen Datensatz an
    2. Das Programm erzeugt eine UUID für diesen Datensatz
    3. Der Datensatz wird vom Benutzer gefüllt
    4. Weitere Datensätze können erzeugt und gefüllt werden
    5. Der Benutzer Speichert die Daten in der Oracle Datenbank. (Die UUID-Spalte darf keine Doppelten Werte aufnehmen)
    6. Falls es tatsächlich einen Doppelten Wert geben sollte, ersetzt das Programm einfach die UUID durch einen anderen.
    Gendanken:
    • Soll die UUID / GUID die Software oder die Datenbank generieren?

    Probleme? / Fragen:
    • Verwendung von CURVAL und NEXTVAL nicht möglich. Kann ich darauf verzichten ?
    • Wie funktioniert eine Interaktion wenn z.B. eine Niederlassung neue Daten schickt ?
    • Ist es Sinnvoll bei referenzierenden Tabelle die UUID als Fremdschlüssel zu verwenden ?
    Vielen Dank im Voraus

    Gruß Karl
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du hast VPN und Internet, aber nicht verläßlich, oder? Bei Ausfall der Verbindung willst Du noch immer Offline arbeiten und auch neue Daten eingeben, die bei der nächsten Verbindung synchronisiert werden sollen? So daß auch bei einem nächsten Ausfall der Verbindung die Daten im aktuellen Stand verfügbar sind?

    Phuuuuhh...

    Mit UUID zu arbeiten scheint auch mir der einzig gangbare Weg.


    Wer die UUID erzeugt ist letztlich egal, vermulich kann aber Oraggle das selber (vielleicht analog zu http://www.postgresql.org/docs/9.2/interactive/uuid-ossp.html )
    Der größere Part ist aber:

    • zu erkennen, ob man grad On- oder Offline ist
    • die Synchronisation der Daten hochzu
    • die Synchronisation der Daten runterzu
    Beim Synchronisieren prüfen, ob das auch geklappt hat - denn es könnte ja mittendrin die Verbindung wegfliegen...

    Ob Du ohne currval() / nextval() hinkommst kann ich nicht sagen, notfalls je Standort eigene Sequencen nehmen oder eigene Nummernkreise. Und wenn Du in neuen Daten referentielle Integrität brauchst dann wirst wohl die UUID nehmen müssen/können, denn was anderes steht Dir nicht zur Verfügung.

    Aber vielleicht prüfst doch noch mal die Anforderungen durch, ob all der Aufwand sein muß. Man kann es vielleicht nicht so einfach vergleichen, aber z.B. Kunden von uns arbeiten mit GPS-Boxen, die regelmäßig Daten in einer zentralen Datenbank speichern. Falls die Boxen mal Offline sind, dann puffern sie die Daten und schicken sie später. Hier besteht natürlich nur die Notwendigkeit, Daten von der Box in die DB zu bringen, nicht andersrum, daher geht das auch Offline ohne Probleme (und die Boxen sind voneinander unabhängig!)

    Ansonsten wünsch ich Dir viel Glück und Ausdauer - das wirst Du brauchen...
     
  3. ukulele

    ukulele Datenbank-Guru

    UUIDs sind prinzipiell immer eindeutig. Die Warscheinlichkeit das du eine doppelte erzeugen kannst ist dermaßen gering das ich auf eine Kontrolle verzichten würde.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Die 'Kontrolle' erfolgt automatisch, wenn da in UNIQUE INDEX / PRIMARY KEY ist. Und er muß eh prüfen, ob das Insert gelang.
     
  5. SideKick

    SideKick Benutzer

    Hallo, vielen Dank für die Antworten. :)


    Ja, genau das ist das was ich mir ausgedacht habe.
    Eine VPN – Verbindung ist nie immer 100%ig. Zudem habe ich die Erfahrung gemacht das viele Datenbank Abfragen über das VPN auch zu kurze Wartezeiten führen können. Ich habe schon ein Programm in einer Niederlassung das direkt über VPN mit einem Oracle – Server in unserem Haus (Hauptniederlassung) interagiert. Bei dieser Applikation musste ich die das Programm so umschreiben das es weniger Abfragen macht. Es erfüllt nun seinen Dienst zur vollsten Zufriedenheit. Dieses Programm muss jedoch nicht so viel leisten wie das Programm das ich jetzt erstellen muss.

    Danke, diese Aussage hat mir auch weiter geholfen.


    Ich dachte mir die Benutzer arbeiten auf ihren lokalen Oracle Server mit dem Baugruppen-Programm.

    Das ist schnell und funktioniert auch wenn die Verbindung langsam oder ganz weg ist.

    Jede Nebenstelle hat ihre eigenen Projekte. Eine andere Nebenstelle soll keine Veränderungen vornehmen können (Nur lese Zugriff).

    Die Synchronisation soll ein separates Programm (Synchronisation-Programm) erledigen.

    Das kann meines Wissens? nur funktionieren wenn eine Nebenstelle der Master der jeweiligen Projekt-Daten ist.

    Den Master / Die Nebenstelle (Erzeuger des Datensatz) würde ich in einer separaten Spalte eintragen.

    Das Baugruppen-Programm soll seine Daten in die Lokale Datenbank und zusätzlich die geänderten Daten in eine XML-Datei (Keine Ahnung?) scheiben

    Das Synchronisation -Programm nimmt sich die XML-Dateien und schreibt sie in die Oracle – Datenbank der anderen Nebenstellen

    Wenn der Vorgang nicht erfolgreich (z.B. Online) war, werden die Daten einfach noch einmal geschickt (Puffer)

    Ich denke dass man das auch mit einer Online-Verbindung ohne VPN machen (Nebenstelle in Vietnam) kann? (Diese Anforderung existiert jedoch noch nicht)

    Die XML-Dateien werden anschließend Archiviert

    Jede Nebenstelle kann nur seine Daten / Projekt verändern

    Ich werde selbst verständlich die Anforderungen noch einmal mit der Fachdomäne durch gehen.

    Ich könnte mir vorstellen dass man das mit ASP.NET besser verwirklichen könnte. Ich habe jedoch noch keine Erfahrung mit dieser Technik

    Zudem muss ich eine komfortable GUI als Alternative zu Excel-Dateien anbieten

    Schönen Gruß
    Karl
     
  6. SideKick

    SideKick Benutzer

    Hallo, noch mal was zur UUID


    Bei dem Einsatz von eigene Sequencen oder eigene Nummernkreise pro Standort habe ich keine Erfahrung. Ich denke auch dass, das einen zusätzlichen Aufwand bedeuten würde?

    Hmm, die Datenbank ist klein und Performance spiel keine Rolle! Ich könnte ja einfach die UUID zusätzlich einsetzen?

    Hierbei könnte ich curval() und nextval() bei Bedarf einsetzen.

    Da ich z.B. auch eine Versionierung implementieren muss werde ich die referentielle Integrität benötigen. Zudem habe ich mehrere Unter-Tabellen aus denen ich Werte (z.B. Benennung, Standort) hole.

    Den Fremdschlüssel würde ich dann auf die Spalte UUID setzen? … oder ?
     
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