2.8k Aufrufe
Gefragt in Datenbanken von
Hallo,

hoffe ihr könnt mir helfen.

Ich erstelle gerade eine Datenbank in MS Access, früher hat man hierfür Excel genutzt. Mittlerweile werden so viele Daten abgefragt, so das dies mit Excel einfach unübersichtlich ist.

Es ist quasi eine Interessenten/Kunden- Liste für den Vertriebsinnendienst.

Also, es handelt sich hierbei um eine Datenbank mit Krankenhäusern. In der Datenbank sind folgende Daten zu finden:
Adressinfos des KH, VerbundZugehörigkeit, Bettenanzahl, Ansprechpartner Krankenhaus, Ansprechpartner Technische Leitung jeweils mit Name, Tel, Email und welcher Vertriebsbeauftragter zuständig ist.

Zudem werden diese Datensätze gerade abtelefoniert und die Ergebnisse sollen auch in die Datenbank.

Ich habe in meiner Datenbank also schon einige Tabellen angelegt. (Krankenhäuser, Personal, Anbieter, VerbundZugehöriigkeit, etc) und miteinander verbunden.

Wie macht man es am Besten mit den Ansprechpartner?

Ist es ratsam hierfür eine weitere Tabelle anzulegen, wenn ja, wie?
Es wird ja keine Duplikate von Ansprechpartner geben. Ist es vielleicht doch sinnvoller alle in eine Tabelle zu stecken?

Vielen Dank für Eure Hilfe.

Gruß, Kagome

8 Antworten

0 Punkte
Beantwortet von
Hallo Kagome!

Bezüglich der Anfrage würde ich Dir empfehlen eine Abfrage zu erstellen und als erstes Feld den Ansprechpartner nehmen und alle anderen notwendigen Felder auch aus der Tabelle übernehmen

Die Ansprechpartner würde ich alphabetisch sortieren und ein tabellenförmiges Formular erstellen.

Ich nehme an das die Ansprechpartner bereits größtenteils in der Tabelle enthalten sind.
Eine neue Tabelle erstellen wäre zu viel Arbeit.

Für allgemeine Besprechungsnotizen würde ich empfehlen in der Abfrage ein Feld unmittelbar nach dem Ansprechpartner hinzufügen.

Ich verwalte meine Termine mit Outlook, aber Outlook kann nicht was Acces kann, doch es ist möglich Acces Kontaktdaten in Outlook zu importieren, dies nur eine Idee am Rande, deren Umsetzung nicht uninteressant wäre (aber das ist ein anderes Thema).

Es sollten nur einmal ein paar Tipps nach erster Betrachtung Deiner Frage sein.

schöne Grüße

Paul1
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Kagome,

deine Daten haben Beziehungen unter einander. z.B. die Verbundzugehörigkeit ist bestimmt eine 1:n-Beziehung zu den Krankenhäusern (also eiben Verbund gehören mehrere Krankenhäuser an). Wogegen der tech. Ansprechpartner nur zu einem bestimmten Krankenhaus gehört.
Zugegeben, ich kenne deine fachliche Anforderung nicht genau und im Krankenhaus bin ich selten ;-)
Vielleicht kannst du das Beziehungsgeflecht einmal näher erläutern von allen Tabellen, die wichtig sind.

gruß
Ralf
0 Punkte
Beantwortet von
Hallo,

danke für Eure Antworten.

Ich habe quasie eine Tabelle, diese heißt Krankenhäuser.
In dieser Tabelle sind ca. 600 Datensäten/Krankenhäuser gelistet.
Zu diesen Krankenhäuser werden u.g. Infos recherchiert.

Dann habe ich weitere Tabellen, wie
Laborstandort (im Haus, auf dem Gelände, etc),
Probentransport (Rohrpost, eigenes Personal),
RohrpostAnbieter (Swisslog, Aerocom, Sumetzberger)
Rohrpostsystem,
RohrpostNennweite, (NW110, NW160, NW200)
VerbundZugehörigkeit, (Median, Kath, Ev, etc)
AnredeAnsprechpartner, (Herr, Frau)
FunktionenAnsprechpartner, (Geschäftsführung, Technische Leitung)
Nachfassungserfolg (Interesse vorh. kein Interesse)

Diese sind wie ihr schon sagtet mit Beziehungen verknüpft.
Also habe ich an der großen Tabelle "Krankenhaus", die anderen Tabellen verknüpft. Fast ausschließlich mit 1:n Beziehungen.

Bisher sind die Ansprechpartner in der Krankenhaus Tabelle. Weil ansonsten müsste ich ja quasi eine Tabelle erstellen, mit der ich die Beziehung zur Krankenhaus Tabelle erzeuge und dann zu jedem Datensatz einen Ansprechpartner anlege. Kann man sich wahrscheinlich sparen, od.?

