前回の続き
Djemberは以下の5つのテーブルで構成されている。
- users – ユーザー情報
- scores – スコア情報
- tags – タグ情報
- user_tags – ユーザータグ情報
- score_tags – スコアタグ情報
当初はユーザー情報とスコア情報の2つのみの予定だったんだけど、
タグをつける機能を追加した事から、一気に5つになってしまった。
各テーブルの構造は以下の通り。
users – ユーザー情報
ユーザーの情報を管理するテーブル。
フィールド名 | 型 | 属性 | NULL | その他 |
---|---|---|---|---|
user_id | bigint(20) | unsigned | NOT | AUTO_INCREMENT PRIMARY KEY |
user_name | varchar(60) | NOT | KEY | |
user_email | varchar(100) | NOT | KEY | |
user_pass | varchar(64) | NOT | 暗号化して格納 | |
user_memo | longtext | NOT | ||
user_permission | int(1) | NOT | ||
user_date | timestamp | NOT | DEFAULT CURRENT_TIMESTAMP |
scores – スコア情報
スコアの情報を管理するテーブル。
変更を容易にするため、パートやリズム長さ、音種をjson形式で格納している。
フィールド名 | 型 | 属性 | NULL | その他 |
---|---|---|---|---|
score_id | bigint(20) | unsigned | NOT | AUTO_INCREMENT PRIMARY KEY |
score_name | varchar(60) | NOT | ||
score_memo | longtext | NOT | ||
score_share | int(1) | NOT | ||
score_owner | bigint(20) | unsigned | NOT | |
score_measure | int(1) | NOT | ||
score_tempo | int(3) | NOT | ||
score_info | longtext | NOT | json形式で格納。part_length:パート長、part_play:再生する/しない、part_notes:譜面情報(カンマ区切り) | |
score_date | timestamp | NOT | DEFAULT CURRENT_TIMESTAMP |
ちなみに、score_infoのサンプルデータはこんな感じ。
[code lang=”php”]
{
"signal":{
"part_length":"4",
"part_play":"1",
"part_notes":"4,0,2,2,0,2,0,2,2,0,3,3,3,0,0,0"
},
"djembe1":{
"part_length":"2",
"part_play":"1",
"part_notes":"1,0,2,2,0,0,3,0"
},
"djembe2":{
"part_length":"2",
"part_play":"1",
"part_notes":"11,11,0,12,11,11,12,0"
},
"sanglocke":{
"part_length":"2",
"part_play":"1",
"part_notes":"19,0,19,19,0,19,19,0"
},
"sangban":{
"part_length":"2",
"part_play":"1",
"part_notes":"20,0,0,21,0,0,20,0"
},
"kenglocke":{
"part_length":"1",
"part_play":"1",
"part_notes":"22,22,0,0"
},
"kenkeni":{
"part_length":"1",
"part_play":"1",
"part_notes":"23,23,0,0"
},
"dumglocke":{
"part_length":"4",
"part_play":"1",
"part_notes":"25,0,25,25,0,25,25,0,25,0,25,0,25,0,25,0"
},
"dumumba":{
"part_length":"8",
"part_play":"1",
"part_notes":"0,0,0,26,0,0,0,0,0,0,0,0,26,0,26,0,26,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0"
}
}[/code]
tags – タグ情報
タグの名称を管理するテーブル。
タグはユーザー間で共有するため、ユーザー、スコアに関係なく名称が一意となるように管理している。
フィールド名 | 型 | 属性 | NULL | その他 |
---|---|---|---|---|
tag_id | bigint(20) | unsigned | NOT | AUTO_INCREMENT |
tag_name | varchar(60) | NOT |
score_tags – スコアタグ情報
どのスコアにどのタグがつけられているかを管理するテーブル。
スコア更新のたびに、Delete/Insertで更新する。
フィールド名 | 型 | 属性 | NULL | その他 |
---|---|---|---|---|
score_id | bigint(20) | unsigned | NOT | |
tag_id | bigint(20) | unsigned | NOT |
user_tags – ユーザータグ情報
どのユーザーがどのタグを利用しているかを管理しているテーブル。
仮に他ユーザが同一名称のタグを登録していた場合、このテーブルのデータのみが追加される。
フィールド名 | 型 | 属性 | NULL | その他 |
---|---|---|---|---|
user_id | bigint(20) | unsigned | NOT | |
tag_id | bigint(20) | unsigned | NOT |
最後にER図。
こんだけシンプルだと見やすいね。
ER図
コメント