すぐわかる「データベースて何」 (+トラコン雑記)
この記事は、 大阪工業大学 Advent Calendar 2020の14日目の記事です。
まず
お久しぶりです。スリランカ民主社会主義共和国と朝鮮民主主義人民共和国の尾骶骨が乗るプリウスです。
去年のAdvent Calenderから一年が経ちました。時代の流れは速いもんですね。もうそろそろ名前を覚えてくれていることと思います。
去年のこの記事は、長ったらしく「Exact Audio Copy」というCDを取り込むツールについて、導入方法から実際に聞くことができる状態まで書かせていただきました。
今回は、タイトルにもあるように「データベース」について、そこまで自分も手を付けているわけではないですが書こうと思います。
正直な話をすると、今年行われたICTSC2020というものに、友人の誘いで参加させていただき、それがきっかけでデータベースに手を付けました。そのときの知識が落ちないためのアウトプット目的でもあったりします。
データベースって?
データベースは、いろいろなデータを一か所に集めて、管理しやすい、扱いやすい形に整理したものを言います。例でよく言われるのは電話帳とかですかね。伝わるのかな電話帳。
データベースは、DBMS(DataBase Management System)というツールを使って、データの追加や削除などを行っています。DBMSの中にもいろいろ種類はあるんですが、一般にDBMSと言えば、その中のRDBMS(relational DBMS)を指すことが多い(らしい)です。聞いたことある人はMySQLとかOracleとかPostgreSQLとかのことですね。
文で言われてもさっぱりだと思うので、一枚データベースの画像を用意しました。
これがデータベースです(Eclipseという統合開発環境を使用)。
RPGのステータスを模したものになっていますね。
左から名前、レベル、HP、MP、職業、武器、頭装備、胴装備、足装備、攻撃力、防御力、経験値です。
これらをカラムと呼びます。画像のような、表全体のことをテーブルと呼びます。
このような形で、キャラクターの名前とレベルなどを一括で管理しています。ゲームの攻略本でよく見る形ですが、あれも一種のデータベースですね。
ただし、これだと三流のデータベースです。私に一流は書けませんが。
これでもデータベースとしては十分に管理できているのですが、仮に「ドラゴンキラー」とか「みかわしのふく」とか「妖〇のバニースーツ」とか、極端な話「なんでも呪文弾いて防御力も結構あってブレス耐性もついてて状態異常にかかりにくくて炎耐性が高くて龍耐性が低くて抜刀すると能力が上がってエー〇ルの風からあなたを保護してくれて使用すると〇ーマの闇の衣が剥げて・・・」のようなに、いろんなバフデバフのある装備防具を実装するようなとき、データベースではどう扱うのかが問題になります。
一つのデータベースを使い続けると、そもそも装備が変わったら攻撃力と防御力も変わるし特殊能力ついてたらその特殊能力についての記述が横に伸びるしと、視認性が悪くなり、なにより管理が大変になります。
じゃあどうすれば三流のデータベースから卒業できるのか。その答えは、「複数のデータベースを作成し、あとでくっつける」です。
これも写真で見てもらった方が早いですね。
このように、各ステータスをまた詳細に管理するデータベースを作成、キャラクターのデータベースには武器や防具、職業一つ一つに割り振られたIDをデータとして入れることで、管理しやすく、またデータベース同士を結合させることも出来るので、素の攻撃力と武器によって増える攻撃力を加算させる事も可能になっています。
これで三流のデータベースを卒業しました!いうて二.五流とかですが
これからもっと一流に近づけるには、レベルと職業からHP、MPを計算させたり、職業で装備可不可を判断させたり(職業ごとにweapon分けるとか)、レベルをexpから算出させたり、隠しパラメータを入れ込むのもいいかもしれないですね。
おまけ
トラコン雑記
多分この記事見てる人はAdvent Calender11日目の記事を見ていると思うので知っていると思いますが、
トラコンとは、ネットワークに関するトラブルを解決するコンテストで、今回取り上げたデータベースや、11日目の記事にもある通りルーティング、サーバー、Web等も扱われています。
担当した問題
綴りミスが発覚したのを一番最初に指摘したのは僕だと思ってます(自意識過剰)
5つのテーブルが用意されて、それらを結合させて必要なテーブルを作成、そのデータと、作成のためのコマンドを提出する問題でした。
結合のためのルール、及び抽出するデータの見極めが出来れば、あとはわりかし有名なコマンド叩くだけで100点取れます
80点でした(問題文読み違えてた)
某ブログで100点満点3問やって280点なのはそういうことです。
抽出するデータの見極めができてなくて20点マイナスでした、まあ頑張ったと思います。
終わり
トラコンの雑記いる?
復習がてらまとめていましたが、データベースについての考え方とかどんな感じのシステムなのかが、この記事で分かれば言いなーって思いますし来年のトラコンで僕と替わって下さいよろしくお願いします。