Post by m***@public.gmane.orgHallo Martin,
Post by Martin TrautmannPost by Thomas Mack... WHERE ... AND valid_until >= [heute]
schreiben zu können. Das funktioniert aber nicht bei "zeitlichen
Punktdaten", die halt für einen bestimmten Stichtag gültig sind,
wie z.B. Bevölkerungszahlen. Wie gehe ich damit um?
- Datum der ersten Gueltigkeit
- Datum der letzten, verifizierten Gueltigkeit
- Markierung: ist (weiterhin) gueltig
Hehe: das mag ja formal recht korrekt sein, aber gerade bei
Bevölkerungsdaten doch eher utopisch, wenn man nicht gerade
seinen eigenen Haushalt mit eintragen will.
Ich glaube, hier liegt ein Missverständnis vor!?
Post by m***@public.gmane.orgNatürlich kann ich eintragen, daß Bad Harzburg am [...] 23.709 Einwohner
hatte, aber dann noch herauszufinden, wie lange diese Zahl gültig war
(wahrscheinlich bis zum nächsten darauffolgenden Werktag?), das ist
nicht durchführbar.
Nach meiner praktischen Erfahrung brauche ich fast nie ein
vorausschauendes Datum, wann eine Gültigkeit enden wird. Die meisten
Daten brauchen nur den Zeitstempel als Referenzpunkt, wann sie
(einmalig) gültig waren.
Viele Daten sind aber über einen längeren Zeitraum hinweg gültig. Bei
denen kennt man womöglich in vielen Fällen den genauen Zeitpunkt, ab
wann sie gültig wurden - ein eindeutiger Eintrag als Datum der ersten
Gültigkeit.
Bei vielen Infos weiss man aber nur, dass sie zumindest zu einem
bestimmten Zeitpunkt gültig waren - die Vorgeschichte ist unbekannt.
Das Datum der ersten Gültigkeit ist also kleiner-gleich zu diesem
bekannten Zeitpunkt.
Diese Daten können immer wieder überprüft werden - und damit ergibt
sich entweder eine Liste von geprüften Zeitstempeln 'geprüft an Tag X,
geprüft an Tag Y, geprüft an Tag Z' oder aber ein Zeitbereich: Gültig
ab <=X, gültig bis >=Z, und Z wird mit der nächsten Prüfung erhöht,
wenn ein späteres Datum bekannt ist.
Diese Zeit-Punkte gültig ab / gültig bis sind nicht feste Anfangs- und
Endpunkte einer Zeit-Strecke, sondern Markierungen auf einem
Zeitstrahl, die eigentlich zur Interpretation weitere Zusatzinfos
benötigen. Oftmals erkenne ich das Ende einer Gültigkeit nicht an einem
bekannten genauen Zeitpunkt sondern einfach aus dem Verschwinden vom
einen Prüfzeitpunkt zum nächsten. Das Ende der Gültigkeit liegt dann
meist genau zwischen diesen beiden Prüfzeitpunkten (manchmal auch vor
dem vorletzten Prüfzeitpunkt, weil die Vergleichsdaten selbst zu deren
Referenzzeitpunkt schon veraltet waren - aber genau diese Veränderungen
kann man oft genauer nachprüfen und korrigieren)
Aus dem Grund bevorzuge ich für diese Zeiten statt eines festen
Datumstyps eine zugleich unschärfere und formalisierte
Textschreibweise. Daraus abgeleitet mal hier ein Vorschlag:
- Datumstyp: Text
- Präfix: <, ≤ oder = (bzw. >, ≥ oder =) für Zeitpunkte, die vor (<),
evtl. vor (<=) oder exakt auf dem zugehörigen Zeitpunkt lagen
(bzw. entsprechend nach einem Zeitpunkt)
- Datumsformat: yyyy-mm-dd: Jahr, Monat, Tag.
Dieses Format wurde vor ein paar Jahren als DIN und ISO offiziell
normiert. Es mag anfangs ungewohnt sein, bietet aber erhebliche
Vorteile, einerseits in der primitiven Sortierung nach Text,
andererseits als verwechslungsfrei eindeutige Darstellung im
internationalen Gebrauch (vgl. Deutschland d.m.yy, England d/m/yy, USA
m/d/yy, ...)
Dieses Format erlaubt auch Variationen wie z.B.
heute: 2005-04-17
Dieses Monat: 2005-04
Dieses Jahr: 2005
Diese Woche: 2005-W16
Dieses Quartal: 2005-Q1
Zeitraum: 2005-04..2006-05
2005/2006
2005-04-15..16
Zeitstempel: 2005-04-17 22:34
Zeitzone: 2005-04-17 22:34 +0100
Viele Einträge benötigen entweder einen einmaligen Zeitpunkt oder eine
mehrfache Aktualisierung. Für einmalige Zeitpunkte wäre dies
systematisch z.B. Beginn: = 2005-04-17 (Randbemerkung: Persönlich
lasse ich ein "=" wegfallen, aber für eine sauber systematische
Darstellung kann man das in der Datenhaltung sauber mitziehen und je
nach Bedarf der Darstellung auf der Oberfläche verbergen.)
Für wiederholte Zeitpunkte würde man dann das Ende nutzen: ≥ 2005-04-17
bedeutet also: Wurde heute geprüft und für gültig befunden -
wahrscheinlich bleibt's auch weiterhin gültig. Wüsste ich allerdings,
dass die Gültigkeit definitiv nur bis 2005-31-12 gegeben ist, so kann
ich das auch gleich als "= 2005-12-31" festhalten.
Post by m***@public.gmane.orgFür andere Daten als gerade Bevölkerungszahlen könnte man das System
überdenken, aber mir fällt dazu gerade nichts ein.
Bevölkerungszahlen sind entweder heute (vgl. das klassiche
Western-Einwohnerschild am Stadteingang), meist aber auf einen
Bilanzstichtag bezogen.
Post by m***@public.gmane.orgPost by Martin TrautmannPost by Thomas MackUnd Punkt zwei: Wie funktionieren Beziehungen zwischen Datensätzen?
Ich habe bei den Daten zu Postleitzahlen bislang eine Referenz über
die geodb_hierarchies gemacht. Aber eigentlich sollte die Referenz
über eine loc_id erfolgen. Zumindest war das der urspüngliche Gedanke.
Sorry - ich denke noch nicht in der GeoDB-Struktur. Was meinst du konkret?
Wenn ich eine Koordinate für ein Postleitzahlgebiet aufnehme, dann
brauche ich auch Angaben darüber, wo dieses Gebiet "politisch" zu
finden ist, weil es sonst ziemlich schwierig werden kann
herauszufinden,
ob dieses Postleitzahlgebiet in D oder A oder CH oder Belgien oder
Liechtenstein liegt.
Ok, Verstanden - die loc_id sollte den Zugang zu allen diesen
Informationen bieten.
Irgendwo muss eben eine Tabelle vorliegen, die auch die
Hierarchie-Information mitbringt. Aus Effizienzgründen habe ich hier
eine hierarchische Nummer, die alle diese Informationen mitbringt.
Fehlende Daten werden daher einfach aus der übergeordneten Ebene
geerbt. Aber diese Hierarchie ist auch immer einem permanenten Wandel
unterzogen - dieser Wandel kann besser über eine separate Zuordnung und
statische loc_IDs archiviert werden, wie opengeodb dies vorsieht.
Post by m***@public.gmane.orgOder in Bayern oder Brandenburg oder Thüringen. Usw..
"der Ort mit loc_id [xxx] benutzt diese PLZ / liegt in diesem
Postleitzahlgebiet". Oder ich baue die gleiche Struktur auf wie
ich es auch bei den Orten mache, nämlich daß ich die komplette
politische Hierarchie mit aufnehme.
Letzteres vereinfacht die SQL-Anfragen "ein wenig".
Ich vermute, man braucht hier einerseits die minimalistische
Darstellung: Wo eine PLZ politisch hingehört, ist archivtechnisch
zweistufig zu lösen: PLZ gehoert zu loc_ID A und loc_IC B, loc_ID A
gehört zu Ort/Gemeinde/Kreis AA, loc_ID B gehört zu Ort/Gemeinde/Kreis
BB.
Für den Datenaustausch ist allerdings ein Schnappschuss der aktuell
erwünschten Info in ausgeflachter Version (z.B. deine Text-Dateien)
sehr hilfreich. Die sind auch ohne SQL über einfache grep oder
Import-Funktionen in anderen Umgebungen leicht nutzbar.
Post by m***@public.gmane.orgPost by Martin TrautmannEs gibt einerseits datensatzspezifische Beziehungen, die manuell zu setzen
waeren. Es gibt typischerweise Vererbungen bestimmter Typen (z.B. gehoert
das Kennzeichen eines Kreises meist auch zu den untergeordneten Gemeinden,
Ortsteilen, Strassen, Haeusern, Personen). Und als vermutlich manuell zu
Ja genau, wie macht man Vererbung in opengeodb sinnvollerweise?
Ich weiss keinen generell sinnvollen Ansatz - Ich denke, das hängt
immer sehr vom Einzelfall ab.
Beispiel: Kfz-Kennzeichen eines Orts ist in fast allen Fällen das
gleiche Kennzeichen wie das des Kreises.
Ausnahmen: Einerseits einige Exoten (BÜS/KN, VK/SB, IGB/HOM,
andererseits Änderungen durch Gemeinde- und Kreisreformen (SUL -> AM ->
AS), durch Aktualisierungen, durch Ost-West-Vereinigung (L -> LDK) usw.
D.h. typischerweise kann eine Gemeinde das Kennzeichen des Kreises
erben - ausser, es wird sofort eine Ausnahme dokumentiert. Gleichzeitig
mag aber die historische Suchoption eine Ausnahme darstellen, wo man
auch an früheren Einträgen interessiert ist.
Umgekehrt kann z.B. eine Stadt alle Postleitzahlen aller ihrer
einzelnen Ortsteile zusammenfassen - wobei auch hier beliebige
Ausnahmen möglich und sinnvoll sind. Beispielsweise gehört hier ein Hof
rechtlich zum Nachbarkreis, wird postalisch (und wegetechnisch) von
diesem Kreis aus erfasst. Dieser Hof hat also die PLZ des
Nachbarkreises, und es ist kaum sinnvoll, dessen PLZ an den Kreis nach
oben weiterzuvererben: Wenn man Postleitzahlengebiete von einander
abgrenzen möchte, so weichen solche Ausnahmen den tatsächlich gesuchten
typischen Wert beliebig auf. Der Ortseintrag dieses Hofes sollte also
die Information enthalten, die PLZ nicht nach oben zu vererben. Aber es
mag wiederum Ausnahmefälle geben, wo man auch diese Exoten eines
Kreises mitgenannt bekommen möchte.
Ich begrüße also die derzeitige Aufsplittung der openbeodb-Struktur in
thematisch passende Teile, wie z.B. PLZ, Kfz-Kennzeichen, Vorwahlen,
...
Ich vermisse die entsprechende Schaffung einer Versionierung (evtl. mit
genannten Datumswerten).
Ich wünsche mir weiterhin ausgeflachte Versionen im einfachen
Text-Format.
Schönen Gruß
Martin