やっとできたぞER図!
前回、ER図書くところまで到達できなかった(MySQLの基本的な書き方がわからなかったので)
そこを勉強しなおして、かけるようになりました。
それで書いてみたER図がこちら。
人生初のちゃんと書いたぞ(書けたのか?)ER図!
これでMySQLにデータベースが作れる!
ER図の作成の手順おさらい
- テーブルを作成する
- テーブルにカラムを設定する
- テーブル同士のリレーションシップを設定する
メモ
テーブルを繋ぐリレーションシップの1:1, 1:nの振り方にまだ不安があり
慣れなんでしょうけどどっちがどっちに対する依存?なのかが概念としてつかめていない。
(ちなみにこのworkbenchの書き方カラスの足みたいなのでcrow's footとか呼ぶらしい)
決まっているもの1に対しての追加されていくものが多?引き続き勉強する
マウスオーバーするとこのように関係性が色で出るのでこれみながらつかむ
主キーはテーブルごとに必ず入れる
入れないケースは無くはないけれど、少ないそうで。
入れておいた方があとで修正するときなど、何かと便利
別テーブルにするもののコツ
「種別」のように決まり切ったものは切り離すとやりやすい。
変更も加えやすい
(もっとはっきり書きたいけどつかみきれてないなこれは)
誰が何をどうしたか
意識する
実際にターミナルでDBに突っ込んでみよう
コピーしたいテーブルを右クリック。
'copy SQL to Clipboard' をクリック
これでコードがクリップボードにコピーされました。
適当なエディタに貼り付けてみる
CREATE TABLE IF NOT EXISTS `mydb`.`otsuka_item` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主キー',
`name` VARCHAR(45) NOT NULL COMMENT '商品名',
`price` INT UNSIGNED NOT NULL COMMENT '価格',
`stock` INT UNSIGNED NULL COMMENT '在庫数',
`created_at` DATETIME NOT NULL COMMENT '作成日時',
`updated_at` DATETIME NOT NULL COMMENT '更新日時',
`deleted_at` DATETIME NOT NULL COMMENT '削除日時',
`temparature_id` INT NOT NULL,
`package_id` INT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE,
UNIQUE INDEX `price_UNIQUE` (`price` ASC) VISIBLE,
INDEX `fk_item_temparature1_idx` (`temparature_id` ASC) VISIBLE,
INDEX `fk_item_package1_idx` (`package_id` ASC) VISIBLE,
CONSTRAINT `fk_item_temparature1`
FOREIGN KEY (`temparature_id`)
REFERENCES `mydb`.`otsuka_temparature` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_item_package1`
FOREIGN KEY (`package_id`)
REFERENCES `mydb`.`otsuka_package` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = '商品'
必要な部分だけにする
一行目の
`mydb`.
12行目〜25行目まで削除!
UNIQUE INDEX `name_UNIQUE` (`name` ASC) VISIBLE,
UNIQUE INDEX `price_UNIQUE` (`price` ASC) VISIBLE,
INDEX `fk_item_temparature1_idx` (`temparature_id` ASC) VISIBLE,
INDEX `fk_item_package1_idx` (`package_id` ASC) VISIBLE,
CONSTRAINT `fk_item_temparature1`
FOREIGN KEY (`temparature_id`)
REFERENCES `mydb`.`otsuka_temparature` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_item_package1`
FOREIGN KEY (`package_id`)
REFERENCES `mydb`.`otsuka_package` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
こんな風になったらおk
CREATE TABLE IF NOT EXISTS `otsuka_item` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主キー',
`name` VARCHAR(45) NOT NULL COMMENT '商品名',
`price` INT UNSIGNED NOT NULL COMMENT '価格',
`stock` INT UNSIGNED NULL COMMENT '在庫数',
`created_at` DATETIME NOT NULL COMMENT '作成日時',
`updated_at` DATETIME NOT NULL COMMENT '更新日時',
`deleted_at` DATETIME NOT NULL COMMENT '削除日時',
`temparature_id` INT NOT NULL,
`package_id` INT NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
COMMENT = '商品';
他のテーブルも同様の形式にしておく。
久々のターミナル
dockerに入る(前にMySQLに直接入ろうとしてしまい、linux環境にもMySQLが入っていたためめちゃくちゃハマってしまった。できないできないで1日使ってもうたorz)
docker-compose start
以下を打ち込んでroot@80fb78aabf71:/# になる(よくわかってないぞ)
docker-compose exec db bash
MySQLにはいるぞ
mysql -uroot -proot
使うデータベースを選ぶぞ
use (DB名);
やっとここまできて、先ほどまとめたCREATE〜以下を打ち込む。
するとテーブルが作成されていく。
全部作成したら確認!
mysql> show tables
-> ;
+------------------------+
| Tables_in_******* |
+------------------------+
| otsuka_drink_history |
| otsuka_item |
| otsuka_package |
| otsuka_record |
| otsuka_temparature |
| user |
| user_detail |
+------------------------+
7 rows in set (0.00 sec)
ひとまずこれでテーブルができたぜ!
今回はここまで。