データーと変数 |
データーの構造を決めるとき、プログラム処理との関連を考えて決めるべきものであることは既に記しましたが、もう少し踏み込んでみます。 作表する際各列は変数に割り当てられます。 データーベースプログラミングに於いては、各行を1つのまとまりとして、 これを配列変数に割り当てます。 変数には大きく分けて文字変数と数値変数があります。 例えば、半角の1は、8bitで2進数表示すると、00000001となります。 同様に、半角の2は、8bitで2進数表示すると、00000010です。 数値の足し算では、1+2=3、まあ当たり前です。 コンピューターでは文字の足し算と云うことも行います。 今ここに、ズラズラ文章を記していますが、これは、コンピューターの処理上は、 文字の足し算を行っているのです。 話を解りやすくするために 2進数の00000001を今Aで表し、00000010をBで表しておきましょう。 AもBも、中身はただ1と0を並べただけのものです。 数値として扱う際には、#Aと#Bで表すことにし、 文字として扱う場合には$Aと$Bと表すことにしましょう。 それぞれで足し算をしてみます。結果はそれぞれ#C、$Cと表すものとします。 プログラムでは、1+2=3と云う式は、 3=1+2の様に表します。これは代入式で、右辺に計算式をおくわけです。 数値処理では、 #C=#A+#B の様になります。 数値のAと数値のBを加えて、その結果を数値のCに代入しろと云う意味です。 2進数表示では、 00000011=00000001+00000010 です。まあ当たり前ですね。 一方、文字の足し算では、同じように、 $C=$A+$B の様になります。 これを2進数表示すると、次のようになります。 "00000001;00000010"="00000001"+"00000010" 10進数でしめすと、 "12"="1"+"2" と云うことです。 文字の足し算というのは、計算はしないで、文字を並べて行くだけです。 この違いで理解して欲しいのは、文字変数は、数値変数に比べてメモリーを浪費すると云う点です。 かつて、データーベースを作成する際、1項目の文字数を何文字にするか、 或いは1行の文字数を何文字にするかと云うことは、非常に大事な事でした。 それは、メモリーをどの位使うか、ファイルの大きさがどの位になるか、或いは、 データーの処理速度がどの位になるかを決定する一番の要因だったからです。 文字変数は、その使用文字数を最初に決めておく必要があったのです。 |
《可変長文字列変数》 さて、コンピューターの処理能力が上がってくると、それまでの固定的な文字変数ではなく、可変長文字列変数が使えるようになりました。 これは何かというと、以前のように、最初に使用文字数を決めなくても、 変数に入れて行く文字数の最大の大きさに合わせて、メモリーサイズを自動的に拡大していくというものです。 プログラムで変数を定義すると、コンピューターはその変数に対してメモリ空きエリアの割り当てと云うことを行います。 変数1つに対して、それを扱う空きエリアの位置が決められるわけです。 メモリエリアは、そのサイズが最初に128biteとか、256biteとか云うように、 固定サイズで区切られています。 例えば128biteで区切られている場合、2biteはosの処理に用いますから、 使える文字数は全角で63文字です。(128-2)/2=63 ここから変数定義文字を引くと、62文字以下になります。 固定文字列変数の時代は、こういうことを考慮して、最初に項目文字数を決めていたわけです。 可変長文字列変数の場合は、この62文字を越えた場合には、osのプログラム処理により、追加の空きエリアを割り当てます。 つまり、項目の文字数読みとりで63文字を越すと、128+128=256biteの割り当てを、一つの変数に対して自動的に行うわけです。 これは、データーベースの作成において最初にサイズ計算しなくて良いという点で、便利ではあるのですが、メモリー浪費に気づかないと云う弊害を生みます。 |
さて、長々難しそうな話を記しましたが、何故この様なことを記したかというと、 目録データーの中に、項目文字数に対する配慮の無いデーターが見受けられるからです。 書籍の解説項目で、ひどい例では100文字以上使っている目録があります。 はっきり言って、データーベースというものが全然解っていない。 1000点のデーターの中に、1点でもそういう文字数の項目があると、全体のメモリエリアに反映されてしまいます。 1項目の使用最大文字数は、精々全角60文字以下にしておくべきです。 データベースの項目列はワープロの原稿ではないのですから、ズラズラ書いて良いというものではない訳です。 まあ、データーベースというものが解って作られている目録の方が少ないようですが、この例の場合はメモリーのOverflowという実害を伴う可能性があるので、記しておく次第です。 |