固定長文字列

2003年8月11日

アプリケーションプログラミング言語とリレーショナルデータベースの間で通信を行うほとんどのライブラリを見ると、データベースの文字列型(charまたはvarchar)をプログラミング言語の文字列型にマッピングしていることに気づくでしょう。単純で明白ですが、おそらく間違っています。

私がこれを疑問視する理由は、SQLのvarcharは固定長であるのに対し、ほとんどのアプリケーション言語の文字列は任意の長さを受け付けるためです。これにより、データベースの更新時に大きな問題が発生する可能性があります。常に長すぎる文字列でデータベースを更新するリスクがあるからです。

これに対処する方法の1つは、インスタンスが長さと値の両方を認識する固定長文字列型を作成することです。このようにして、文字列値を代入するたびに、その長さに対してチェックできます。このようなオブジェクトは、例外をスローしたり、切り捨てたり、その他の動作を実行したりできます。実際、入力文字列が長すぎる場合の動作をインスタンスデータに追加できます。

このような型を使用すると、UIフィールドウィジェットは固定長文字列のサイズを照会し、そのサイズのみの入力を取るウィジェットを作成できるため、UIを向上できます。これは非常に長い入力文字列を処理する最も優れた方法ですが、データベースから情報を取得した場合にのみ可能です。通常、そのような情報は失われます。

この概念は、より一般的な設計問題の具体的な例です。

  • データストアを分離することは良いことですが、それでもデータストアが課す制約に従う必要があります。
  • 人々は、単純な値の型を作成することをためらうことがよくありますが、それらは多くの場合、物事をはるかに容易にすることができます(詳細についてはWhen To Make a Typeを参照してください)。
  • UIに単純な検証を含めると、より優れたインターフェイスになります。コツは、検証ロジックを複製せずにそれを行う方法を見つけることです。

文字列を保持して検証するオブジェクトは、単なる長さチェック以上のことができます。正規表現に対するチェックなどの内容を含めることができます。ただし、長さチェックは、データベースの処理を容易にするための単純な例です。