Andere Frage:
Es gibt auch noch die Tabelle RohrpostAnbieter und RohrpostSystem. Jeder Anbieter hat verschiedene Systeme.
Ich möchte also, wenn ich eine Auswertung mache, dass man sehen kann welches Krankenhaus, welchen Anbieter mit welchem System hat. Die Tabelle System hat zwei Felder: System und Anbieter (hier ist eine Beziehung 1:n zur Tabelle Anbieter).
Habe bisher eine 1:n Beziehung zwischen Krankenhaus und System, und eine 1:n Beziehung zwischen System und Anbieter. Ist das so richtig?

Problem ist allerdings, dass der Benutzer der diese Daten eingibt/ändert, zwar den Anbieter weiß, manchmal aber das System unbekannt ist. Also habe ich in der Tabelle System folgendes stehen:
TranspoSmart, Swisslog;
TranspoNet, Swisslog;
Unbekannt, Swisslog;
AC 3000, Aerocom;
Unbekannt, Aerocom;
PowerControl, Sumetzberger;
Unbekannt, Sumetzberger;
etc...

Mein Problem ist jetzt aber, dass im Formular ja nur das System angezeigt wird. Habe im Forumlar ein Kombinationsfeld erstellt. Also steht da TranspoSmart, TranspoNet, Unbekannt, AC 3000, Unbekannt, PowerControl, Unbekannt.
Versteht ihr? Der Benutzer kann also nciht erkennen, welches Unbekannt zu welchem Anbieter gehört... Was kann man da machen?

Greetz,
Kagome
0 Punkte
Beantwortet von
Hallo Kagome!

Ohne auf das Beziehungsgeflecht der einzelnen Tabellen näher einzugehen, habe ich mich speziell auf Deine Frage bezüglich des Formulars konzentriert, welches nur das System anzeigt und wenn Unbekannt erscheint kein Anbieter zugeordnet werden kann.
Das ist völlig klar, denn Unbekannt ist Unbekannt.
Sollte der Anbieter bekannt sein, aber das System nicht eindeutig zuordenbar sein, habe ich in der Tabelle System und Anbieter z.B. Unbekannt „AC3“ hinzugefügt ist gleich Anbieter „Aerocom“(man kann natürlich auch eine Abkürzung z.B.“Aer“ verwenden).

In die Tabelle System und Anbieter habe ich folgende Daten eingefügt:
System-Anbieter
System Anbieter
AC 3000 Aerocom
TranspoSmart Swisslog
Unbekannt AC3 Aerocom


Tabelle Krankenhäuser:

Da habe ich angenommen, dass ein Feld System vorhanden ist und die jeweiligen Systeme pro Krankenhaus eingetragen sind, ungefähr so:

Krankenhäuser System Betten Ansprechpartner
Krankenhaus A AC 3000 20 Bauer
Krankenhaus B TranspoSmart 35 Maier
Krankenhaus C Unbekannt AC3 90 Berger
Krankenhaus D Unbekannt AC3 50 Dorfner


Mit der Tabelle „Krankenhäuser“ habe ich ein Formular (einspaltig) erstellt und die Tabelle „System und Anbieter“ als Unterformular eingesetzt.

Wenn jetzt mittels Navigation die Dateien aufgerufen werden, erscheint automatisch im Unterformular das dazugehörige System und der Anbieter.

Was die ursprüngliche Frage der Ansprechpartner betrifft glaube ich, dass man es so lassen kann wie es ist.


Ich hoffe, dass es eine Möglichkeit ist, die Deinen Vorstellungen entspricht.


schöne Grüße

Paul1
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Kagome,

@Paul als erstes: Beziehungen zu ignorieren ist Datenbankdesigntechnisch sehr fraglich. Den genau diese Beziehungen (Relationship) und den Tabellen (entities) bilden die zu modellierende Wirklichkeit für den Anwender wieder.

Das Problem mit Anbieter und System lässt sich auf verschiedene Wege lösen:

1. schnelle Lösung: Rohrpostanbieter und Rohrpostsystem und eine ID von Typ autowert in eine Tabelle packen, Bsp RohrpostanbieterUndSysteme. In deiner Auswahlbox fügst du in die Datensatzherkunft folgendes Select-Statement ein:
SELECT ID, Rohrpostanbieter & ", " & Rohrpostsystem AS Rohrpost,
FROM RohrpostAnbieterUndSysteme;

