えむけーろぐ

間違った事を書いていたらやさしく教えてください

近況

苫小牧高専情報工学科名物(?)のグループ実験をやっている。PHPで自動車検索システムを作ります。

いろんな会社のいろんな車がExcelファイルにまとめられているので、それをどうにかしてデータベースにぶち込んで、それを検索したり在庫を増やしたり減らしたりできるWebアプリケーションをPHPで、グループで作るやつ。

実験書だとExcelVBAを使ってデータをDBに投入する感じで書いてあるけど、道具はなんでもいいらしいので、僕はRubyでサクッとやるつもりだった。だったんだけど、どうもガチガチに正規化されたテーブル設計(実験書で指定されている)と僕のActiveRecord脳は相性が悪いようで……。

企業名テーブル(トヨタやらダイハツやらの企業名と、int型の企業コードのみ格納されたテーブル)や、車名テーブル(ブーンやらプリウスやらの車名と、int型の車名コードのみ格納されたテーブル)、車種テーブル(軽自動車やらセダンやらの車種と、int型の車種コード)を用意して、その後仕様テーブルを用意する。この使用テーブルには、企業名・車名・車種のコードと、あとはそれぞれの仕様(定員とかグレードとか。30カラムくらいあった気がする)を格納した仕様テーブルを用意し、最後に仕様ごとに在庫数を管理する在庫テーブルを用意して……という感じ。うーん、DBの正規化理論(?)的にはこれが正しいんだろうか。O/Rマッパーに頼って生きてきた僕にとってはなんでこんなにテーブル増やすのか意味不明という感じであった。DBの授業でやったから理解はできるけど、とにかくめんどくさい……。

とりあえず、ExcelファイルをCSVファイルにエクスポートして、Rubyのハッシュオブジェクトに変換し、それをSequelを使ってDBにぶち込む感じでやった。

初期データの投入ができたので、次回からはPHPを書いていく感じかなー。学校の実験はRailsから外れてプログラミングをする良い練習になる。がんばろう。

追記

izuminさんからこんなリプライが来て、いろいろやり取りした結果学びがあったので共有します。詳細はツイートを辿って欲しい。

「車テーブル作ってそこに全部ぶち込めばいいじゃん、って思ってたけど、そうでもなさそう。」という事がわかった。

例えば、フランス語表記の車名も追加したいってなったとき、車テーブルにすべてをぶち込んでしまっていると、車の台数分の更新処理(フランス語車名カラムを追加する)が走るけど、車名テーブルに切り出してあれば、そこにフランス語車名カラムを追加するだけでDB側の変更はOKということになる。たぶんそんな感じ。

DB設計の知識も蓄えていかなければなぁ……。