わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

DBゼミへのアドバイス・2008年度版(3)

体力がないので,今日は1件だけです.

ISBNの扱い

ISBNで検索できるようにしたい,と考えて,ISBNという属性名を作っていますね.
まあこれはこれでいいと言いたいのですが…えっと…私のCのプログラミング授業で,ISBNのチェックデジットを求めるプログラムを見たことがありましたっけ? いや,去年が初めてだから,普通に3年生を迎えた皆さんは見てないのですね.
何が言いたいのかというと,現在のデータベース設計や情報検索で,ISBNを取り扱いたいときは,10桁のISBNと13桁のISBNがあることに配慮しないといけないんですよ*1
違いを知ってますか?
そうです,先頭に「978」がつくのがISBN-13,つかないのがISBN-10です.
それだけでなくって,最後の数字…チェックデジットの求め方も,根本的に違います.
あと,「デジット」というけれど,ISBN-10のチェックデジットは,最後が「X」のこともあります.
いちおう2006年までの本はISBN-10,2007年からISBN-13になりましたが,初版発行時はISBN-10だけどブックカバーが13桁になっているといった本も見かけたりします.
そういったことに配慮して,検索するにはですが…
データベースに格納するときには,ISBN-13の先頭の「978」,そして13にせよ10にせよ,ハイフンとチェックデジットを取り除いた,9桁を,まあ数値とみてもいいし文字列とみてもいいのですが,データベースに格納して,その属性にインデックスをつければ,本がうんと多くなっても瞬時に検索できるでしょうね.
そうそう,ユーザは10桁でも13桁でも,ハイフンありでもなしでもよくって,検索のために9桁を抽出するのは,データベースではなくその外に自分で書くプログラム,俗に言う「ロジック」が担当するところです.