In Format-->Spaltenanzahl gibst du dann 2 ein und bei Spaltenbreiten "0cm", um die ID-Spalte nicht anzuzeigen. In der Krankenhaustabelle würde das unter dem gebundenen Feld die ID stehen und nicht die realen Werte. Die bekommst du aber für Auswertungen über eine einfache 1:n-Beziehung wieder hergestellt. Vorteil: Korrekturen am Systemnamen oder Anbieter sind sofort aktiv. Nachteil: Bei vielen Anbietern und Systemen, kann die Tabelle sehr unübersichtlich werden. Mit einer ordentlichen Sortierung, gehts aber. Damit verhinderst zu, dass der Anwender irrsinnige Anbieter-System-Varianten eingibt, als wenn du die Tabellen separat auswählen lässt.

2. elegante Lösung: Du erstellst ebenfalls eine Tabelle wie oben beschrieben, hast aber zwei Auswahlfelder und auch zwei Felder in der Krankenhaustabelle. Im Auswahlfeld "Anbieter" gibst du nur die Anbieter aus, dazu erstellst du dir in der Datensatzherkunft das Select-Statement
SELECT Anbieter from RohrpostAnbieterUndSysteme GROUP BY Anbieter
Das System wird dann gelöscht (Ereignisprozedur siehe unten) , denn bei einer Anbietereingabe kann das System von dem vorherigen Anbieter nicht richtig sein und muss neu selektiert werden. Nach dem Anbieterwechsel in der Auswahlbox musst du nun noch die richtigen System des Anbieters den Anwender zur Verfügung stellen. Der Code im Ereignis "Vor Aktualisierung" sieht dann so aus:

Private Sub anbieter_BeforeUpdate(Cancel As Integer)
Me!system = Null
Me!system.RowSource = "Select System from RohrpostAnbieterUndSysteme where Anbieter = '" & Nz(Me!anbieter, "-") & "'"
End Sub


Probiere es aus.

Du hast ziemlich viele Tabellen erzeugt, das ist erst ein mal gut, wobei ich mir die Anredetabelle meistens erspare und in die Auswahlbox die Werte direkt rein schreibe "Herr";"Frau" und den Wert in "Herkunftstyp" auf "Werteliste" setze.

Ist die RohrpostNennweite über alle Anbieter hinweg genormt?

Die Ansprechpartner in der Krankenhaustabelle zu belassen, halte ich für richtig.

Gruß
Ralf
0 Punkte
Beantwortet von
Hallo Ralf,

vielen Dank!

Ich glaube, ich habe ein Problem mit den Beziehungen.
Also, ich habe bereits in der Tabelle:Krankenhäuser zwei Felder, Feld:RP_Anbieter, Feld:RP_System.

Meine Tabellen sehen momentan so aus:

Tabelle:Krankenhaus
Feld:ID (AutoWert, Primär)
Feld:Name (Text)
Feld:Anbieter (Zahl, LongInteger) --> n:1 Beziehung zu Tabelle:Anbieter, Feld:ID
Feld:System (Zahl, LongInteger) --> n:1 Beziehung zu Tabelle:System, Feld:ID

Tabelle: RPAnbieter
Feld:ID (Primär)
Feld:Anbietername (Text, indiziert)

Tabelle:RPSystem
Feld:ID (AutoWert, Primär)
Feld:SystemName (Text, indiziert)

Bisher habe ich in Tabelle:System ein weiteres Feld:ImpRPAnbieter als Zahl gehabt und eine n:1 Beziehung zur Tabelle:Anbieter, Feld:ID erzeugt. Kann ich diese entfernen??

Ich habe aber das Gefühl das dies falsch ist.

Du sagtest ja, ich solle eine weitere Tabelle erstellen.
Tabelle: RPAnbieter+System
Feld:ID (AutoWert, Primär)
Feld:AnbieterName (Zahl, LongInteger) --> n:1 Beziehung zu Tabelle:Anbieter, Feld:ID
Feld:SystemName (Zahl, LongInteger) --> n:1 Beziehung zu Tabelle:System, Feld:ID

Ist das so richtig? Mit welcher Tabelle, Feld verknüpfe ich denn dann die Tabelle:RPAnbieter+System. Mit der Tabelle:Krankenhäuser und Feld:RPAnbieter??

Ich hoffe ihr versteht ein wenig mein Beziehungsgeflecht...

Hier nochmal mein eigentliches Anliegen:
Es soll im Formular ausgewähtl werden, welcher Anbieter beim Kunden tätig ist und zuzätzlich das System welches installiert wurde. Jeder Kunde hat nur ein Anbieter. Es gibt aber mehrere Anbieter. Jeder Kunde hat nur ein System, aber jeder Anbieter hat natürlich mehrere Systeme. Ich möchte also, wenn Anbieter XX ausgewählt wird, dass man dann in einem weiteren Auswahlfeld die verschiedenen Systeme des Anbieters auswählen kann. Es sollen aber natürlich nur die Systeme des ausgewählten Anbieters angezeigt werden.

