固定長と可変長 |
もおっ、この子
ブラックリスト
入り決定! |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
データの「桁」の
管理の形式には
固定長と可変長がある。
データの用途に応じて
桁の長さをどう管理するか
使い分けするんだ。
プログラムでもちょこちょこ
出てくるからね。
ついでに覚えとこう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
桁を管理するんだ。
うーん、どんなこと
するのかな? |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
お腹真っ黒の
なぽちゃんも
いっしょにね! |
|
|
|
|
|
てめー
誰が腹黒じゃー
|
 |
|
 |
ふーんだ。
いつも自分で
言ってるでしょー
お腹の中
見てみればー |
|
|
ぎゃっ!
やっぱり
刺身にされちゃう!
エビといっしょに
召し上がれ!
|
 |
|
 |
もういいからー
ちゃんとやってー |
|
|
|
 |
|
 |
|
|
固定長のイメージ |
|
|
名前 |
年齢(3桁) |
Aさん |
|
3 |
5 |
Bさん |
1 |
0 |
3 |
Cさん |
|
|
4 |
Dさん |
|
8 |
8 |
|
|
固定長の場合、
データの桁は最初に決めた桁数で固定。
常に一定の桁幅になる。 |
|
例の「年齢」データの場合、桁は常に3桁。
値が1桁、2桁の場合も3桁分予約している。 |
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
固定長は
桁の数が固定された形式。
つまり、データの長さが
最初から決まってるんだ。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
きりりっ |
|
 |
俺の名前は
ちゃんとくん。 |
|
はいはい。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
この場合だと、3つの
青い箱に各桁の数字を
入れる感じなんだね。
無いとこは空箱なんだ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
パディングのイメージ |
|
|
名前 |
年齢(3桁) |
Aさん |
0 |
3 |
5 |
Bさん |
1 |
0 |
3 |
Cさん |
0 |
0 |
4 |
Dさん |
0 |
8 |
8 |
|
|
空いている桁を特定の値で埋めること
ゼロや空白文字(スペース)などで埋める場合が多い。 |
|
例の「年齢」データの場合、空いている桁を0で埋めた。
「年齢」データの桁が揃い、3桁の固定長なのが
分かりやすくなった。 |
|
|
|
|
|
 |
|
 |
|
|
プディング
じゃないよ。 |
 |
|
 |
プディング
じゃないんだ。 |
|
|
|
|
 |
|
|
|
|
 |
 |
 |
|
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
データが数字の場合
空いてる桁を0で
埋めたりする。
埋めると桁が揃って
扱いやすくなるからね。
この空いた桁を
埋めることを
パディングと言うよ。
名前覚えといて。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
 |
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
空箱を0で埋めちゃうんだ。
最大が3桁だって分かり
やすくなるね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
固定長形式の
メリットとしては・・・
桁の数が揃って、加工や
チェックがしやすくなる。
プログラムでも桁数が
バラバラよりずっと処理を
しやすくなる。
桁の数が決まってれば
システム間でも連携
しやすいね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
電話番号とか固定長
なんだ。
申込用紙とかにこんな
四角並んでるね。
みんな桁が同じだから
分かりやすいかも。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
変な例だけどー
データベースで
使うとか考慮
してないからね。
ひとりごと。。。 |
 |
|
 |
??? |
|
|
|
 |
|
 |
|
|
固定長のメリット |
|
|
桁数が分かっている |
|
管理・整理しやすい |
桁が揃っているので、見やすく管理しやすい。
システム間でデータを共通の体系に揃えやすい。 |
電話番号 |
0 |
9 |
0 |
- |
9 |
× |
× |
× |
- |
5 |
5 |
7 |
7 |
0 |
8 |
0 |
- |
7 |
× |
× |
× |
- |
2 |
2 |
1 |
1 |
0 |
9 |
0 |
- |
3 |
× |
× |
× |
- |
8 |
8 |
9 |
9 |
0 |
7 |
0 |
- |
5 |
× |
× |
× |
- |
1 |
1 |
6 |
6 |
|
|
|
|
チェックしやすい |
桁数が分かっているので特定の桁のチェックがしやすい。 |
【例:年齢のチェック】
先頭の番号が「1」の人を数えて100歳以上の人が何人いるか調査する。 |
名前 |
年齢(3桁) |
Aさん |
0 |
3 |
5 |
Bさん |
1 |
0 |
3 |
Cさん |
0 |
0 |
4 |
Dさん |
0 |
8 |
8 |
|
|
|
|
加工しやすい |
桁数が分かっているので特定の桁のチェックがしやすい。 |
【例:商品番号のチェックと加工】
先頭から4桁目の番号が「1」の商品は、不人気の商品。
先頭から5桁目の削除フラグ番号を「1」にして削除済みにする。 |
商品番号(5桁) |
商品名 |
1 |
0 |
5 |
0 |
0 |
かわいこちゃん人形 |
2 |
8 |
2 |
1 |
0 |
ことちゃん人形 |
6 |
9 |
8 |
7 |
0 |
なぽちゃん人形 |
8 |
0 |
1 |
1 |
0 |
ビッグことちゃん人形 |
上記は説明のための例です。実用的ではありません。
一般的に商品番号に削除フラグなどは入れません。 |
|
|
|
例では、データの型(整数型や文字列型など)を考慮しない。 |
|
|
|
 |
