質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

2665閲覧

データベースの正規化(idの決めかたとカラムのつくりかたを知りたい!)

hacosato

総合スコア48

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

1クリップ

投稿2017/10/22 02:23

J-POPの曲をSQLiteのデータベースに入れました。
こんな感じです。

SQL

1CREATE TABLE songs( 2 artist text, 3 title text, 4 lyricist text, 5 composer text, 6 releasedate text, 7 memo text, 8 lyric text);

曲のなかには、売り上げがオリコンのランキングトップ100に入っているものもあります。
なので、ランクインしている年も記録したいと思い、memoのカラムに「oricon2016」とかって書きました。

ところが、曲によっては2015年と2016年の両方でランクインしていることもあり、memoのカラムに書くのはおかしい感じだと思いました。

調べてみると、正規化というものが必要だとわかったので、別のテーブルを用意しようと思います。

そこで質問があります。
oriconrankingというテーブルを作るとして、どういうカラムを用意すればいいでしょうか?

SQL

1CREATE TABLE oriconranking( 2 id INTEGER 3 oricon2017 INTEGER, 4 oricon2016 INTEGER, 5 oricon2015 INTEGER);

疑問点がふたつあります。
1.
idはどうやって決めたらいいでしょうか? songsテーブルのROWIDを使ってもいいですか? それとも自分で決めたほうがいいですか?

続くカラムに、1か0を入れればいい(2015年と2016年の両方でランクインしている曲ならoricon2016oricon2015だけ1にして、残りを0にする)かと思ったんですが、ほかにいい方法ありますか? ほとんど0ばっかりの表になっちゃうし、毎年カラムを足していくのかっこわるいでしょうか…。

よろしくお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記のように定義すると毎年変更する必要はなくなります。
oriconrankingテーブル
id:プライマリーキー
song_id:songsのプライマリーキー
year:ランクインした年(2017,2016等)

投稿2017/10/22 02:50

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hacosato

2017/10/22 02:55

ありがとうございます! 一瞬わかんなかったんですが、わかったと思います! もしかして、song_idが同じ行が複数あってもいいってことでしょうか? カラムyearのデータ型はリストみたいな感じにするのではなくて、あくまでINTEGERなんですよね?
yona

2017/10/22 03:24

1つの曲が複数の年にランクインするので、song_idは重複します。 また、yearはintegerやtextのどちらでもいいと思います。
hacosato

2017/10/22 03:58

ありがとうございます! 理解できました。 oriconrankingテーブルのプライマリーキーはとくに使うあてがないと思うんですが、やっぱり設定しておいたほうがいいものなのでしょうか?
yona

2017/10/22 04:28

それは他のテーブルに合わせた方がいいですね。
hacosato

2017/10/22 04:29

やってみます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問