メガテンで学ぶDBの基礎、連載でございます。
背景
どこから説明すべきなのかよくわかりませんが。
女神転生というRPGがあります。ロールプレイングゲームです。
多分、女神転生(R)です。(株)アトラスです。
プレステ2で真・女神転生IIIノクターンというゲームが出てます。もうでてから3年くらい経ってます。最近クリアしました。
このゲーム、敵を仲間にして、合体できます。合体すると全然違う敵になります。敵は悪魔です。悪魔と悪魔を合体して、いろんな悪魔を作れます。
合体の結果できる悪魔は、素材の悪魔によって決まります。法則がありますが、なんか単純じゃないです。3+4=7じゃないです。どっちかっていうと、3+4=ceil((3+4)/2 +1)です。ちがうか?
せっかくなので、合体結果を検索しちゃうDBを作るぞー、と思い立ちました。まあ、DB作る前に全ての悪魔はできちゃったんですけど。
女神転生というRPGがあります。ロールプレイングゲームです。
多分、女神転生(R)です。(株)アトラスです。
プレステ2で真・女神転生IIIノクターンというゲームが出てます。もうでてから3年くらい経ってます。最近クリアしました。
このゲーム、敵を仲間にして、合体できます。合体すると全然違う敵になります。敵は悪魔です。悪魔と悪魔を合体して、いろんな悪魔を作れます。
合体の結果できる悪魔は、素材の悪魔によって決まります。法則がありますが、なんか単純じゃないです。3+4=7じゃないです。どっちかっていうと、3+4=ceil((3+4)/2 +1)です。ちがうか?
せっかくなので、合体結果を検索しちゃうDBを作るぞー、と思い立ちました。まあ、DB作る前に全ての悪魔はできちゃったんですけど。
合体法則
合体ルールを言葉で説明します。
悪魔は1000種類くらいいます。そんなにいないです。結構たくさんいます。
こいつらは、30種類くらいに分類されます。日本人の太郎君と、アメリカ人のマイケル君みたいなかんじです。日本人とアメリカ人を合体すると、必ずフランス人になります。これはきまってます。表になってます。日本+アメリカ=フランス、日本+ドイツ=イタリア、アメリカ+ドイツ=イタリア、、、みたいに。数式みたいな法則ではなくて、なんかきまってるんです。これは、表をみればわかります。
で、太郎君とマイケル君を合体すると、フランス人のいったいだれになるんだって話なんですが、これは数式と表で計算します。太郎君とマイケル君がともに関脇だったとすると、まあ、大体、関脇のミカエル君になります。ミヒャエルくんかな?フランス語わかんね。もし、フランスで関脇不在の場合、大関のシャルロットちゃんになります。関脇不在とかそういうのは、表から求めます。関脇と関脇の合体なら、(関脇+関脇)÷2=関脇っていう風に計算して、表にあてて求めるわけです。
悪魔は1000種類くらいいます。そんなにいないです。結構たくさんいます。
こいつらは、30種類くらいに分類されます。日本人の太郎君と、アメリカ人のマイケル君みたいなかんじです。日本人とアメリカ人を合体すると、必ずフランス人になります。これはきまってます。表になってます。日本+アメリカ=フランス、日本+ドイツ=イタリア、アメリカ+ドイツ=イタリア、、、みたいに。数式みたいな法則ではなくて、なんかきまってるんです。これは、表をみればわかります。
で、太郎君とマイケル君を合体すると、フランス人のいったいだれになるんだって話なんですが、これは数式と表で計算します。太郎君とマイケル君がともに関脇だったとすると、まあ、大体、関脇のミカエル君になります。ミヒャエルくんかな?フランス語わかんね。もし、フランスで関脇不在の場合、大関のシャルロットちゃんになります。関脇不在とかそういうのは、表から求めます。関脇と関脇の合体なら、(関脇+関脇)÷2=関脇っていう風に計算して、表にあてて求めるわけです。
おk?
ま、こっちみた方がわかりやすいっすよ。
(TODO あとで攻略ページにリンクをはる)
(TODO あとで攻略ページにリンクをはる)
ベースのテーブルを作る
まず、基本テーブルを作ります。
種族のテーブルがまず必要だね。ということで、種族名(魔神、女神、・・・)を全部登録して、番号を振ります。だから、カラムはIDとNAMEってことになるね。テーブル名はRace。よしおk。魔神=1、女神=2、~とふりました。
種族のテーブルがまず必要だね。ということで、種族名(魔神、女神、・・・)を全部登録して、番号を振ります。だから、カラムはIDとNAMEってことになるね。テーブル名はRace。よしおk。魔神=1、女神=2、~とふりました。
ID | NAME |
1 | 魔神 |
2 | 女神 |
3 | 破壊 |
… | … |
次に、悪魔全データがいるよね、っつーことで、作ります。合体に必要なのは、種族とレベル。つーわけで、悪魔のID、悪魔の名前、属する種族のID、レベル、コレを登録します。テーブル名はDevilでいいか。よし。
次、種族+種族=種族、の情報が必要です。これは悩んだんですが、合体結果、合体前1、合体前2というカラムにします。ついでにIDもつけときます。これは、NORMAL_FUSIONってテーブル名にします。フュージョンってかっこわり。
これだけあれば、とりあえず普通の合体だけならだいじょぶそうな気がする。
次、種族+種族=種族、の情報が必要です。これは悩んだんですが、合体結果、合体前1、合体前2というカラムにします。ついでにIDもつけときます。これは、NORMAL_FUSIONってテーブル名にします。フュージョンってかっこわり。
これだけあれば、とりあえず普通の合体だけならだいじょぶそうな気がする。
SQLその1
select result, id as case, race1 from normal_fusion union select result, id as case, race2 from normal_fusion
なんかめんどくさくなった。またあしたー。
その2
select A.result, A.case || F.ID as case, F.race1 from normal_fusion F, A where F.result=A.race union select A.result, A.case || F.ID as case, F.race2 from normal_fusion F, A where F.result=A.race
添付ファイル