Danke für Eure Unterstützung!
0 Punkte
Beantwortet von
Hab ich noch vergessen:

RPNennweiten sind über alle Anbieter hinweg genormt.
Also es gibt nur NW63, NW75, NW90, NW110, NW 124, NW160, und NW200.
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Kagome,

deine Tabellen und Beziehungen sehen doch jetzt gut aus. Die neue Tabelle mit den Zuordnungen von Anbieter und System ist notwendig, da du ja nur die Systeme des ausgewählten Anbieters auswählen möchtest. Das kann das Programm nicht riechen, somit ist die Tabelle notwendig. Die Systeme und die Anbieter in getrennten Tabellen zu halten ist aufwendiger, aber eine gute Idee. Dafür kannst du dir ja ein einfaches Endlosformular bauen, um diese Zuordnungen administrieren zu können.
Aus deinen Zeilen entnehme ich, dass du gerne die "elegante" Variante realisieren willst. Finde ich gut, da heut zu Tage dem Anwender in Formularen oft unsinniger Schrott angeboten wird. Im Prinzip habe ich das Vorgehen schon beschrieben, jedoch nicht, hatte ich nicht über die IDs referenziert sondern direkt über die Namen (für Anbieter und System). Deshalb hier die Lösung über deine IDs
Ich gehe davon aus, dass du eine Tabelle RSAnbeiterUndSysteme wie von dir beschrieben angelegt hast und die Systeme den Anbietern entsprechend zugeordnet hast. Ich habe statt Anbietername das Feld AnbieternameID genannt, sonst ist das etwas verwirrend, entsprechend beim Systemfeld.


Ich habe die Felder mal gefüllt, wie es nach deinen Angaben aussehen müsste:


RPAnbieter:

ID AnbieterName
1 Swisslog
2 Aerocom
3 Sumetzberger

RPSystem:

ID Systemname
1 TranspoSmart
2 TranspoNet
3 AC 3000
4 PowerControl
5 Unbekannt

RPAnbeiterUndSystem:

ID AnbieternameID SystemnameID
1 1 1
2 1 2
3 1 5
4 2 3
5 2 5
6 3 4
7 3 5

In der Beziehungsdefinition habe ich ein Beziehungen mit referenzieller Integrität von der ID des Anbieters zu der entsprechenden ID in der Tabelle Krankenhaus und zur Tabelle RSAnbieterUndSystem definiert, entsprechend auch für die SystemID.

In deinem Krankenhausformular hast du neben dem "Krankenhausnamen" die Auswahlfelder "Anbieter" und "System" und was du sonst noch so brauchst angelegt und mit den entsprechenden Felder der Tabelle Krankenhaus verknüpft.

So, das ist jetzt die Ausgangssituation für die weiteren Einstellungen.

1. Als Datenherkunft für die Anbieter hinterlegst du einfach die Tabelle RSAnbieter, gebundene Spalte = 1, im Format stellst du Spalenanzahl auf "2" und die Spaltenbreite auf "0cm".

2. Den System hinterlegst du erst einmal gar nichts, das machen wir nach der Auswahl eines Anbieters im Modul. Du stellst allerdings das Feld gebundene Spalte = 1, im Format stellst du Spalenanzahl auf "2" und die Spaltenbreite auf "0cm", wie beim Anbieterfeld.

3. Beim Anbieterfeld gehst du Auf den Reiter "Ereignis"und wählst bei "Vor Aktualisierung" die Auswahl "Code Generator" bzw. aus der Auswahlbox "[Ereignisprozedur]" und gehst in VB über "..."

4. Die VB sollte der Eintrag dann so aussehen:

Private Sub Anbieter_AfterUpdate()
Me!System.RowSource = "SELECT t1.ID, t1.Systemname from RPSystem t1 inner join RPAnbieterundSystem t2 on t1.ID = t2.SystemnameID where AnbieternameID = " & Me!Anbieter
Me!System = Null
End Sub

Danach schließt du den VB-Editor

So was passiert jetzt. Sobald du einen Anbieter auswählst wird das Feld System gelöscht (sofern was drin stand) und die Systeme des Anbieters (und nur diese) stehen dir zur Auswahl.

Probiere es aus. Achte auf meine Feldnamen, die musst du ggf deiner Definition anpassen. Ich habe es so implementiert und erfolgreich getestet.
Viel Erfolg. Sollte es nicht passen, melde dich.

Gruß
Ralf
...