Announcement

Collapse
No announcement yet.

Grundlegender Programmaufbau

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Grundlegender Programmaufbau

    Hallo,

    ich hab mal ne Frage bezüglich Datenbanken und dem Programmaufbau: Bei meinem Rezeptmanager ist es z.B. so, dass ich eine Rezepttabelle habe (Haupttabelle) und untergeordnete Backprogramm-, Zutaten-, ZutatZuRezept-Tabellen. Diese lädt das Programm komplett in einem Fenster. Also wird z.B. eine Änderung an den ZutatZuRezept-Tabellen gemacht, speichert das Programm auch alle anderen Tabellen ab.
    So kommt es manchmal zu konflikten mit anderen Usern. Das Problem ist nicht der konflikt, damit rechne ich. Aber er ist ziemlich schwer abzufangen, da er überall sein kann.
    Im Netz habe ich kein Programm gefunden, welches "ALLE" Tabellen aufeinmal bearbeitet..
    Ist es GRUNDSÄTZLICH so, dass man die Rezepttabelle laden sollte, und bei allen anderen, z.B. Backprogramm, ein neues Fenster öffnen sollte welches dann auch nur das aktuelle Backprogramm speichert usw.? Gibts da Richtlinen?

    Danke!!
    Die Taschenlampe!

    Die perfekte Taschenlampe für Ihr Windows Phone!

    - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
    - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


    Hier gehts zu APP!

  • #2
    Die Daten sollten, wenn ein User sie bearbeitet für andere gesperrt werden. Dazu gibt es eine optimistische und eine pessimistische Herangehensweise

    http://en.wikipedia.org/wiki/Lock_(database)

    Des Weiter erscheint es nicht sinnvoll, die komplette DB zu laden
    Christian

    Comment


    • #3
      Nun, erstmal danke für die Antwort.
      Bei einem Artikelverwaltungsprogramm ist das auch nicht sinnvoll. Denn warum sollte man den Lieferanten "ändern" und zugleich dessen Artikel? Da brauche ich immer nur eines.
      Bei einem Rezeptprogramm allerdings ist es ja denkbar die Bezeichnung des Rezepts und deren dazugehöriges Backprogramm zu ändern.

      Aber wie du schon sagst: Ein kleiner Button mit der Aufschrift "Backprogramm", welcher ein neues Fenster öffnet, welches nur das Backprogramm ändert und speichert, ist sicherer.

      Aber du verstehst mein Programm jetzt besser, oder?

      MfG
      Die Taschenlampe!

      Die perfekte Taschenlampe für Ihr Windows Phone!

      - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
      - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


      Hier gehts zu APP!

      Comment


      • #4
        Im Netz habe ich kein Programm gefunden, welches "ALLE" Tabellen aufeinmal bearbeitet..
        Ist es GRUNDSÄTZLICH so, dass man die Rezepttabelle laden sollte, und bei allen anderen, z.B. Backprogramm, ein neues Fenster öffnen sollte welches dann auch nur das aktuelle Backprogramm speichert usw.? Gibts da Richtlinen?
        Man sollte nur die Daten laden die man auch wirklich braucht, nicht einfach ganze Tabellen und natürlich auch nur die Daten wieder in die Datenbank zurückschreiben die man auch geändert hat. Das eine Anwendung mehrere Tabellen gleichzeitig bearbeitet ist eher die Normalität als die Ausnahme. Ich verstehe nicht warum es in deiner Anwendung überhaupt zu Konflikten kommen sollte? Ich stelle mir ein Rezept als ziemlich unabhängig Größe vor. Kein Rezept wird sich einen Datensatz mit einem anderen Rezept teilen, oder? Der einzige Konfliktfall wäre also das ein Rezept gleichzeitig mehrfach bearbeitet wird und da sollte es wahrscheinlich auch knallen egal wo.

        Comment


        • #5
          Originally posted by Ralf Jansen View Post
          Man sollte nur die Daten laden die man auch wirklich braucht, nicht einfach ganze Tabellen und natürlich auch nur die Daten wieder in die Datenbank zurückschreiben die man auch geändert hat. Das eine Anwendung mehrere Tabellen gleichzeitig bearbeitet ist eher die Normalität als die Ausnahme. Ich verstehe nicht warum es in deiner Anwendung überhaupt zu Konflikten kommen sollte? Ich stelle mir ein Rezept als ziemlich unabhängig Größe vor. Kein Rezept wird sich einen Datensatz mit einem anderen Rezept teilen, oder? Der einzige Konfliktfall wäre also das ein Rezept gleichzeitig mehrfach bearbeitet wird und da sollte es wahrscheinlich auch knallen egal wo.
          Die Frage ist doch eigentlich auch obs denn überhaupt knallen muss. Bei vielen Anwendungen ist es vollkommen legitim dass der letzte der speichert gewinnt. Ich brauche also gar kein concurreny management.
          Und wenn man es braucht lässt es sich relativ mit einem Zeitstempel beim Laden/Speichern realisieren. NHibernate hat so etwas z.B. schon eingebaut. Glaube beim DataSet von Microsoft gibts sowas auch.

          Comment


          • #6
            Glaube beim DataSet von Microsoft gibts sowas auch.
            Standardmäßig packt der CommandBuilder der von DataAdapter/TableAdapter verwendet wird alle ursprünglich gelesen Feldwerte in die Where Clause.

            Comment


            • #7
              Hallo,

              wäre es dann besser nach jeder Tabelle, die geändert wird SaveChanges (Entity Framework) aufzurufen, oder alle Tabellen ändern und zum Schluss einmalig SaveChanges aufzurufen?

              Gruß
              Die Taschenlampe!

              Die perfekte Taschenlampe für Ihr Windows Phone!

              - Die APP steuert die echte Blitz-LED an und versorgt Sie mit 100% Leistung!
              - Zudem zeigt die Live-Kachel den aktuellen Akkustand des Telefons an!


              Hier gehts zu APP!

              Comment


              • #8
                Originally posted by Flo_Plus View Post
                Hallo,

                wäre es dann besser nach jeder Tabelle, die geändert wird SaveChanges (Entity Framework) aufzurufen, oder alle Tabellen ändern und zum Schluss einmalig SaveChanges aufzurufen?

                Gruß
                Das kommt ganz drauf an was man als Arbeitseinheit (Unit of Work) betrachtet. Im Normalfall bearbeitet der Benutzer ja immer eine Sache. Wenn er mit dem Bearbeiten fertig ist wird gespeichert. Das liegt aber ganz in Deiner Hand wann Du wo was speicherst.

                Comment

                Working...
                X