Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

eineindeutige Nummer erstellen

Begonnen von GonzoWiefel, Dezember 12, 2022, 16:57:08

⏪ vorheriges - nächstes ⏩

GonzoWiefel

Hallo Ihr Lieben,
habe folgendes Problem: Ich habe drei Tabellen: Akte, Vorgang, Dokument. Die Akte hat eine Anzahl von vorher bestimmten Ordnungsgruppen. Diese wird über ein Kombifeld eingetragen. Es kann mehrere Akten mit gleicher Ordnungsgruppe geben. Diese sollen folgendermaßen gezählt werden: "[Ordnungsgruppe]-[Zähler]". Innerhalb einer Akte könnne verschiedene Vorgänge angelegt werden. Jeder Vorgang zählt innerhalb der Akte immer wieder von 1, also nicht übergreifend fortlaufend. Dieser Zähler soll dann so aussehen: [Ordnungsgruppe]-[Zähler]-[Zähler Vorgang]. Für das Dokument soll das dito zum Vorgang passieren. Es kommt also noch ein Zähler dazu und man hat bis auf das Dokument eine eineindeutige Nummer zu diesen (leider) vorgegebenen Bedingungen.
Ich habe nun schon versucht, Datensätze mit gleichen Ordnungsgruppen in einer Abfrage zu gruppieren und zu zählen. Das funktioniert zwar aber der gezählte Wert kann nicht (von mir) einem bestimmten Datensatz zugeordnet werden. Ich arbeite seit über 20 Jahren mit Access, kann Tabellen verknüpfen und Unterdatenbanken anlegen, auch Abfragen sind mir nicht fremd, hab mit jetzt extra noch ne fette Access-Schwarte gekauft, aber das überfordert mich irgendwie. Kann mir jemand helfen....? 

Beaker s.a.

Hallo,
Das ist doch eine ganz einfache Hierarchie mit 4 Tabellen:
Ordnungsgruppen 1:n Akten 1:n Vorgänge 1:n Dokumente

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

markusxy

Zitat von: GonzoWiefel am Dezember 12, 2022, 16:57:08Jeder Vorgang zählt innerhalb der Akte immer wieder von 1, also nicht übergreifend fortlaufend.

Eine fortlaufende Nummer würde ich dennoch als PK verwenden.
Du kannst dann in einer zusätzlichen Spalte eine Nummer verwenden die quasi als "Gruppen-ID" dient und immer wieder von 1 beginnt.
Die "Gruppen-ID" kann man dann ja sehr einfach mittels Abfrage ermitteln.
Sollte die "Gruppen-ID" änderbar sein, oder ID's auch gelöscht werden können, ist etwas mehr Aufwand erforderlich.



GonzoWiefel

Wie meinst du das? Wie zählt die Gruppen-ID hoch? Auto-Wert? Sorry, keinen Schimmer...

GonzoWiefel

Zitat von: Beaker s.a. am Dezember 12, 2022, 18:19:05Das ist doch eine ganz einfache Hierarchie mit 4 Tabellen:
Ordnungsgruppen 1:n Akten 1:n Vorgänge 1:n Dokumente

eben nicht, weil immer wieder mit 1 gezählt werden soll!

Josef P.

#5
Hallo!

Theoretisch würde folgendes passen:

Tabelle Ordnungsgruppe:
- Ordnungsgruppe (PK)
- ...

Tabelle Akten
- Ordnungsgruppe
- AktenNr
- ...
PK: Ordnungsgruppe + AktenNr
FK: Ordnungsgruppe = Ordnungsgruppe(PK)

Tabelle Vorgänge
- Ordnungsgruppe
- AktenNr
- VorgangNr
- ...
PK: Ordnungsgruppe + AktenNr + VorgangNr
FK: Ordnungsgruppe + AktenNr  aus PK von Akten

Tabelle Dokumente
- Ordnungsgruppe
- AktenNr
- VorgangNr
- DokumentNr
- ...
PK: Ordnungsgruppe + AktenNr + VorgangNr + DokumentNr
FK: Ordnungsgruppe + AktenNr + VorgangNr aus PK von Vorgänge

Vielleicht ist es mit einem Surrogat-Schlüssel als PK kompakter. Die Eindeutigkeit ist über einen zusammengesetzen Index (unique key) zu erzwingen. (Kann auch als FK genutzt werden, um die Abhängigkeit sicherzustellen.)

Die Struktur könnte auch so aussehen:
Tabelle Ordnungsgruppe:
- idOrdnungsgruppe  (Autowert, PK)
- Ordnungsgruppe (Kennung)
- ...

