Gerold Kumpfhuber: Anregung

Hallo!
Ich suche ein paar Anregungen wie ich eine Kontakteverwaltung am Besten regeln kann. Wir haben in unserer Firma verschiedenste Kriterien nach Kontakten zu suchen. zB. (Montagefirma, Adresse, Telefonnumer, Fax), (Mitarbeiter, Abteilung, Kompetenz, Vorgesetzter, Telefon, Mobil),(Kundenberater, Nummer, Abteilung, Telefon, Mobil, Fax) , (Externe Firma, Adresse, Telefon, Mobil, Ansprechperson) das sind einige Beispiel. Wie soll ich das ganze anlegen. Soll ich alles in eine Tabelle geben oder sollen es mehr werden. Die Suche sollte ausschließlich mit einem Formular erfolgen. Weiters sollte die Ausgabe von ganzen Listen möglich sein. Vielen Dank für die Anregungen.

Liebe Grüße
Gerold

  1. Hallo Gerold,

    das ist alles ein Spaghat zwischen Disziplin, Nutzwert, Konsistenz und Pflegbarkeit.

    Ich würde bei den Leistugnsstarken Datenbanken, die es heute für den Officebereich gibt, immer für das Modell "Element und seine Eigenschaften" stimmen. Das bedeutet, dass Du einer Firma einen relativ dürftigen Stammdatensatz verpasst und dann alle Eigenschaften (Telefon, Fähigkeiten, Mitarbeiter...) relational ankoppelst. Auch die Eigenschaften können wirder welche haben.

    Wenn man die Eigenschaften klassifiziert, kann man mit Hilfe varianter Records (das ist dann absichtlich "entnormalisiert") ungeheuer viel erreichen.

    Und SQL machts möglich.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    1. Hallo Tom,

      vielen Dank für deine Hinweis. Also an der Datenbank liegt es nicht. Ich habe in unserer Firma eine SQL Datenbank zur Verfügung. Upgedatet sollen die Kontakt über ASP Skripte werden. Da sehe ich eher dann das Problem. Wenn ich sehr viele Tabellen verwende dann wird es kompliziert, da ich ja alle Tabellen verknüpfen muss. Ebenfalls weis ich auch nicht wie ich die Suche über ASP Skripte regeln soll.

      Liebe Grüße aus Wien
      Gerold

      1. Hallo,

        das bedeutet also, dass Ihr eine HTTP-Anwendung für eine Interne Datenbanklösung schreibt?

        Wie groß ist denn die Firma?

        Sowas lohnt sich doch erst ab einer Größe von mehr als 50 Arbeitsplätzen in einer heterogenen Umgebung (was die OSse auf den Clients betrifft). Man muss da ganz viel Power auf das Rechtesystem verwenden. Und dass mal ein Zugriff von außen kommt, ist auch nie so ganz auszuschließen. Die Technik ist eben eher für 10.000 User als für 10 entwickelt.

        Bis 50 Mitarbeiter würde ich bei internen Lösungen, die keine direkte Verbindng zu anderen Applikationen haben müsse immer sowas wie Access oder Delphi nehmen.

        Ich habe da schon einige kleinere Dokumentverwaltungssysteme mit integriertem Infosystem und Aufgabenverwaltung in Access erstellt und habe meistens noch nicht einmal VBA gebraucht. Das meiste geht mit Makros und ist auch nicht langsamer.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
        1. Lieber Tom,

          es handelt sich um eine Firma mit mehr als 1200 Mitarbeiter, die alle darauf zugreifen. Die einzig sinnvolle(da für die MA sehr einfach) Lösung ist über dem Webserver, in unserem Falle ASP Skripte. Also Access schliesse ich aus. Ich arbeite auch ständig an Weblösungen. In diesem Fall weis ich nicht so recht wie ich es angehen soll. Wenn ich viele Tabellen verwende werden die Skripte sehr aufwendig. Ich kann mir, wie ich schon erwähnt habe die Suche durch angenommen 15 Tabellen schwer vorstellen, genausowendig die Updates, die viele MA erledigen sollen über Formulare. Aber die Lösung sollte auf einem Webserver und SQL - Server realisiert werden.

          Schöne Grüße aus Wien
          Gerold

          1. Hallo Gerold,

            das lässt sich hinbekommen, ich wollte immer schon mal in Wien arbeiten *gg*

            Allerdings bin ich da für ASP nicht der richtige Ansprechpartner, aber ich könnte Dir einen Kollegen empfehlen, der bestimmt mal vier Wochen Wien mag.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  2. Moin!

    Wie soll ich das ganze anlegen. Soll ich alles in eine Tabelle geben oder sollen es mehr werden.

    Wie du suchen willst, ist für die Strukturierung der Daten relativ irrelevant. Die Datenbank findet schon, was du suchst. Bei riesigen Datenmengen und wahnsinnig vielen Abfragen kann sowas vielleicht relevant werden - deine Frage hört sich nicht unbedingt danach an.

    Viel interessanter ist die Datenstruktur selbst. Natürlich kannst du alles in eine Tabelle packen. Bedenke aber, dass es zum Beispiel eine Firma gibt, in der dir drei Kontaktpersonen bekannt sind. Willst du dann die Firmendaten dreimal eingeben? Oder ist es doch besser, nur einen Firmeneintrag in der Firmentabelle zu haben, und damit verknüpft drei Kontakteinträge in der Personentabelle?

    Und was ist, wenn eine Kontaktperson mehreren Firmen zugehört. Geschäftsführer sind für sowas typische Beispiele - sind einfach für mehrere Firmen gleichzeitig zuständig. Und was ist mit Firmen, die mehrere Niederlassungen haben - wird das irgendwie berücksichtigt? Ist das irgendwie wichtig? Je besser du deine Daten strukturierst, desto bessere Abfragen kannst du hinterher machen, und desto weniger Redundanz hast du in deiner Datenbank. Je weniger Redundanz (also im Prinzip Doppelteintragungen), desto einfacher sind Datenänderungen zu machen, weil sie in der Regel nur an einer Stelle notwendig sind.

    - Sven Rautenberg

    --
    "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
    1. Hallo Sven!

      Vielen Dank für Deine Anregung!

      Also es ist besser viele Tabellen anzulegen um Redundanzen zu verhindern. Das erscheint mir auch sinnvoll. Wie gehe ich dann bei der Suche vor. Du sagst die Datenbank findet schon was du suchst. Ich möchte das Ganze mit einer MSSQL Datenbank und ASP Skripte lösen. Das habe ich in unserer Firma zur Verfügung. Wenn ich jetzt die Daten suche muss ich bei vielen Tabellen mich durch jede Spalte ducharbeiten. Also das mit ASP Skripte zu lösen erscheint mir nicht ganz so einfach, oder denke ich da nur zu kompliziert.

      Vielen Dank
      und LG
      Gerold

      1. Hallo,

        Also es ist besser viele Tabellen anzulegen um Redundanzen zu verhindern.

        Bei der Redundanzverhinderung vergiss aber nicht die vierte Dimension. Du musst immer an einer Historie denken. Einfaches Beispiel: Bei der Erstellung der Rechnung muss entweder der Firmenname und die Anschrift zum Zeitpunkt der Rechnungstellung in den Rechnungskopfdatensatz kopiert werden, oder man muss bei jeder Anschriftenänderung einen Nachfolgedatensatz in der Anschriftendatei anlegen. Frei nach dem Motto: der letzte mit Gültigkeitsdauer von...bis ist noch da, aber eben für neue Vorgänge nicht mehr erreichbar.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
        1. Lieber Tom,

          vielen Dank für Deine Hilfe. Das ist mir klar aber das ist nicht mein Problem. Mein Problem ist die Weblösung. Wie realisiere ich den Update mittels HTML Formulare wenn ich angenommen 10 Tabellen habe. Wie gestalte ich die Suche. Das ist mein Problem.

          Liebe Grüße aus Wien
          Gerold

          1. Hallo,

            das nennt sich Vorgangsbearbeitung...

            Du zerlegst den Erfassungs- und Verarbeitungs- und Speichervorgang in Phasen, die nacheinander abgewickelt werden müssen. Wenn eine fehlt oder Fehler auftraten, wird geordnet abgebrochen. Ggf. wird ein Rollback durchgeführt.

            Dazu benötigst Du auf jeden Fall einen Sessionmechanismus.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
            1. Einen guten Morgen!

              Dazu benötigst Du auf jeden Fall einen Sessionmechanismus.

              Was führt Sie zu dieser Schlussfolgerung, Watson?

              S. Holmes

              1. Halihallo Andreas

                Einen guten Morgen!

                Ebenso ;)

                Dazu benötigst Du auf jeden Fall einen Sessionmechanismus.
                Was führt Sie zu dieser Schlussfolgerung, Watson?

                Die Einsicht der Erfahrung, wie man solche Systeme am besten aufbaut, aber wem sage ich
                das, guter Herr Holmes ;)

                Viele Grüsse auch dem bereits planenden und weitsichtigen Watson ;)

                Einstein ;)

                1. Hallöchen!

                  Die Einsicht der Erfahrung, wie man solche Systeme am besten aufbaut, aber wem sage ich
                  das, guter Herr Holmes ;)

                  Nun ja, ich mache sowas immer in einem Script, was brauche ich da für eine Session? Im HTML-Formular initiiere ich eine Aktion, und das Script führt entsprechend mehrere Statements mit Fehlerkontrollen aus. Oder hattet Ihr auf was anderes angespielt?

                  Viele Grüsse auch dem bereits planenden und weitsichtigen Watson ;)

                  nicht so voreilig... :-)

                  Einstein ;)

                  Warum beschäftigt sich ein Beamter des Eidgenössischen Patentamtes Bern mit einer solchen Problematik? Sehr verdächtig...

                  Holmes

                  1. Halihallo Andreas

                    Die Einsicht der Erfahrung, wie man solche Systeme am besten aufbaut, aber wem sage ich
                    das, guter Herr Holmes ;)
                    Nun ja, ich mache sowas immer in einem Script, was brauche ich da für eine Session? Im HTML-Formular initiiere ich eine Aktion, und das Script führt entsprechend mehrere Statements mit Fehlerkontrollen aus. Oder hattet Ihr auf was anderes angespielt?

                    Nein, deines geht auch, aber weisst: "Ich progge lieber in der 4GL 'Session'" ;)

                    Einstein ;)
                    Warum beschäftigt sich ein Beamter des Eidgenössischen Patentamtes Bern mit einer solchen Problematik? Sehr verdächtig...

                    Er erhofft sich eine Eingebung für die 5. Dimension, oder soll ich lieber gleich 26
                    neue einführen? - (M|)-String-Theorie... Du siehst, Quantenphysik hat sehr viel mit
                    Programmieren zu tun! ;-)

                    Viele Grüsse

                    Philipp

      2. Moin!

        Also es ist besser viele Tabellen anzulegen um Redundanzen zu verhindern. Das erscheint mir auch sinnvoll.

        Nicht "viele", sondern nur "mehrere". Das ist durchaus ein Unterschied.

        Grundlage ist, dass du zunächst die Art deiner Daten beschreibst. Welche Information ist einmalig im Verhältnis zu anderen Informationen.

        Wie ich schon erwähnte: Eine Firma ist eher einmalig, hat aber möglicherweise mehrere Kontaktpersonen. Also bietet es sich an, eine Tabelle für die verschiedenen Firmendaten anzulegen (Name, Adresse, Tel-Durchwahl zur Zentrale), und zusätzlich eine Tabelle mit Kontaktpersonen (Name, Telefon, Fax, Mail, Zuständigkeitsbereich etc.).

        Und dann kommt die spannende Frage: Kann eine Person zu einem Zeitpunkt eigentlich für mehrere Firmen die Kontaktperson sein? Theoretisch ja, siehe das Beispiel der Geschäftsführer. Aber kommt das auch praktisch vor? Und wenn es tatsächlich vorkommt: Ist das relevant? Muß es berücksichtigt werden? In welcher Form? Da ist dann die Anforderung der Benutzer gefragt.

        Wie gehe ich dann bei der Suche vor. Du sagst die Datenbank findet schon was du suchst.

        Die Frage ist dann, was genau du suchst. Wenn du alle Kontaktpersonen mit "Müller" suchst, fragst du logischerweise nur die Personentabelle ab. Das Suchen erledigt hierbei die Datenbank:
        SELECT * FROM personentabelle WHERE nachname="Müller"

        Das liefert dir nur die Datensätze, die den Nachnamen "Müller" haben.

        Wenn du Firmen in Bochum suchst, fragst du logischerweise die Firmentabelle:
        SELECT * FROM firmentabelle WHERE ort="Bochum"

        Wenn du jetzt aber alle Müllers suchst, deren Firma in Bochum liegt, mußt du die zwei Tabellen verknüpfen - genauer gesagt: Verknüpfen lassen, denn sowas kann die Datenbank selbst am besten und schnellsten.

        Dummerweise kenn' ich mich mit MSSQL-Abfragen nun absolut nicht aus, aber das grundlegende Konzept ist bei allen relationalen Datenbanken gleich: Die Firmen haben alle eine eindeutige ID in der Tabelle gespeichert, welche bei den Kontaktpersonen wieder auftaucht. Auf diese Weise kann man feststellen, zu welcher Firma eine Kontaktperson gehört. Und die Verknüpfung beider Tabellen nennt sich "JOIN". Schau in die Doku zu MSSQL, wie man JOINt.

        Ergebnis eines JOINs ist jedenfalls eine Gesamttabelle, in der alle oder viele Zeilen der ersten Tabelle mit allen oder vielen Zeilen der zweiten Tabelle verbunden sind. Wenn du eine Firma und drei Kontaktpersonen hast, sieht das z.B. so aus:
        Firma1 - Kontakt1
        Firma1 - Kontakt2
        Firma1 - Kontakt3

        In solch einer Tabelle kannst du dann abfragen, welchen Ort die Firma hat, und welchen Namen die Kontaktperson - und kannst auch entsprechend danach suchen - über dieselbe Grundform des SELECT, wie oben auch schon erwähnt.

        Wenn ich jetzt die Daten suche muss ich bei vielen Tabellen mich durch jede Spalte ducharbeiten. Also das mit ASP Skripte zu lösen erscheint mir nicht ganz so einfach, oder denke ich da nur zu kompliziert.

        Wenn du die Datenbank für dich arbeiten läßt, mußt du dich im Prinzip nur darum kümmern, dass die einmal zu Beginn festgelegten Verknüpfungen genutzt werden. Das ist aber im Prinzip der statische Teil. Variabel ist die Abfrage, welche Datensätze nun eigentlich gemeint sind - also der Teil nach dem WHERE.

        MSSQL bietet nach meinen Informationen auch die Möglichkeit, sogenannte VIEWs anzulegen. Das sind fest vorgefertigte Ansichten auf die Datenbank, in denen die Verknüpfungen schon eingebaut sind - aber ohne die Daten dafür noch einmal zu kopieren. Damit kannst du die Angabe der JOINs im Prinzip komplett weglassen und direkt die VIEW-Tabelle abfragen.

        Aber wie gesagt: Lies die Dokumentation zur MSSQL-Datenbank.

        - Sven Rautenberg

        --
        "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
        1. Lieber Sven,

          vielen Dank für die Information.

          LG
          Gerold