応用情報技術者試験_その4
毎日投稿チャレンジ5日目。
2-4日目に引き続き、本日も応用情報技術者試験の話…と言いたいところだし、タイトルもそう書いてしまったがさっそく脱線したい。
でも節々に試験に登場するワードを散りばめてお茶を濁したい。
応用情報技術者試験、というか社会人御用達の科目として、「データベース」がある。
例えばデータベースを操作する言語であるSQLは、
業務エンジニアはDBの外部スキーマ・論理スキーマの設計もそうだし、プログラムソースやストアドプロシージャとして必ず出てくるので必須である。
基盤エンジニアも内部スキーマの設計や、データベースへのユーザや権限の登録作業だったりトラブル時のログの解析やセッションキル、パフォーマンスチューニングに使うので知らなくていいはずがない。
なんならエンジニアでない業務部門、間接部門の人間も、今やBIツールやRPA、ローコードツールの台頭でSQLを記述する機会は多いのではないか。VBA内にSQL書いていた(る)人もそこそこ多そう。
ちなみにデータベース操作ができなくても、単なるデータベースに触れたことのある人という意味では、オフィスワーカーのほぼ全員がそうだろう。
ACCESSを今だに業務フローに取り込んでいる会社は多いし、ExcelやPPTの表だって立派なリレーショナルデータベースだ。
それで、データベース、というかテーブル(4本脚の家具のことではなく、データベース内の1つの表と思えばOK)だが、「キー」を設けることができる。
キーとは名前のとおり鍵のことで、そのテーブル内の行を一意に特定できる項目のことである。
例えばとある会社の「社員テーブル」というものがあったとして、社員テーブルのキーは社員番号となる。同じ社員番号の社員は社内に1人も存在しない=社員番号があれば1人の社員を特定できるからである。
ただし、とある小学校の全生徒を対象とした「生徒テーブル」だとそうは問屋が卸さない。
社員テーブルの社員番号のように、出席番号をキーとしたいところだが、出席番号1番の子は、1年1組にも、6年6組にもいるのだ。
そこで複合キーの出番となる。これは複数の項目を組み合わせて(複合して)キーにしていいよというルールで、つまり生徒テーブルのキーは「学年」「組」「出席番号」となる。
そしてキーの制約は主に3つある。3つ目は個人の意見。
お勉強タイムはこの段落で終わるのでもう少し付き合ってください。
1つ目は、一意制約。あるキーは他のキーと重複してはいけませんって制約のこと。同じ社員番号の社員が社内に2人いたらどんな不利益や行き違いが生じるかは想像に難くない。
2つ目は、not null制約。
これはあえて語弊が出るように分かり易く言うと、キーは空白ではいけませんって制約。社員番号がない社員がいたらびっくりする。お前誰だ。
※ちなみに外部役員とか一時出向の社員に社員番号振っていない会社はあるのかも。あくまで一般社員ってことで。
3つ目は、完全に個人の意見だが、変更不可制約。キーは変えてはいけませんって制約。正確には変えてもいいのだが、例えば社員番号がコロコロ変わられたら、手続き上、書類上、変更作業がどんなに面倒くさいか。最初から変わらないよう考慮してデータベース設計もしくは運用設計しましょうねっていうこと。
さて、本当に突然だが、本日話をしたいのは、マイナンバーについて。
急にそんなセンシティブな話題どうしたと思われても仕方がない。
(2023年9月現在、マイナンバーに関するあれこれでデジタル庁と河野長官と富士通が叩かれまくってる。マイナンバー返納する人も出てくる始末)
私は別に左翼でも右翼でもノンポリでもタカ派でもハト派でもないので主張に政治的意図は含まず、単にデータベースの観点からマイナンバーを語りたい。
さて、ここまで前提を読んでくれた方は、「国民テーブル」のキーは何にすべきだと思うだろうか?
もしくは、マイナンバー登場以前の有史、戸籍法の下では何がキーだっただろうか。
・・・そう、「名前」と「住所」である。
複合キー(上に書いたことの復習です。忘れた人は読み返してね)としてこの2項目を複合したものをキーと規定している。
データベース設計上、こんな杜撰なキーはない。
「新入社員のつくったデータベース」でももう少しマシである。
だって、複合キーを分解して検証していくと、
まず名前は一意制約と変更不可制約に反している。
一意制約違反で言うと、例えば全国に田中太郎さんは200人はいるだろう。
変更不可制約などもっての他で、入籍・離籍・改名の家庭裁判所申し立て、様々な理由で名前なんて簡単に変わる。
※ちなみに、キー制約とはまた違うが、外字の問題も・・・。簡単に言うと「ワタナベさん」が何種類存在するか私の代わりにググってほしい。そして珍しい漢字の「ワタナベさん」がいたとしたら、環境依存文字の可能性がある・・・。昔はiPhoneの顔文字がwindowsPCで文字化けしていたがそんな話。そんなバカなと思われるかもしれないが、環境依存(機種依存)の文字コードを名字に持つ人は珍しくない。
※さらにちなみに、もう考えたくないが、外国人の通名やミドルネーム問題・・・。
次に住所だが、これもめちゃくちゃだ。
一意制約として、同じ住所を共有する人間はたくさんいる。家族やルームシェア。
そして変更不可制約だが、引っ越しした瞬間に住所なんてすぐ変わる。
また自分が引っ越さなくても、区画整理等で住所の新設や統廃合や変更が起こる。ニュータウンの街開きがわかりやすい。何百もの新設住所が爆誕する。住所マスタは不変ではないのだ。
※これもちなみにだが、住民票や戸籍にはもちろん実住所を登録する必要すらない。一人暮らしの学生や、数年限定の単身赴任者が住民票を移していないのはよく聞く話。
では複合キーとして名前と住所を足したらどうなるか。
簡単に思いつくのは、同じ住所で同じ名前の一意制約違反。
中性的な名前(薫さんとか有希さんとか)で、結婚して同棲しはじめたけど同じ名前になったねーwなんてたまにある話。身近にあるかないかの話でも、1億2,000万人が住む日本では、何百人という一意制約エラーが存在するだろう。
で、一意制約がなかったとしても、値が動きまくる。
昨日まで東京の田中さんだった人が、今日はもう福岡の山田さんになっている。考えただけでおぞましい。
地方公共団体と中央政府は、これをせこせこメンテしていて、運用に組み込んでいるのだ。
コロナ給付金がほしいと言われればハガキを送って、申請が来たら間違えずに発送済フラグを立て、振り込みの口座(これもこれでめちゃくちゃだがさすがにもう飛ばします。だいたいは口座番号体系が他金融機関と全然違うゆうちょが悪いんだけど)を紐づけて、振り込み管理して・・・。
「世帯主に家族分が振り込まれるのはおかしい、私の小遣いになるべきだから個人に振り込め」なんて個別クレームを言う輩に付き合って・・・。
選挙も同じである。選挙運営に巨額のコストが投入されているが、その内訳を知ってるだろうか?
ちょっとあつくなったというかどうしても政治的な話になったが、データベース構築・運用としてありえない状況をつくってきたのが戸籍だ。
マイナンバーがセキュリティ上信頼性に欠けるとか、口座紐付けを何百件間違えたとか、政府がベンダーや中抜き業者と繋がっていて税金が投入されている陰謀論・・・とかどうでもいいのだ。
気持ち悪いデータベースを何とかしてくれ。
私の意見はそこだけに帰結する。