PDA

Vollständige Version anzeigen : Datenbankstruktur


Julietta
26.09.2003, 13:57
SQL Server, Acces- Projekt XP

Halli hallo,
ich stehe vor einer Entscheidung, ob ich meine Datebankstruktur ändern muss oder nicht.
Ich hänge unten die jetzige DB Struktur dran.
Dazu erkläre ich kurz:
Die Tabelle tblHardware enthält alle Hardware einer Firma.
In jedem Datensatz steht auch, welcher Kostenstelle sie zugeordnet ist.
(z.B. ein Schulungsrechner, der von ganz vielen Leuten benutzt wird.)
in manchen Datensätzen steht auch eine UserID, falls der Rechner neben der Kostenstelle auch einer ganz bestimmten Person zugeordnet ist.
Dieses Feld ist also nicht immer gefüllt und gleichzeitig die Verknüpfung zur Tabelle mit allen Mitarbeitern.
Wenn ich mir nun in einem Unterformular alle Hardware anzeigen lassen möchte inklusive der Personen, denen sie ggf. zugeordnet sind, habe ich ein Problem.
Es wird nur die Hardware aufgelistet, die auch einer Person zugeordnet ist und nicht nur einer Kostenstelle, diese sehe ich dann nämlich nicht. Die Übersicht ist also nicht vollständig.
Muss ich, um das zu umgehen, eine kleine Tabelle einbauen, die nur die HardwareID- UserID Zuordnung enthält, und dann die Spalte UserID aus der Tabelle Hardware rausschmeissen?

Ich wäre sehr glücklich, wenn jemand einen Tip für mich hat!!
Vielen Dank im Voraus
Julia

Paul.Ostermeier
26.09.2003, 14:08
am wenigsten Arbeit hättest Du, wenn Du einen User "Catchall" anlegst, dem Du dann bezogen auf eine Kostenstelle alle nicht einem Mitarbeiter zugeordnete Hardware zuordnest .....

ansonsten wirst Du zusätzliche Zuordnungstabellen einführen müssen, Du kannst ja mal das Forum nach dem Stichwort "Normalisierung" durchsuchen

J_Eilers
26.09.2003, 14:12
Hallo,

IMO brauchst du dafür nichts zu verändern. Evtl solltest du den Standardwert dort auf 0 stellen. Da ich nicht weiß, wie deine Abfrage lautete kann ich nur raten, aber versuche doch mal ob du mit einem "*" weiter kommst oder dir vielleicht ein UNION etwas bringt.
HTH

Julietta
26.09.2003, 14:30
Hallo,
ich habe jetzt mal nach der Normalisierung gesucht, ist ja ein schwieriges Thema..
Ich denke, es ist grundsätzlich nicht gut,Null Felder zu haben..
aber vielleicht habe ich wirklich noch nicht alles probiert, um die Abfrage erfolgreich hinzubekommen.
Wenn ich statt Null in die Felder der UserID eine 0 eintragen würde, dann ginge das doch nur, wenn es auch einen Dummie User gäbe, der die ID 0 besitzt, oder?
Die UserID ist ein Autowert bei mir, geht das dann überhaupt so?

Ich werde wohl noch ein bißchen mit der Abfrage herumbasteln..

Vielen Dank
Julia

Nouba
26.09.2003, 15:33
Paul scheint mit seinem Statement schon richtig zu liegen. Du könntest ja mit Deiner Struktur ganz komische Konstellationen erstellen. Mitarbeiter A gehört Kostenstelle Z an. Die Hardware wird der Kostenstelle Y zugeordnet und erhält als User den Mitarbeiter A zugewiesen. Darf, kann oder muß das so sein?

Julietta
01.10.2003, 11:33
Hallo,
bitte entschuldigt, dass ich mich so spät melde...
Es soll nicht so sein, dass oben genannte Logikfehler auftreten können..
mit den Kostenstellen, Mitarbeitern und Hardware.
In meinem Programm ist es so, dass eine Hardware eine Kostenstelle haben muß.
Dann kann man die Hardware einem Mitarbeiter einer anderen Kostenstelle zuordnen und automatisch wird dann die Kostenstelle der Hardware auf die Kostenstelle des Mitarbeiters geändert.Zusätzlich wird dann in der Spalte UserID der Hardware der neue Mitarbeiter eingetragen.
Wenn ich das so programmintern behandele ist das doch in Ordnung, oder??
Blöd ist eben nur, dass nicht jede Hardware einen User hat, also Nullfelder in der Spalte entstehen.
Da bekomme ich Abfrageprobleme, aber ich werde mir ein Programmierbuch kaufen und sehen, ob ich nur nicht den richtigen Befehl kenne, um mir alle Hardware inklusive der UserNamen aus einer gejointen Tabelle anzeigen zu lassen.
Falls einer von Euch einen Supertip hat, her damit!
Und vielen Dank
Julia

khs-hh
01.10.2003, 11:39
Genau dieselben Probleme haben wir mit unserer Inventarverwaltung auch.

Nicht jeder PC ist einer Person zuzuordnen. Und damit hat man keine Kostenstelle.

Wir haben das so gelöst, dass es alternativ eine Raum-Tabelle gibt. Die Räume sind ebenfalls mit Kostenstellen versehen.

Die Inventargegenstände können sowohl einer Person als auch einem Raum zugeordnet sein. beides ist optional.

Ich weiss, dass das nicht optimal ist, aber mir fällt keine bessere Lösung ein.

Julietta
01.10.2003, 11:52
Das ist bei mir so,
Jeder PC hat eine Kostenstelle, entweder die gleiche wie sein Benutzer, die des Kellers, wenn er gar nicht genutzt wird oder die des Bereiches, in dem er benutzt wird, wenn er keinen genauen User hat.
Das sind dann Schulungs PCs und so weiter.
Da ist das Problem nicht, aber wenn ich nun in der Hardwaretabelle einen PC habe, der eine Kostenstelle hat aber keinen User ( Schulungspc)
und einen PC, der eine Kostenstelle und einen User hat.
Dann möchte ich mir in einer Abfrage alle PC's anzeigen lassen. Bei denen die einem Mitarbeiter zugeordnet sind, soll auch der Username aus der Tabelle Mitarbeiter angezeigt werden. Also ein Join.
Bei mir werden dann aber nur die PC's angezeigt, die auch einem Mitarbeiter zugeordnet sind, bei denen Access in der Join Tabelle ein Gegenstück findet.
Vielleicht werde ich auch einen Dummieuser einrichten, damit alle PC's immer auch einem User zugeordnet sind, aber ich habe das blöde Gefühl, dass es nicht die sauberste Lösung ist.
Was denkst Du?
Julia

Julietta
01.10.2003, 12:04
Hallo,
ich glaube, ich habs, mit einem Left Join müsste es gehen!!
Werde es jetzt mal ausprobieren!
Julia

Julietta
01.10.2003, 12:08
Ja, so klappts,
in der Abfrage auf die Verbindung gehen, Eigenschaften und dann
die Hardwaretabelle, also die mit den Null Feldern mit einbeziehen.
Falls es jemanden interessiert!
Julia