Tabelle Akten
- idAkte (Autowert, PK)
- fiOrdnungsgruppe (FK zu Ordnungsgruppe.idOrdnungsgruppe)
- AktenNr
- ...
unique index: fiOrdnungsgruppe + AktenNr

Tabelle Vorgänge
- idVorgang (Autowert, PK)
- fiAkte (FK zu Akten.idAkte)
- VorgangNr
- ...
unique index: fiAkte + VorgangNr

Tabelle Dokumente
- idDokument (Autowert, PK)
- fiVorgang (FK zu Voränge.idVorgang)
- DokumentNr
- ...
unique index: fiVorgang + DokumentNr

Das +1 beim Einfügen eines neuen Datensatzes sollte dann eigentlich nicht das große Problem sein. Durch den PK bzw. unique key ist die Eindeutigkeit sichergestellt.

Gruß
Josef


markusxy

Zitat von: GonzoWiefel am Dezember 12, 2022, 21:53:56Wie meinst du das? Wie zählt die Gruppen-ID hoch? Auto-Wert? Sorry, keinen Schimmer...

Na ja, es gibt den PK - eine AutoID, dann den Fremdschlüssel, und eine Byte Spalte (falls das ausreicht) mit einer laufenden Nummer die für jeden Fremdschlüssel immer bei 1 beginnt. Hast du etwa noch nie eine laufende Nummer erzeugt?
Gibts doch eh genug Beispiele dafür, falls du da trotz deiner Erfahrung fremde Hilfe benötigst.
Einen zusammengesetzten Schlüssel wie Josef es erwähnt wäre natürlich eine Alternative.
Sollte man aber nur machen, wenn sich die laufende Nummer sicher nie ändert.

ebs17

Für die Struktur würde ich auch den Mehr-Ebenen-JOIN, den Michael Zimmermann in Performance in Abfragen auf den Seiten 16 bis 18 beschreibt, in den Ring werfen.
Damit hätte man in jeder Tabelle auch sichtbar die zutreffende Hierarchie vollständig vorhanden, was einem intuitiven Verständnis sicher wohltut. Vor allem aber hätte man weniger Abfrageaufwand durch Einsparung von zu formulierenden JOIN's.
Mit freundlichem Glück Auf!

Eberhard

GonzoWiefel

das scheint genau das zu sein, was sich meine. Ich weiß zwar noch nicht, was ein JOIN ist, aber wenn ich mir auf Seite 17 die Tabellen ansehe, scheint das genau die Lösung meines Problems zu sein...

markusxy

Zitat von: GonzoWiefel am Dezember 13, 2022, 14:42:23Ich weiß zwar noch nicht, was ein JOIN ist

vs

Zitat von: GonzoWiefel am Dezember 12, 2022, 16:57:08Ich arbeite seit über 20 Jahren mit Access, kann Tabellen verknüpfen und Unterdatenbanken anlegen, auch Abfragen sind mir nicht fremd

wtf  :o

manchmal bin ich über solche User doch etwas verwirrt.

MzKlMu

Hallo,
ZitatIch weiß zwar noch nicht, was ein JOIN ist
Lasse Dir mal JOIN aus dem Englischen übersetzen, dann weist Du was ein JOIN ist.
Gruß Klaus

GonzoWiefel

#11
@markusxy: Das ist gar nicht so abwegig. In meiner 30jährigen Tätigkeit wurde mir in größeren Abständen die Aufgabe übertragen, fertige csv-Datenbestände über nen Schlüssel zu verknüpfen, dafür Formulare zu erstellen, Abfragen zu formulieren, etc..., so dass die Sachbearbeiter mit den Datenmengen gescheit arbeiten konnten. Angefangen habe ich mit Access97, über 2000, 2010, 2016, 2019, 365 bis jetzt  zu Access2021. Wie gesagt, das waren immer fertige, größere Datenbestände mit mehreren hundertausend Datensätzen und es gab netterweise schon fast immer einen eineindeutigen Schlüssel (Matrikelnummer). Die Herangehensweise war da meist learning by doing. Meine Arbeit ist im allgemeinen mehr die Hardware und unser Netzwerk. Da ich aber in unserem Bereich der einzige ITler bin, muss ich da immer ran. Und dieses Problem mit mehreren Zählern, die eben immer neu zählen müssen, hatte ich eben bisher noch nicht. Ich muss aber trotzdem ran...
Deshalb bin ich dankbar für jede Hilfe...
Mann kann zwar sagen, dann soll doch der Chef mal Geld in die Hand nehmen und das Leute machen lassen, die das können. Ist aber öffentlicher Dienst. Das wäre also euer aller Geld... ;)

ebs17

Vielleicht wirfst Du mal einen verstohlenen Blick in ein Tutorial: SQL Joins
Mit freundlichem Glück Auf!

Eberhard