■
データベーステーブルを作っていると、型に配列を使いたくなって困る。特にInt配列。私の理解が浅いせいなのだけど。例えばWC3の大会で使うMappoolとか。MapをIDで管理して定義するとして、一つの大会で使うMapを一つ一つのIDに対して可否を設定する方法を最初思いついたのだけど、これだと新しいMapを増やされるとテーブル定義を拡張しなければならない。
CREATE TABLE Tournament(
id int NOT NULL autoincrement,
use_TM tinyint(1) default '0',
use_TR tinyint(1) default '0',
use_LT tinyint(1) default '0',
use_TS tinyint(1) default '0',
use_EI tinyint(1) default '0',
use_GW tinyint(1) default '0'
use_??? tinyint(1) default '0',
...
primary key id
);
で、配列なら
use_MAP int[64]
とかやっといて、Int配列に0とか1とか設定すれば定義変更しなくていいじゃんと反射的に考えたもののどうもMySQLにそんな型は無いらしい。というか取り出す時もいらんもんいっぱいついてきていまいちだし、こんな発想をしてしまうのはDB慣れしてないからなんだろうな。
おそらく正解はtournamentのプライマリキーを含むMappoolテーブルを作ること。
CREATE TABLE Mappool(
id int NOT NULL autoincrement,
tournament_id int NOT NULL,
map_id int NOT NULL,
primary key id
);
これを使いたいMapの数だけInsertしていけば、Mapの種類が増えてもテーブル定義を変えなくていいはず。
実際に引き出すときはtournamentのプライマリキーで引き出す。
DBに関して私のやってることは基本中の基本を知らないNoobishな感じ。手探り状態とは正にこのこと。これが最良の方法である保障も無い。あれこれ思考錯誤するのは楽しいけど、もう少し基本を押さえて始めるべきだったのかも。