Hallo zusammen
Ich will ein Programm zu Verwaltung der Aufträge in der Firma schreiben und weiss noch nicht wie ich am besten die Datenbank erstelle.
Anforderungen:
Es soll nichts grosses werden, so simpel wie möglich.
Gibts da etwas?
Freundliche Grüsse
Black_Rider
Dein Problem wird der zeitgleiche Zugriff sein - den wirst Du irgendwie synchronisieren müssen.
An für sich kann man dafür ruhig ne XML Datei nehmen, die problematik des zeitgleichen Zugriffs und evtl. Locking auf Objekte musst halt alles selbst machen, ansonsten wird die Datei irgendwann korrupt.
Im Prinzip kann man dafür SQLite verwenden; aber selbst da liest man immer wieder, dass bei Shared Files einfach die Datendatei irgendwann defekt ist.
Ist also alles andre als empfehlenswert.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
auch wenn mir dabei das Frühstück hochkommt, fällt mir zu dem Thema am ehesten eine Access-Datenbank ein.
Access im Netz... Shared File-DB is the root of all evil.
Ein kurzer Netzunterbruch beim speichern und alles ist im Eimer....
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hallo Black_Rider,
Speicherort in einer normalen Datei in einem normalen freigegeben Ordner im Netzwerk
Muss das so sein? Das verursacht mehr Probleme als es bringt. Nimm besser eine richtige Datenbank - z.B. den SQL Server (Express). Damit hast du auf lange Sicht sicher am wenigsten Probleme, auch wenn es mal doch mehr als 4 Clients werden sollten.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Alternativ könnt ihr euch eine Linux Kiste mit PostgreSQL/MySQL aufsetzen falls es mal mehr als 4 GB Daten werden oder ihr besorgt euch einen SQL Server von Microsoft.
Kostet nichts und reicht für eine kleine Firma.
Die Provider zum ansprechend der DB gibt es auch für .Net
Eine Netzwerk Freigabe mit einer Dateibasierten DB wie SQLite kann man für parallele Zugriffe nicht empfehlen eben da dies mehr Probleme macht.
Gerade im parallelen Zugriff sind normale Datenbanken perfekt.
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Sql Express hat schon seit 2008 das Limit auf 10GB hochgesetzt.
Hallo zusammen
Vielen Dank für die Antworten. Dann werde ich wohl, bis es läuft, einen MySQL Server auf meinem NAS einrichten und danach einen in der Firma zum laufen bringen.
Sehe nur gerade noch ein Hinderniss. Wenn Client A etwas ändert, muss das ja Client B auch "erfahren". Wie mache ich das, ohne das der die ganze Zeit die Liste neu laden muss um diese abzugleichen? Gibts da n Trick?
Gruss Black_Rider
@FZelle
Danke wusste ich leider noch nicht 😃
Hatte bisher nur die Express von 2008 im Einsatz.
Muss wohl mal wieder die Express Versionen durchschauen.
@Black_Rider
Ich denke mal, da wirst du nicht drum herum kommen.
Es stellt sich aber die Frage warum deine Anwendung alle Daten in einer Liste im Speicher halten muss.
Gibt es eine Möglichkeit die Daten der Clients zu trennen?
Falls nicht wüsste ich keinen Weg, ohne einen Abgleich der Daten, um dieses Problem zu lösen.
Nachtrag:
Hab mir dein Vorhaben nochmals durchgelesen.
Im Normalfall sollte es eigentlich nicht nötig sein die Daten im Speicher zu halten.
Hier könntest du die Daten nur zum auflisten einmal einladen.
Wenn ein Eintrag bearbeitet werden soll kann man ein "Lock" Feld in der Datenbank setzen.
Somit würden die anderen Clients sehen, dass der Eintrag nicht bearbeitet werden kann, da jemand bereits den Eintrag bearbeitet.
Die Auflistung der Aufträge kannst du eigentlich immer Live Abfragen.
Somit entfällt der Abgleich, da alle Clients die selbe Datenbank sehen.
Alternativ könntest du per Timer die Aufträge bei den Clients alle n-Sekunden aktualisieren um die aktuellen Aufträge anzuzeigen.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo!
Für Benachrichtigungen ist das Stichwort "Notifications". MS SQL bietet dass, ich weis nur aktuell nicht, ob auch bei SQL Express. Ansonsten ginge noch Firebird, die unterstützt dass ebenfalls.
Ansonsten könntest du es über Trigger versuchen, die sind in den meisten Datenbanken supported. Speziell für mySQL wäre hier dieser Hinweis interessant: MySQL 5.1 Reference Manual
EDIT: Oder man schreib sich einen DataLayer, welcher alle DB-Änderungen vornimmt und einen zusätzlichen Mechanismus zur Benchrichtigung anderer Clients enthält (wobei dann allerdings eine zweite Server-Anwendung herhalten müsste).
Nobody is perfect. I'm sad, i'm not nobody 🙁
Hi zusammen
Nochmal Danke für die Beträge und die Bemühungen.
Nein, die Daten können nicht getrennt werden.
Ich werde mich zuerst in die MySQL DB einlesen und ein Testprojekt erstellen, umd herauszufinden wie ich es am besten realisieren kann.
Schönen Abend zusammen 😃
Gruss Black
Und warum jetzt MySql?
Nur weil es im INet so gehyped wird, bedeutet es nicht das die wirklich gut ist.
Wenn dein NAS es hergibt benutze PostGres.