LoginSignup
0
0

Laravel + Vite でCRUDを使うアプリケーションを作る(DB作成編)

Last updated at Posted at 2023-09-29

こちらの記事の続きになります。

結局何もいいアイディアは思い浮かばないので管理者、ユーザーのいる Todoアプリケーションでも作ろうと思います。

想定としては、企業の上司と部下がいて上司は部下たちのTODOを見れるようになっていてカテゴリーとかを設定できるTODOアプリみたいなイメージです。

今回はDBを作成したいと思います。
まずはER図を書きました。こんな感じで作ろうと思います。

スクリーンショット 2023-09-29 22.17.46.png

Mysql Work BenchでER図を作成すると、DDL文を生成できます。こちらを活用してsqlを作成します。

-- -----------------------------------------------------
-- Schema mysql_test_db
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mysql_test_db` DEFAULT CHARACTER SET utf8 ;
USE `mysql_test_db` ;

-- -----------------------------------------------------
-- Table `mysql_test_db`.`enterprises`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mysql_test_db`.`enterprises` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  `is_enable` VARCHAR(45) NULL,
  `update_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mysql_test_db`.`admins`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mysql_test_db`.`admins` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  `login_id` VARCHAR(45) NULL,
  `password` VARCHAR(256) NULL,
  `is_enable` VARCHAR(45) NULL,
  `enterprise_id` INT NOT NULL,
  `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  INDEX `fk_Admin_enterprise_idx` (`enterprise_id` ASC) ,
  UNIQUE INDEX `login_id_UNIQUE` (`login_id` ASC) ,
  CONSTRAINT `fk_Admin_enterprise`
    FOREIGN KEY (`enterprise_id`)
    REFERENCES `mysql_test_db`.`enterprises` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mysql_test_db`.`users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mysql_test_db`.`users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  `login_id` VARCHAR(45) NULL,
  `password` VARCHAR(256) NULL,
  `enterprise_id` INT NOT NULL,
  `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `login_id_UNIQUE` (`login_id` ASC) ,
  INDEX `fk_user_enterprise1_idx` (`enterprise_id` ASC) ,
  CONSTRAINT `fk_user_enterprise1`
    FOREIGN KEY (`enterprise_id`)
    REFERENCES `mysql_test_db`.`enterprises` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mysql_test_db`.`categories`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mysql_test_db`.`categories` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  `enterprise_id` INT NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_group_enterprise1_idx` (`enterprise_id` ASC) ,
  CONSTRAINT `fk_group_enterprise1`
    FOREIGN KEY (`enterprise_id`)
    REFERENCES `mysql_test_db`.`enterprises` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mysql_test_db`.`todos`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mysql_test_db`.`todos` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(100) NULL,
  `content` VARCHAR(1000) NULL,
  `user_id` INT NOT NULL,
  `enterprise_id` INT NOT NULL,
  `group_id` INT NOT NULL,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  INDEX `fk_todo_user1_idx` (`user_id` ASC) ,
  INDEX `fk_todo_enterprise1_idx` (`enterprise_id` ASC) ,
  INDEX `fk_todo_group1_idx` (`group_id` ASC) ,
  CONSTRAINT `fk_todo_user1`
    FOREIGN KEY (`user_id`)
    REFERENCES `mysql_test_db`.`users` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_todo_enterprise1`
    FOREIGN KEY (`enterprise_id`)
    REFERENCES `mysql_test_db`.`enterprises` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_todo_group1`
    FOREIGN KEY (`group_id`)
    REFERENCES `mysql_test_db`.`categories` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

これをDBコンテナ内で実行、もしくはMysqlWorkbenchで接続してsqlを実行するとデータベースが作成できます。
一つの方法として DBコンテナにアクセスして実行する方法を書いていこうと思います。

まず、以下のコマンドでDockerのDBコンテナにアクセスします。

docker compose exec db bash

DockerのDBコンテナに入ると以下のコマンドでMysqlに入ります。

mysql -u DBユーザー名(今回だとadmin) -p

そして Mysql内で上のsqlをコピペするとDBを作成できます。

そして以下のように確認できます。

スクリーンショット 2023-09-29 22.59.47.png

このリポジトリでコードを公開しておりますので必要であればご覧ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0