テーブル定義試案

こんな感じかねえ。

leagueテーブル

カラム名 データ型 初期値 値要求 説明
league_id INT auto_increment TRUE リーグのID
title_en VARCHAR NULL TRUE リーグのタイトル(英)
title_ja VARCHAR NULL TRUE リーグのタイトル(日)
limit INT 50 TRUE そのリーグで同時に戦えるKANOJO数
able BOOLEAN FALSE TRUE そのリーグが開催されているかのフラグそのリーグが開催されているかのフラグ

KANOJOたちはリーグごとに登録され、同じリーグの中で争う。
リーグの種類は、随時増やしていこう。

All Genre 無差別
Grass On 眼鏡
Blonde 金髪
Brunet 茶髪
Black 黒髪
Catty 猫耳
Like a Cat ネコっぽさ
Elvish エルフ耳+エルフっぽさ
Chocolate 褐色肌
Alabaster 色白
Fairy コサージュ
President Kaiba 青瞳色白
Alice 金髪色白青瞳
Snow White 黒髪色白
Gal 金髪褐色
Under the eye 泣きぼくろ
Twin Tail ツインテール
Purple Haze 紫髪
Pink Monsoon ピンク髪
Envy Monster 緑瞳
Sheep Count モコモコの髪型

kanojoテーブル

カラム名 データ型 初期値 値要求 説明
kanojo_id INT auto_increment TRUE KANOJOのゲーム内でのID
original_id INT NULL TRUE KANOJOのオリジナルのID
league_id INT NULL FALSE そのKANOJOが現在エントリーしているリーグのID
league_number INT NULL FALSE そのKANOJOの現在エントリーしているリーグでの背番号
entry_timestamp timestamp NULL FALSE そのKANOJOがエントリーした日時
win INT 0 TRUE 現在エントリーしているリーグでの勝ち数
lose INT 0 TRUE 現在エントリーしているリーグでの負け数

KANOJOは名前も登録しない。パースするの面倒だし。オリジナルIDは秘匿される。

cardテーブル

カラム名 データ型 初期値 値要求 説明
card_id INT auto_increment TRUE 対戦カードのID
league_id INT NULL TRUE その対戦カードの所属するリーグのID
league_number1 INT NULL TRUE その対戦カードで指定される背番号(若)
league_number2 INT NULL TRUE その対戦カードで指定される背番号(老)
vote_count INT 0 TRUE その対戦カードの投票数

対戦カードはこれで管理されるので、対戦の偏りはこれで極力解消されるはず。

matchテーブル

カラム名 データ型 初期値 値要求 説明
match_id INT auto_increment TRUE 対戦記録
match_timestamp timestamp timestamp() TRUE その対戦の行われた日時
league_id INT NULL TRUE その対戦の行われたリーグのID
winner INT NULL TRUE その対戦での勝者のKANOJOのID
looser INT NULL TRUE その対戦での敗者のKANOJOのID

実際の対戦記録をこれに保存する。

prizeテーブル

カラム名 データ型 初期値 値要求 説明
prize_id INT auto_increment TRUE プライズのID
kanojo_id INT NULL TRUE そのプライズを得たKANOJOのID
league_id INT NULL TRUE そのプライズを発生させたリーグのID
win INT 0 TRUE 勝ち数
lose INT 0 TRUE 負け数
rate DOUBLE 0 TRUE 勝ち数/(勝ち数+負け数)
regist_date timestamp timestamp() TRUE そのプライズの発生年月

あるKANOJOがそのリーグを「卒業」すると与えられるプライズ。別表を使ってrateからrankが算出される。
rankはSABCDEFZの7段階。全勝もしくは全敗しないとSやZは発生しないが。

rateからrankの計算

rate rank
1.00 S
0.91以上 A
0.67以上 B
0.33以上 C
0.09以上 D
0.01以上 E
0 Z