Djember DB設計

前回の続き

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のサンプルデータはこんな感じ。

{
	"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"
	}
}

 

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図

ER図


この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL