質問: 勉強のために、SQLiteで音楽のデータベースを作っています。ふわっとしたお話なのですが...。 songsというテーブルがあり、title、artist、type(楽曲の種類・後述)、length(曲の長さ)、releasedDate(リリース日)、URLといったカラムがあります。 ほかにもいろいろありますがここでは省略します。 そのテーブルに、 **type=1:CDの発売をもってリリースとされる楽曲**(たとえばAKB48『365日の紙飛行機』)と、 **type=2:動画公開をもってリリースとされる、それ以外の楽曲**(たとえば黒うさP feat.初音ミク『千本桜』)を 両方入れようと思っています。 type=2のような曲にはURLが存在するので記入します。type=1のような曲には記入しません。 releasedDateには、type=1の場合CDの発売日、type=2の場合動画の公開日などが入ります。 type=1とtype=2を比べて、length(曲の長さ)に違いがあるかなどをのちのち調べるためにデータを作ります。 ...といった状況のときに、type=1とtype=2のデータを同じテーブルに入れるのはアリでしょうか? わたしはべつにいいかなと思っていたんですが、 ここに、リファクタリングすべきデータベースの例として、 > > 複数の目的に使われるカラム > > レコードの属性に合わせて値の意味が変わるカラム > > 会員だと入会日、スタッフだと入社日とするなど > > > とあったので、自分の方針はよくないかなぁとも思い相談しました。 この場合、テーブルを分けるのがいいような気もしますが、 「あっやっぱり楽曲ごとに作曲者の情報も載せることにしよう! composerカラムを作るぞ!」 と(あまりよくないですが)なった場合、ふたつのテーブルに対して同じカラムを増やしたものを用意したりするのはよい方法とはいえない気もします。 最終的には自分がどうしたいか?みたいなところに行き着く感じもするのですが、このような状況で、データベース強者はどのような基準で判断して設計していくのかについて、お話を聞かせていただけたらと思います!
回答: 「結構似てる」はもはや別のものでは。