音楽サークル用管理システム制作③設計とテストデータ作成

はじめに

通勤時間など使って設計について考えてみたのでまとめました。

これをもとにDB関連を早速作っていこうと思います。

設計

✅テーブル

・users
admin_flgカラムでシステム権限
→幹事権限付与、ユーザー削除
manage_flgカラムで幹事権限
→シート作成、編集可能
・sheets
user_id:紐付ユーザーは削除可能
・instruments
users,sheetsに紐づく
(以下want)
・circles

✅機能

・ユーザー登録(編集可能)
・シート管理
(以下want)
・ユーザー一覧、プロフ機能(サークル紐付)
・サークル登録
・掲示板機能
・サークルの壁越えたイベント板 ※幹事承認必要
・課題曲ランキング

✅URL

・/login
・/register
・/sheets
(以下want)
・/admin ※システム管理ログイン

✅画面

・メイン画面(シート一覧)
・ヘッダー(シート登録、ログイン関連)
(以下want)
・システム管理画面
・ユーザー詳細画面

マイグレーションファイル作成

基本コマンド

$ php artisan make:migration create_users_table --create=users

usersテーブル


public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('login_id')->unique();
        $table->string('password');
        $table->integer('admin_flg')->default(0);
        $table->integer('manage_flg')->default(0);
        $table->rememberToken();
        $table->timestamps();
    });
}

※emailは扱いたくないのでログインIDをいったん使うことに

sheetsテーブル


Schema::create('sheets', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->bigInteger('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users');
    //usersテーブルに存在するidと同じ値しか入れられなくする。
    $table->string('title');
    $table->string('body');
    $table->string('song_1');
    $table->string('song_2');
    $table->string('song_3');
    $table->string('song_4');
    $table->string('song_5');
    $table->string('song_6');
    $table->string('song_7');
    $table->string('image')->default('default.jpeg');
    $table->integer('status')->default(0);
    $table->timestamps();
});

instrumentsテーブル


public function up()
{
    Schema::create('instruments', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->bigInteger('sheet_id')->unsigned();
        $table->foreign('sheet_id')->references('id')->on('sheets');
        $table->string('song_column');
        $table->string('instrument');
        $table->timestamps();
    });
}

🤔すぐ破綻しそうな感があって怖い。。。随時修正。。。※songsテーブル作るかも悩んだ。

とりあえずmigrate

$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.03 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.02 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.01 seconds)
Migrating: 2020_10_12_000000_create_sheets_table
Migrated:  2020_10_12_000000_create_sheets_table (0.03 seconds)
Migrating: 2020_10_15_141733_create_instruments_table
Migrated:  2020_10_15_141733_create_instruments_table (0.05 seconds)

※このタイミングでモデルも作成済み。

テストデータ挿入

※ソース割愛

参考になったサイト。

[Laravel5.1]Fakerチートシート
【laravel】laravelの命名規則

以下で確認OK

mysql> select * from instruments where user_id = 1 and sheet_id = 1;
+----+---------+----------+-------------+------------+---------------------+---------------------+
| id | user_id | sheet_id | song_column | instrument | created_at          | updated_at          |
+----+---------+----------+-------------+------------+---------------------+---------------------+
|  1 |       1 |        1 | song_1      | guitar     | 2020-10-15 15:21:22 | 2020-10-15 15:21:22 |
|  2 |       1 |        1 | song_3      | guitar     | 2020-10-15 15:21:22 | 2020-10-15 15:21:22 |
+----+---------+----------+-------------+------------+---------------------+---------------------+

おわりに

sheetsテーブルのsongカラムは一旦7曲以上使わないだろうと想定した実装にしてしまったけど、これ拡張性考えるとsongsテーブルを別途作ってレコードで積んでいった方が良い気がしてきた。。。笑

後ほど修正して以下のような感じに。

mysql> select * from instruments where user_id = 1 and sheet_id = 1;
+----+---------+----------+---------+------------+---------------------+---------------------+
| id | user_id | sheet_id | song_id | instrument | created_at          | updated_at          |
+----+---------+----------+---------+------------+---------------------+---------------------+
|  1 |       1 |        1 |       1 | guitar     | 2020-10-15 15:49:45 | 2020-10-15 15:49:45 |
|  2 |       1 |        1 |       3 | guitar     | 2020-10-15 15:49:45 | 2020-10-15 15:49:45 |
+----+---------+----------+---------+------------+---------------------+---------------------+

その他開発備忘録

・認証関連のリダイレクト先はルートに変更。

コメントを残す