Hallo Andreas

Andreas Borutta schrieb:
Wenn er aber mal 09 oder gar nur 9, ein ander Mal aber 1992 eingibt, dann kommt die DB damit nicht klar.
das kann man aber über "constraints" (Bedingungen) lösen

Hört sich gut an.

Wenn wir mal von der Semantik "Jahr der Fertigstellung einer
Komposition" [Ganzzahl, Jahreszahl nach Christus, vier Ziffern]
absehen und einen einfacheren Fall hernehmen: "Gesamtzahl eingesetzter Instrumente" [Ganzzahl, drei Ziffern]

09 ist zu 9 gleichwertig. Eine Integritäts-Regel, die stets strikt
genau 3 Ziffern verlangen würde, wäre störend.

Nützlich ist dann eine Funktion, die automatisch führenden Nullen
ergänzt.
Wenn ich Deine Bemerkung am Schluss richtig verstehe, dann willst Du jetzt das Kind mit dem Bade ausschütten: natürlich kann eine DB problemlos mit Integer-Zahlen unterschiedlicher Länge umgehen - ein Erzwingen von führenden Nullen ist nicht nötig. Mein Beispiel bezog sich explizit auf Deine Vorgabe "Jahr": die DB behandelt die Eingabe im Grunde genommen einfach als Integerzahl. Woher soll sie wissen, dass mit der Eingabe '09' oder '9' nicht das Jahr 9 n.Chr. gemeint ist, sondern 2009 - oder vielleicht doch 1909, oder was noch (ich habe dazu angemerkt, dass in Deinem Fall Jahrzahlen aus dem Mittelalter oder gar dem Altertum wenig realistisch sind, also vierstellige Zahlen < 1500 oder drei- oder weniger stellige oder gar negative Zahlen)? Und hier musst Du im Entwurf ansetzen, wobei es mindestens zwei Möglichkeiten gibt:

   * mit einer Gültigkeitsprüfung, wie sie Guenter vorschlägt; Access
     sieht - im Gegensatz zu Base - eine solche Möglichkeit explizit im
     User-Interface für den Entwurf vor (als Angebot: take it or leave it)
   * durch Benutzung eines explizit als YEAR (o.ä.) deklarierten
     Feldtyps, wie Du mich für PHPMyAdmin in einer früheren Mail
     hingewiesen hast. Ich habe mit diesem Werkzeug bisher (noch?)
     nicht gearbeitet, vermute aber dennoch, dass dahinter eine
     vierziffrige Ganzzahl > 1582 versteckt ist, also die von Guenter
     erwähnten Constraints teilweise in die Deklaration des Feldtyps
     integriert wurden. Alles Andere würde wenig Sinn machen

Ohne sowas wird sie bei einer Selektion nach Jahren - z.B. "Alle Werke, die nach der Jahrtausendwende komponiert wurden" - je nach Formulierung gewisse Werke nicht finden: Setzest Du das Selektionskriterium auf ">2000" (da das Jahr 2000 bekanntlich das letzte im 20. Jh. ist), dann findet er den Eintrag "09" nicht, denn 09 < 2000 (als Zahlenvergleich trivial). Oder aber: Du formulierst ">00", und dann wird er mit Ausnahme der im Jahr 2000 (bzw. 1900, ..., wenn die Eintragungen so weit zurück reichen) eben alles finden.

Fazit einmal mehr: der Entwurf (neudeutsch Design genannt) bestimmt, was Du nachher mit der DB anstellen kannst. Natürlich kannst Du im Nachhinein den Datentyp und allfällige Constraints noch ändern - doch je nach Anzahl Datensätzen steht Dir danach (oder davor, das ist teilweise Ansichtssache) noch ein hartes Stück Arbeit bevor, denn Du musst dann alle Werte anpassen - ob per Programm oder händisch ist dabei gleichgültig. Du investierst jedenfalls ein Mehrfaches der Zeit in die Korrektur, die Du für einen sauberen Entwurf benötigt hättest. Du musst dann nämlich auch noch sämtliche Beziehungen, ... prüfen, ob sich da nicht Folgefehler der Änderung einschleichen.

Übrigens: die meisten DB und Tabellenkalkulationen haben mit Datumvariablen die erwähnte Restriktion: vierstellig, > 1582. Die zweite Bedingung hat mit der Kalenderreform von Papst Gregor im Oktober 1582 zu tun, die erste ist wohl eine Frage des praktischen Nutzens bzw. der internen Darstellung von Datumwerten. So ist es denn wohl eher von theoretischer Bedeutung, dass Calc bereits ab dem Jahr 9958 Probleme mit der korrekten Darstellung eines Datums bekommt (ich habe mich noch nicht bemüht, die Ursache dieser Grenze zu eruieren - wahrscheinlich hängt es eben mit der internen Darstellung von Daten zusammen).

Freundlich grüsst

Ernst


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Antwort per Email an