質問: J-POPの曲をSQLiteのデータベースに入れました。 こんな感じです。 ``` CREATE TABLE songs( artist text, title text, lyricist text, composer text, releasedate text, memo text, lyric text); ``` 曲のなかには、売り上げがオリコンのランキングトップ100に入っているものもあります。 なので、ランクインしている年も記録したいと思い、memoのカラムに「oricon2016」とかって書きました。 ところが、曲によっては2015年と2016年の両方でランクインしていることもあり、memoのカラムに書くのはおかしい感じだと思いました。 調べてみると、正規化というものが必要だとわかったので、別のテーブルを用意しようと思います。 そこで質問があります。 oriconrankingというテーブルを作るとして、どういうカラムを用意すればいいでしょうか? ``` CREATE TABLE oriconranking( id INTEGER oricon2017 INTEGER, oricon2016 INTEGER, oricon2015 INTEGER); ``` 疑問点がふたつあります。 1. idはどうやって決めたらいいでしょうか? songsテーブルのROWIDを使ってもいいですか? それとも自分で決めたほうがいいですか? 2. 続くカラムに、1か0を入れればいい(2015年と2016年の両方でランクインしている曲なら`oricon2016`と`oricon2015`だけ1にして、残りを0にする)かと思ったんですが、ほかにいい方法ありますか? ほとんど0ばっかりの表になっちゃうし、毎年カラムを足していくのかっこわるいでしょうか...。 よろしくお願いします!
回答: 下記のように定義すると毎年変更する必要はなくなります。 oriconrankingテーブル id:プライマリーキー song_id:songsのプライマリーキー year:ランクインした年(2017,2016等)