|
 |
|
|
「1」の商品が
・・・不人気? |
 |
|
 |
「7」の間違い
でしたー。 |
|
|
まあ、無駄があるかは
ソフトの実装にも
よるけどね。
今は基本的な
考え方を知ってね。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
固定長のデメリットとしては・・・
当初の想定以上の数になった
場合、溢れてしまう。
かと言って、多く桁を取りすぎても
無駄が出るし、管理しづらくなる。
最初に「何桁にするか」決めるのが
重要になってくるね。
つまり、設計が重要。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そっか、桁が少なすぎても
多すぎてもだめなんだ。
バランスが大切なんだね。
よく考えて作らないと。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
固定長のデメリット |
|
|
最大桁数の変更がしにくい |
|
桁数が足りなくなる |
想定より値が大きくなった場合、桁不足でシステムが破綻する。 |
【例:商品番号の不足】
3桁固定の商品番号の場合、商品が999個より多くなった場合、桁が足りなくなりシステムが破綻する。 |
|
商品番号(3桁) |
商品名 |
|
・・ |
・・ |
・・ |
・・・ |
|
9 |
9 |
8 |
コロコロ飴ちゃん |
|
9 |
9 |
9 |
フトメンテうどん |
1 |
0 |
0 |
0 |
× |
|
|
|
|
桁数の無駄が出る |
必要以上に桁数が多すぎても管理しづらくなり、使わない桁で無駄なリソースを消費する。 |
【例:住所の登録】
住所の長さは、地名や番地によって長さが大きく異なる。そのため固定長では予め大きめにとっておく必要あり、無駄が発生しやすい。
(例では文字列を左詰め。) |
名前 |
住所(最大12桁(12文字)) |
Aさん |
埼 |
玉 |
県 |
川 |
口 |
市 |
|
|
|
|
|
|
Bさん |
千 |
葉 |
県 |
印 |
旛 |
郡 |
酒 |
々 |
井 |
町 |
|
|
Cさん |
三 |
重 |
県 |
津 |
市 |
|
|
|
|
|
|
|
・・・ |
・・ |
・・ |
・・ |
・・ |
・・ |
・・ |
・・ |
・・ |
・・ |
・・ |
・・ |
・・ |
|
|
|
|
ゆとりのある、無駄のない設計が必要になる |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
参考までに言っとくと・・・
この桁数の問題の代表例は、
大騒ぎになった「2000年問題」だね。
この問題は古いシステムが
西暦を2桁分しか持っていなかった
ことに起因してた。
桁が足りなくなっちゃったんだな。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
お前が
ガキの頃の
話かな。
覚えとる? |
|
|
|
 |
|
 |
|
|
参考:西暦2000年問題(Y2K)とは |
|
|
2000年1月1日にコンピューターが一斉に誤作動を起こす
可能性があった問題。当時、世界中で大問題になった。 |
|
2000年以前に作られたシステムには、性能や価格などの
理由から、西暦を「19XX」の下2桁だけで見ているものが
存在した。(XXは00~99)
そのようなシステムは、西暦が1999年から2000年に変わる時、
「99」から「00」」に戻り、2000年を1900年と認識して誤動作を
起こす恐れがあった。
電気や水道等、社会インフラの基幹システムが誤動作を
起こした場合、甚大な被害が想定され、当時、世界的な問題
となった。
実際には各国の政府や企業が事前にこの問題への対策を
行い、大きな問題は起こらずに済んだ。 |
|
|
|
|
|
 |
|
 |
|
|
コンピューターが
大変とか
あったような? |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
たった4桁持つのも
大変な時代があった
んだね。
事故が起きなくて
良かった。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
固定長は
こんなとこかな。
次は可変長を
見てみよう |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|