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]