Hallo,
der Betreff sagt eigentlich schon alles.
In angehängter Access-DB (erstellt mit Access 2013) möchte ich eine Abfrage generieren:
a) welche mir alle Betriebsmittelnummern auflistet
b) welche Objekte besitzen
c) welche den Status "Verschrottung geplant" haben.
Die hierzu bereits erstellte Abfrage "A_Fehler" zeigt mir allerdings keine Ergebnisse an.
Fragen:
a) Warum wird nichts angezeigt?
b) Wie sieht die Lösung aus?
Danke schon mal im voraus!
Hallo,
zunächst und vor solchen "Auswertungen" sollten der Tabellenaufbau entsprechend den Normalisierungsregeln geändert und die Beziehungen korrekt erstellt werden...
Hallo nochmal,
leider verstehe ich nur Bahnhof.
Ich finde weder einen Fehler im Tabellenaufbau (Normalisierung) noch in den Beziehungen. (Bei letzteren habe ich noch ein bisschen rumgespielt - aber ehrlich gesagt weis ich nicht was da richtig und was falsch ist.)
Ich bitte um Erleuchtung. ;D
Danke und Gruß
tg
Moin,
die Erleuchtung kommt dir vielleicht, wenn du dich durch die Links in Franz's Fussnote durch arbeitest.
Hallo,
konkret meint Jürgen u. st. Links 1 und 1a.....
Fehler: Aufzählungsfelder in Tabellen. (Objekt_xx_ID, Objekteigenschaft_1, Objekteigenschaftenname_1). Diese gehören als einzelnes (Fremdschlüssel-) Feld zur Aufnahme des Primärschlüsselwertes aus einer dazu in Beziehung stehender Tabelle ausgeführt. Die Beziehungen sind auf referenzielle Integrität einzustellen (was im vorliegenden Fall die Missachtung von Datentypen aufzeigt).
Zudem: bessere Benamsung wäre von Vorteil. Felder so benennen, dass deren Namen eindeutig wird und nur einmalig in den gesamten Tabellen vorkommt.
Hallo nochmal,
Danke für die Info's.
a) zuerst der leichtere Punkt - "Bessere Benennung":
Ich hab auf folgender Seite etwas bezüglich den Beziehungen rumgelesen.
http://www.access-entwicklerbuch.de/2007/index.php?page=buch&bookpage=Kap_02/01_05.html
Gleich im ersten Bild sieht man da auch die Namen "KundeID" doppelt.
Wenn man den Namen nicht doppelt verwenden soll folgende Frage bezüglich der Benennung:
Was hat sich da "üblicherweise eingebürgert"
"Kunde" und "Kunde_ID"?
Falls ja - kann ich anhand von "Kunde" nicht so leicht erkennen, dass das Feld auf eine andere Tabelle referenziert.
Also - wie macht Ihr das?
b) Im Anhang eine weitere Version der Datenbank. (Test_2)
Darin habe ich die Geschichte mit der "Nachschlagen"-Registerkarte so wie im oben bereits genannten Link verändert. (Bild 2.19)
Ist das ok so?
c) Der schwerste Punkt - Die Geschichte mit dem Fremdschlüssel, Referentieller Integrität und die in Bezug stehende Tabelle.
Hab ich bislang noch nicht gecheckt - ich arbeite dran... ;D
Melde mich nochmal, wenn ich mehr weis...
Hallo nochmal,
leider komme ich in der Sache nicht wirklich weiter. :P
Geändert habe ich die Referentielle Integrität von "T_Objektname" und "T_Status". Ich denke das ist gut so. (siehe Bild im Anhang)
Was ich aber nicht verstehe ist die Geschichte mit "Diese gehören als einzelnes (Fremdschlüssel-) Feld zur Aufnahme des Primärschlüsselwertes aus einer dazu in Beziehung stehender Tabelle ausgeführt."
Könnt Ihr mir da nochmals helfen?
Danke und Gruß
tg
Hallo,
ich halte die Struktur der Tabellen so wie diese jetzt sind für völlig untauglich bzw. unbrauchbar.
Was bedeuten die Felder Objekt_01_ID, Objekt_02_ID und Objekt_03_ID ?
Was bedeuten die Felder mit den Objekteigenschaften 1- 3 in den Objekttabellen.
Kann ein Objekt der Tabelle "T_Objekt" mehrere Objektnamen haben, so ist das nämlich bei Dir eingerichtet.
Was sind denn die 3 Objekteigenschaften im Klartext ?
Erkläre das Vorhaben mal im ganzen Zusammenhang.
Und lade die DB mal im MDB (Access2003) Format hoch. Ich habe nur das ältere Access und kann ACCDBs nicht ansehen.
Ein Objekt hat mehrere Betriebsmittelnummern - umgekhrt wäre es eher denkkbar aber nicht notwendig.
Ich lade mal für den Klaus die DB (ohne die Formulare) hoch.
Hallo,
@Lachtaube
Hast Du da schon Hand angelegt, die Beziehunegn haben ja alle RI ?=
@tg
Bitte erkläre trotzdem erst mal die Zusammenhänge.
Hallo,
die Tabellen haben in der MDB-Datei jetzt datentypmäßig mit ref. Int. einstellbare Beziehungen, trotzdem ist die ganze Tabellenkonstruktion so nicht brauchbar. Die Auflistungs-Felder müssen in zusätzliche (m:n) Tabellen(!) ausgelagert werden.
Ich habe einige Nullen (0) entfernt, sowie zwei 2 Datensätze in die Objekte eingetragen, damit die RI einstellbar ist. Ebenso habe ich noch Nachschlagefelder gelöscht.
Hallo nochmal,
vorab Danke für die rege Diskussion. ;)
Ich versuche die Geschichte mal allgemein zu erklären:
a) Ein Betriebsmittel wird aus verschiedenen Objekten zusammengebaut.
(Beispiel: Ein Auto besteht aus verschiedensten Einzelobjekten)
b) Jedes Einzelobjekt hat dabei aber verschiedene spezifische Eigenschaften.
(Beispiel: Ein Verbrennungsmotor hat z.B. eine Leistungsangabe in kW.
Eine Schraube hat keine Leistungsangabe in kW, dafür aber z.B. eine exakte Schraubenbezeichnung.
c) In der Tabelle "T_Objektnamen" lege ich grundsätzlich fest, welche Objekttypen es gibt (z.B. Verbrennungsmotor, Schraube, Elektromotor, Cabrio-Verdeck) und welche speziellen Objekteigenschaften diese Objekttypen haben. (z.B. Kraftstoffart (Diesel / Benzin), Schraubenbezeichung, Wirkungsgrad in %, Verdeckfarbe)
d) Je nachdem welchen Objekttyp ich nun in auswähle, werden mir stets die dafür dazugehörigen spezifischen Objekteigenschaften angezeigt.
e) Wenn ich das Betriebsmittel anzeigen lasse, werden mir sowohl die einzelnen Objekte, als auch die dazugehörigen Objekteigenschaften angezeigt. (man könnte es auch als Stückliste bezeichnen)
Ich hoffe die angehängten Bilder erklären die Geschichte nochmals besser. Die DB habe ich in dieser Version ebenfalls nochmals angehängt. (Test_3) Weiterhin habe ich die Geschichte auch nochmals als mdb-Datei angehängt. (Ich hoffe die Konvertierung ins 2003er Format funktioniert einigermaßen...)
P.S. Die Geschichte mit den m:n-Tabellen probier ich morgen aus. So richtig klar ist mir bislang nicht, warum ich das machen muss. Ebenfalls weis ich noch nicht, wie das exakt gemacht wird. (vor allem welche Felder dann miteinander in Beziehung gesetzt werden.)
Aber wie gesagt -> Morgen!
Danke und Gruß
tg
Hallo,
hier ein Vorschlag:
Hallo,
Danke für den Vorschlag!
Ich hab Ihn schon versucht ihn ein bisschen zu analysieren - bin bislang aber noch nicht durchgestiegen.
Heute habe ich keine Zeit mehr mich damit zu befassen.
Ich melde mich im Laufe der Woche nochmal.
Danke und Gruß
tg
Hallo,
also - ich check's nicht. ???
Basierend auf dem Vorschlag von "DF6GL" folgendes:
- Bei meiner Datei kann ein Betriebsmittel mehrere Objekte (oder auch nur eines etc.) haben.
- Beim Vorschlag kann das Betriebsmittel aber nur ein Objekt haben - korrekt? Falls nein - wo werden die anderen Objekte gespeichert?
- Bei meiner Datei kann ein Objekt mehrere Attributnamen und Attribute (Objekteigenschaftennamen und Objekteigenschaften) haben.
- Beim Vorschlag kann ein Objekt nur ein einziges Attribut haben - korrekt? Falls nein - wo werden die anderen Attribute gespeichert?
- Wozu dient eigentlich die Tabelle "T_Einheiten"? (Zur Angabe von z.B. mm, m, Watt, etc.?)
- Wenn ich später ein Formular zur Eingabe von einzelnen Objekten mache, worauf basiert dann dieses Formular?
a) Auf "T_Objekte" oder b) "T_ObjAttribute"
- Wenn ich später ein Formular zur Eingabe der einzelnen Betriebsmittel mache, worauf basiert dann dieses Formular?
a) Auf "T_Betriebsmittel" oder b) "T_BMOjbekte"
Danke schon mal im voraus und Gruß
tg
Hallo,
die Objekte, zu zu einem Betriebsmittel gehören, werden in T_BMObjekte (BetriebsmittelObjekte) gespeichert. Dazu kommt der Status (von dem ich nicht weiß, ob er dafür gedacht ist)
Die Gesamtheit aller Objekte wird in T_Objekte abgelegt. In dieser Tabelle steht lediglich der Name des jeweiligen Objektes. Die nötigen anderen Eigenschaften (Attribute) sind in der folgenden Tabelle hinterlegt
Jedes Objekt kann ein oder mehrere unterschiedliche Attribute (Eigenschaften) haben (T_ObjAttribute). Jedes Attribut bekommt einen Namen, einen Wert und eine Einheit zugewiesen.
Hallo,
ZitatBeim Vorschlag kann das Betriebsmittel aber nur ein Objekt haben - korrekt?
nein, Deine Annahme ist falsch. Einem Betriebsmittel können über die n:m Tabelle "T_BMObjekte" beliebig viele Objekte zugeordnet werden. In jeweils einem Datensatz.
ZitatBeim Vorschlag kann ein Objekt nur ein einziges Attribut haben - korrekt?
auch diese Annahme ist falsch. Antwort sinngemäß wie bei den Objekten.
ZitatWozu dient eigentlich die Tabelle "T_Einheiten"? (Zur Angabe von z.B. mm, m, Watt, etc.?)
ja, genau für die Einheiten. Die Einheitentabelle sollte aber mit den Attributen verknüpft werden, nicht wie im Vorschlag.
Zitatworauf basiert dann dieses Formular? a) Auf "T_Objekte" oder b) "T_ObjAttribute"
Auf "T_Objekte". In diesem Formular kannst Du Objekte erfassen und in einem Unterformular die Attribute dazu. Das Ufo basiert "T_ObjAttribute" und mit einem Kombi werden die Attribute zugeordnet.
Für die Erfassung der Objekte zum Betriebsmittel wird ebenfalls eine Hafo-Ufo Aufbau benötigt.
Nachtrag:
Im Anhang findest Du eine ähnlich aufgebaute DB zur Erfassung von unterschiedlichen Merkmalen (=Attribute) zu einem Werkzeug. Das Prinzip ist genau so wie Du das brauchst.
Hallo,
ZitatDie Einheitentabelle sollte aber mit den Attributen verknüpft werden, nicht wie im Vorschlag.
Das stimmt....
Es könnte aber sein, dass dasselbe Attribut mit unterschiedlichen Einheiten (Dimensionen) daherkommt. z.B. m und km, Std und Min, oder dergleichen...
Sicherlich könnte diese Situation auch über einen Umrechnungsfaktor als Zusatz-Tabellenfeld oder eine Umrechnungstabelle erschlagen werden, ist aber in der hier dargestellten Aufgabe vermutlich nicht erforderlich und sorgte für noch mehr Verwirrung... ;)
Hallo nochmal,
um mir nur mal die n:m-Beziehungen etwas genauer anzusehen, habe ich eine kleine Datenbank - siehe Anhang - erstellt. (enthält die drei Tabellen: Kunde, Produkt, Bestellung)
Grundsätzlich funktioniert die Geschichte. Allerdings ist es doch so, dass ich bei einer Bestellung nur einen Artikel kaufen kann. (siehe Formular: F_Bestellung -> ok / F_Bestellung_mehrfach -> nicht ok)
Wie also kann ich mehrere Dinge in einer Bestellung haben?
Danke und Gruß
tg
Hallo,
"Produkt_FS" gehört nicht in die Tabelle "Bestellungen".
Dafür brauchst du in "T_Produkt" ein "Bestellung_FS".
gruss ekkehard
Hallo,
ZitatWie also kann ich mehrere Dinge in einer Bestellung haben?
Mit nur 3 Tabellen gar nicht. Es fehlt also eine 4.Tabelle zur Aufnahme der Produkte.
- tblKunde
- tblBestellung (FS zum Kunden)
- tblProdukte
- Bestellpositionen (FS zum Produkt, FS zur Bestellung, Menge)
Erst die 4.Tabelle ermöglichst eine n:m Beziehung. Eine n:m Beziehung beinhaltet immer zwei 1:n Beziehungen. In dem Beispielbeziehungsbild von Franz sind die Tabellen mit den 3 Fremdschlüsseln die n:m Tabellen. Genau genommen müssten hier 3 Buchstaben verwendet werden. Macht nur keiner. Also so: n:m:o. Eigentlich trifft es n:n:n auch. Aber wie gesagt man spricht da meist von n:m wenn es mehr als ein FS in einer Tabelle sind.
FS=Fremdschlüssel.
Da ich nur Access2003 habe, kann ich mir das Beispiel nicht ansehen. Kann das jemand zu einer MDB konvertieren ?
Hallo Klaus,
.MdB anbei.
Du hast natürlich recht, geht nur mit einer vierten Tabelle.
Ich hab mal wieder gar nicht richtig hingesehen und hab die T-Produkte als die
Positionentabelle gesehen, was im Nachhinein völlig unlogisch ist >:(
gruss ekkehard
Hallo,
geänderte DB (MDB) anbei.
Hallo,
Vielen Dank für die mdb-Datei!
Damit kann ich schon mal rumspielen...
Gruß
tg