Font and french grades are case sensitive 8A is not 8a.
Y.D.S. is not case sensitive 5.10a is 5.10A.
Y.D.S. can be truncated 10a is the same a 5.10a.
Y.D.S. gets messy 10a/b could be the same as 5.10a/5.10b
What about 5.10d/11a vs 5.10/11 vs 5.10+ vs 5.11- or (nightmarishily 5.10++)
to some extent this can be mitigated/handled with comparison functions and sanitation.
it might be best handled with an grade input.
similar to how a date-time input manages complexity around date and time formats.
support grade inputs
use a simple, hard-to-misuse data model
easily adjust to fit your needs
TODO: maintain historical XYZ and convey the skew to people interested in conversion
[I think i meant that storing 8A as an integer, means you can never adjust your conversions to align with other scales. 8A, must be stored a 8A.]
Do you know what your users mean?
Is a 5.10a for user#9105 the same as a 5.10- for user#803?
Plain text doesn't convey the difference. Use a grade input.