Struktur einer Firmensoftware



  • Ich entwickel grade eine Firmensoftware für ein Kleinunternehmen mit der zunächst nur neue Kunden erfasst und Angeote, Rechnungen und Liferscheine erstellt werden sollen. Außerdem soll man über ein Suchformular nach Kunden und Aufträge suchen können.

    Ich bin jetzt mit der Planung so weit fertig und habe hier mal die Klassen die ich entwickeln muß aufgegliedert und hier die Datenbank-Struktur dargestellt. Da ich noch nicht so viel Erfahrung habe, wollte ich mal fragen ob man das vielleicht an manchen Stellen besser anders machen sollte bzw. ob sich manches garnicht so realisieren läßt. Über jeden Verbesserungsvorschlag bin ich froh.

    Die Datenbank ist MS-Access, sei denn mir nennt jemand eine bessere Alternative und die Programmiersprache wird endweder C++ oder C# sein.



  • Hallo,

    du solltest dir vielleicht eine etwas übersichtlichere Visualisierung angewöhnen. Das Entity Relationship Modell z. B. würde Zusammenhänge wesentlich besser darstellen.

    Hier noch ein Beispiel:
    http://sql.idv.edu/thema/e_r_modelle/erm.htm



  • Hallo

    von Access wuerde ich die Finger lassen (kenne zuviele die mit Access grosse Probleme bekommen haben)

    ich wuerde eher zu SQLLite oder mySQL raten

    ich persoenlich verwende mySQL (ich weiss einiges kann mySQL noch nicht)

    MfG
    Klaus



  • Hallo,

    wobei mySQL natürlich einige Features fehlen (z. B. referentielle Integrität). So pauschal kann man das nicht sagen, sondern es ist wichtig zu wissen, was die Anforderungen sind. Gegen Access spricht aber auch, dass es eben nur unter Windows läuft.



  • mySQL hat allerdings den Nachteil, dass es eine Server basierte DB ist.

    Ich würde SQLite empfehlen, wenn die Features für dein Projekt reichen. Die
    Geschwindigkeit ist ausreichend und die API ist zwar gewöhnungsbedürftig aber
    einfach.

    Access hingegen via ADO anzusprechen ist wirklich hart. Da hakt es an allen
    Ecken und Enden. Das DAO ist hingegen viel zu langsam und ODBC ist noch
    schlimmer. Access als DB ist allgemein gesehen eh nicht dafür geeignet große
    Datenmengen mit vielen Usern zu verwalten.

    Solltest du allerdings einen zentralen mySQL-Server einrichten können, dann
    wäre das wohl für dein Projekt perfekt - vor allem, da die API wirklich
    simpel ist. Auch wenn mich einige dafür erschlagen werden: IMHO ist die C
    API besser als die C++ API. Die C++ API bringt in ein simples Prinzip unnötig
    viel Overhead und macht das ganze Recht unübersichtlich. Außerdem ist die C
    API absolut ausgereift.



  • Ich will mir vielleicht bald Visio holen, aber bis dahin muß mir Exel reichen.

    SQLite wollte ich erst nehmen, aber die Features sind da wie der Name schon sagt sehr beschränkt. Da gibt es noch nichtmal Fremdschlüssel.

    Und MySQL, dachte ich immer läuft nur mit Webserver. Hab letztens aber mal gehört das das nicht der Fall sein soll, allerdings hab ich keine Ahnung wie ich eine MySQL db in eine solche Anwendung integriere.

    Das Access nur unter Windows läuft ist eigendlich egal, da meine Anwendung auch nur unter Windows laufen wird.

    Ich sollte vielleicht erwähnen das die ganze Anwendung zunächst nur auf einem Rechner laufen wird. Also kein Server, kein Zugriff mehrerer User gleichzeitig und auch keine Synchronisation der Datenbank verschiedener Rechner.



  • Nimm am besten DTL, dass ist eine sehr schöne C++ Library, die ODBC wrapt (was total hässlich und mühsam zu benutzen ist) und dir STL like darstellt. Damit kannst du ohne Probleme jede normale Datenbanke (auch Access, MySQL oder Oracle oder was weiss ich) ansprechen, weil es ein ISO Standard für Datenbank Anbindung ist und du nutzt gleich tolles C++. Ansonsten wie gesagt SQLite

    @schrankwand
    wenn Access zur Debate steht, dann erwartet er ja auch keine krassen Datenbank Features, sonst hätte er sicher von Oracle oder so gesprochen. MySQL läuft natürlich auch ohne Webserver. Das Ding ist nur bei Webprogrammierern so populär, weil es (a) kostenlos ist, (b) schnell und (c) alle PHP Tutorials erklären, wie man es benutzt (;)).



  • Access ist auch akzeptabel, wenn man es als eine Art strukturiertes Speichermedium benutzt, also im wesentlichen als eine Art Datei mit Index-Struktur. VBler machen das gerne.

    Damit gibt's auch wenig Probleme.

    Kritisch wird Access, wenn man BLOBs speichert (Binärobjekte), oder wenn man die Datenbank auf das Netz legt und mehrere Clients darauf zugreifen - das mag's gar nicht. Die Treiber führen Abfragen nämlich lokal auf dem Client aus, d.h. bei einer Anfrage werden alle Daten über Netz auf den Client geholt, dort werden die Ergebnisse ermittelt. Das erzeugt natürlich eine ungeheure Last für das Netz und Performance -> mies. Dafür ist's eben nicht gemacht, es ist keine serverbasierte Datenbank, dort würde der Server nämlich die Anfrage bei sich selbst bearbeiten und nur Ergebnisse liefern.



  • CarstenJ schrieb:

    wobei mySQL natürlich einige Features fehlen (z. B. referentielle Integrität).

    doch das geht, wenn man die datenbank im 'InnoDB'-format anlegt.



  • MSDE (Microsoft Database Engine) wäre doch eine alternative. Es handelt sich dabei um den MS SQL Server der nur max. 5 Connections gleichzeitig (oder wieviel es auch immer waren) erlaubt und dabei sogar kostenlos ist. Soll eine Alternative zu MySQL sein und halte ich wirklich nicht für schlecht.



  • Wenn nicht Access, dann würde ich warscheinlich MySQL nehmen. Kann mir vielleicht jemand erklären wie das funktioniert. Ich kenn MySQL nur in Verbindung mit einem Webserver, zu dem ich dann mit einer Funktion in PHP connecten kann und mit einer anderen Funktion dann SQL-Abfragen machen kann, aber wie funktioniert das ohne Webserver und mit C++ statt PHP?



  • Ich hätte da mal nen radikal anderen Ansatz: Wieso die Software nicht Browser-basiert? Ist doch eigentlich viel flexibler...

    -junix



  • schrankwand schrieb:

    Kann mir vielleicht jemand erklären wie das funktioniert. Ich kenn MySQL nur in Verbindung mit einem Webserver, zu dem ich dann mit einer Funktion in PHP connecten kann und mit einer anderen Funktion dann SQL-Abfragen machen kann, aber wie funktioniert das ohne Webserver und mit C++ statt PHP?

    MySQL hat nichts mit einem Webserver zu tun. Mit Deiner Anwendung machst Du es genauso wie mit PHP. Du baust eine Verbindung zum Server auf, führst Deine Abfragen aus und schließt die Verbindung wieder. 😉



  • Also brauch ich für MySQL doch ein Server, auch wenn kein Webserver?! Dann nehm ich lieber Access, wüsste eigendlich nicht warum ich das auch nicht machen sollte. Meine Anwendung inkl. der Datenbank soll ja so wie so nur auf einem Rechner laufen.



  • schrankwand schrieb:

    Also brauch ich für MySQL doch ein Server, auch wenn kein Webserver?!

    Eine Serverapplikation ja.... zusätzliche Hardware: nein.



  • Schon klar. Aber dann nehm ich doch lieber Access. Ich danke allen für die Ratschläge bzgl. der Datenbank, aber kann mir vielleicht mal jemand sagen was er von der Struktur meiner Klassen und der Datenbank hält, wo ich im ersten Beitrag Links zu angeben habe? Danke.



  • schrankwand schrieb:

    aber kann mir vielleicht mal jemand sagen was er von der Struktur meiner Klassen und der Datenbank hält, wo ich im ersten Beitrag Links zu angeben habe? Danke.

    ja, kann ich, jedenfalls wenn ich das richtig sehe. Du redest da von Klassen und Unterklassen. Ist damit Vererbung gemeint?

    Welchen Sinn soll eine Search-Klasse haben? Warum sind Result und Query unterklassen davon? suchen klingt eher nach ner Aktion für mich. Bei den meisten anderen Punkten geht es mir ähnlich. Nicht jede Aktion, die man durchführen kann ist ne eigene Klasse.

    MfG Jester



  • Die Klasse Search und deren Unterklassen sind Form-Klassen d.h. sie enthalten keine Methoden zum Suchen in der db diese Methoden kommen in die Klasse SearchInDb. Die Klasse Forms und ihre Unterklassen u.A. Search dienen nur zur ERstellung der Windows-Forms.


Log in to reply