From 6db0da2b823cf80b48ef0afa5e49ae424a0c2d17 Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Sat, 13 Aug 2022 17:20:16 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[#11]=20modify:=20DB=20=EB=AA=A8=EB=93=A0?= =?UTF-8?q?=20=ED=85=8C=EC=9D=B4=EB=B8=94=20primary=20key=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 전체적인 flyway migration 파일 수정 - primary key, foreign key 수정을 위한 ALTER 쿼리 내용 추가 --- src/main/resources/application.yml | 2 +- .../V1__Delete_all_tables_if_exists.sql | 5 ++ ...1__Create_cafe.sql => V2__Create_cafe.sql} | 2 - ...cafe_menu.sql => V3__Create_cafe_menu.sql} | 2 - ...fe_image.sql => V4__Create_cafe_image.sql} | 2 - ..._option.sql => V5__Create_menu_option.sql} | 2 - ...etail.sql => V6__Create_option_detail.sql} | 2 - .../migration/V7__Alter_all_tables_pk_fk.sql | 67 +++++++++++++++++++ .../db/seed/R__Insert_Seed_cafe_image.sql | 2 +- .../db/seed/R__Insert_Seed_cafe_menu.sql | 2 +- 10 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 src/main/resources/db/migration/V1__Delete_all_tables_if_exists.sql rename src/main/resources/db/migration/{V001__Create_cafe.sql => V2__Create_cafe.sql} (96%) rename src/main/resources/db/migration/{V002__Create_cafe_menu.sql => V3__Create_cafe_menu.sql} (95%) rename src/main/resources/db/migration/{V003__Create_cafe_image.sql => V4__Create_cafe_image.sql} (94%) rename src/main/resources/db/migration/{V004__Create_menu_option.sql => V5__Create_menu_option.sql} (94%) rename src/main/resources/db/migration/{V005__Create_option_detail.sql => V6__Create_option_detail.sql} (95%) create mode 100644 src/main/resources/db/migration/V7__Alter_all_tables_pk_fk.sql diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e3e2509..61c16f5 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -14,8 +14,8 @@ spring: show-sql: false flyway: baseline-on-migrate: true + baseline-version: 0 locations: classpath:db/migration,classpath:db/seed -# baseline-version: 0 logging: level: diff --git a/src/main/resources/db/migration/V1__Delete_all_tables_if_exists.sql b/src/main/resources/db/migration/V1__Delete_all_tables_if_exists.sql new file mode 100644 index 0000000..b029d87 --- /dev/null +++ b/src/main/resources/db/migration/V1__Delete_all_tables_if_exists.sql @@ -0,0 +1,5 @@ +DROP TABLE IF EXISTS `option_detail`; +DROP TABLE IF EXISTS `menu_option`; +DROP TABLE IF EXISTS `cafe_image`; +DROP TABLE IF EXISTS `cafe_menu`; +DROP TABLE IF EXISTS `cafe`; \ No newline at end of file diff --git a/src/main/resources/db/migration/V001__Create_cafe.sql b/src/main/resources/db/migration/V2__Create_cafe.sql similarity index 96% rename from src/main/resources/db/migration/V001__Create_cafe.sql rename to src/main/resources/db/migration/V2__Create_cafe.sql index 0b07ee1..5941d25 100644 --- a/src/main/resources/db/migration/V001__Create_cafe.sql +++ b/src/main/resources/db/migration/V2__Create_cafe.sql @@ -1,5 +1,3 @@ -DROP TABLE IF EXISTS `cafe`; - CREATE TABLE `cafe` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '카페 ID', `name` varchar(20) NOT NULL COMMENT '카페명', diff --git a/src/main/resources/db/migration/V002__Create_cafe_menu.sql b/src/main/resources/db/migration/V3__Create_cafe_menu.sql similarity index 95% rename from src/main/resources/db/migration/V002__Create_cafe_menu.sql rename to src/main/resources/db/migration/V3__Create_cafe_menu.sql index a2e4b0d..40d197b 100644 --- a/src/main/resources/db/migration/V002__Create_cafe_menu.sql +++ b/src/main/resources/db/migration/V3__Create_cafe_menu.sql @@ -1,5 +1,3 @@ -DROP TABLE IF EXISTS `cafe_menu`; - CREATE TABLE `cafe_menu` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '카페 메뉴 ID', `name` varchar(50) NOT NULL COMMENT '카페 메뉴명', diff --git a/src/main/resources/db/migration/V003__Create_cafe_image.sql b/src/main/resources/db/migration/V4__Create_cafe_image.sql similarity index 94% rename from src/main/resources/db/migration/V003__Create_cafe_image.sql rename to src/main/resources/db/migration/V4__Create_cafe_image.sql index 153e47d..5f7b229 100644 --- a/src/main/resources/db/migration/V003__Create_cafe_image.sql +++ b/src/main/resources/db/migration/V4__Create_cafe_image.sql @@ -1,5 +1,3 @@ -DROP TABLE IF EXISTS `cafe_image`; - CREATE TABLE `cafe_image` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '카페 이미지 ID', `img_url` varchar(255) NOT NULL COMMENT '이미지 경로', diff --git a/src/main/resources/db/migration/V004__Create_menu_option.sql b/src/main/resources/db/migration/V5__Create_menu_option.sql similarity index 94% rename from src/main/resources/db/migration/V004__Create_menu_option.sql rename to src/main/resources/db/migration/V5__Create_menu_option.sql index f39d6b3..7d71d7f 100644 --- a/src/main/resources/db/migration/V004__Create_menu_option.sql +++ b/src/main/resources/db/migration/V5__Create_menu_option.sql @@ -1,5 +1,3 @@ -DROP TABLE IF EXISTS `menu_option`; - CREATE TABLE `menu_option`( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '옵션 ID', `title` varchar(50) NOT NULL COMMENT '메뉴 옵션 이름', diff --git a/src/main/resources/db/migration/V005__Create_option_detail.sql b/src/main/resources/db/migration/V6__Create_option_detail.sql similarity index 95% rename from src/main/resources/db/migration/V005__Create_option_detail.sql rename to src/main/resources/db/migration/V6__Create_option_detail.sql index 5a84814..f68b2ce 100644 --- a/src/main/resources/db/migration/V005__Create_option_detail.sql +++ b/src/main/resources/db/migration/V6__Create_option_detail.sql @@ -1,5 +1,3 @@ -DROP TABLE IF EXISTS `option_detail`; - CREATE TABLE `option_detail` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '옵션 상세 ID', `name` varchar(50) NOT NULL COMMENT '옵션 상세명', diff --git a/src/main/resources/db/migration/V7__Alter_all_tables_pk_fk.sql b/src/main/resources/db/migration/V7__Alter_all_tables_pk_fk.sql new file mode 100644 index 0000000..efe85e8 --- /dev/null +++ b/src/main/resources/db/migration/V7__Alter_all_tables_pk_fk.sql @@ -0,0 +1,67 @@ +-- #### Drop all foreign keys +ALTER TABLE `cafe_menu` DROP FOREIGN KEY `cafe_menu_ibfk_1`; +ALTER TABLE `cafe_menu` DROP INDEX `cafe_id`; + +ALTER TABLE `cafe_image` DROP FOREIGN KEY `cafe_image_ibfk_1`; +ALTER TABLE `cafe_image` DROP INDEX `cafe_id`; + +ALTER TABLE `menu_option` DROP FOREIGN KEY `menu_option_ibfk_1`; +ALTER TABLE `menu_option` DROP INDEX `menu_id`; + +ALTER TABLE `option_detail` DROP FOREIGN KEY `option_detail_ibfk_1`; +ALTER TABLE `option_detail` DROP INDEX `option_id`; + +-- #### Drop all primary keys & Add new primary keys +-- 1. delete auto_increment +ALTER TABLE `cafe` MODIFY id bigint NOT NULL; +ALTER TABLE `cafe_menu` MODIFY id bigint NOT NULL; +ALTER TABLE `cafe_image` MODIFY id bigint NOT NULL; +ALTER TABLE `menu_option` MODIFY id bigint NOT NULL; +ALTER TABLE `option_detail` MODIFY id bigint NOT NULL; + +-- 2. drop primary key +ALTER TABLE `cafe` DROP PRIMARY KEY; +ALTER TABLE `cafe_menu` DROP PRIMARY KEY; +ALTER TABLE `cafe_image` DROP PRIMARY KEY; +ALTER TABLE `menu_option` DROP PRIMARY KEY; +ALTER TABLE `option_detail` DROP PRIMARY KEY; + +-- 3. change 'id' column name and modify to primary key +ALTER TABLE `cafe` + CHANGE `id` `cafe_id` bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '카페 ID'; +ALTER TABLE `cafe_menu` + CHANGE `id` `cafe_menu_id` bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '카페 메뉴 ID'; +ALTER TABLE `cafe_image` + CHANGE `id` `cafe_image_id` bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '카페 이미지 ID'; +ALTER TABLE `menu_option` + CHANGE `id` `menu_option_id` bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '옵션 ID'; +ALTER TABLE `option_detail` + CHANGE `id` `option_detail_id` bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '옵션 상세 ID'; + +-- #### RENAME fk column +ALTER TABLE `menu_option` + CHANGE `menu_id` `cafe_menu_id` bigint unsigned NOT NULL COMMENT '연관된 카페 메뉴 ID'; +ALTER TABLE `option_detail` + CHANGE `option_id` `menu_option_id` bigint unsigned NOT NULL COMMENT '연관된 옵션 ID'; + +-- #### Add foreign keys +ALTER TABLE `cafe_menu` + ADD CONSTRAINT `cafemenu_cafeid_fk` + FOREIGN KEY (`cafe_id`) + REFERENCES `cafe` (`cafe_id`); + +ALTER TABLE `cafe_image` + ADD CONSTRAINT `cafeimage_cafeid_fk` + FOREIGN KEY (`cafe_id`) + REFERENCES `cafe` (`cafe_id`); + +ALTER TABLE `menu_option` + ADD CONSTRAINT `menuoption_cafemenuid_fk` + FOREIGN KEY (`cafe_menu_id`) + REFERENCES `cafe_menu` (`cafe_menu_id`); + +ALTER TABLE `option_detail` + ADD CONSTRAINT `optiondetail_menuoptionid_fk` + FOREIGN KEY (`menu_option_id`) + REFERENCES `menu_option` (`menu_option_id`); + diff --git a/src/main/resources/db/seed/R__Insert_Seed_cafe_image.sql b/src/main/resources/db/seed/R__Insert_Seed_cafe_image.sql index 6522029..460b7e2 100644 --- a/src/main/resources/db/seed/R__Insert_Seed_cafe_image.sql +++ b/src/main/resources/db/seed/R__Insert_Seed_cafe_image.sql @@ -11,7 +11,7 @@ BEGIN SET count_cafe = (SELECT COUNT(*) FROM `cafe`); WHILE(i <= count_cafe) DO SET j = 1; - SET var_cafe_id = (SELECT id FROM `cafe` LIMIT i, 1); + SET var_cafe_id = (SELECT cafe_id FROM `cafe` LIMIT i, 1); WHILE(j <= 3) DO INSERT IGNORE INTO `cafe_image` (img_url, created_at, created_by, updated_at, updated_by, cafe_id) VALUES (CONCAT('test_img_url_', idx_img), now(), 'system', null, null, var_cafe_id); diff --git a/src/main/resources/db/seed/R__Insert_Seed_cafe_menu.sql b/src/main/resources/db/seed/R__Insert_Seed_cafe_menu.sql index 2151e40..e5ee900 100644 --- a/src/main/resources/db/seed/R__Insert_Seed_cafe_menu.sql +++ b/src/main/resources/db/seed/R__Insert_Seed_cafe_menu.sql @@ -8,7 +8,7 @@ BEGIN DECLARE var_cafe_id binary(16); WHILE(i <= 4) DO SET j = 1; - SET var_cafe_id = (SELECT id FROM `cafe` LIMIT i, 1); + SET var_cafe_id = (SELECT cafe_id FROM `cafe` LIMIT i, 1); WHILE(j <= 10) DO INSERT IGNORE INTO `cafe_menu` (name, price, created_at, created_by, updated_at, updated_by, cafe_id) VALUES (CONCAT('커피', j), FLOOR(RAND() * 10 + 1) * 1000, now(), 'system', null, null, var_cafe_id); From 997cacfc35f3162d1e0146f8f14f233559dd989f Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Sat, 13 Aug 2022 17:32:15 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[#11]=20modify:=20primary=20key=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?Entity=20ID=20=EC=9D=B4=EB=A6=84=20=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Column 어노테이션 이용한 column name 명시 --- .../java/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt | 1 + .../io/beaniejoy/dongnecafe/domain/cafe/entity/CafeImage.kt | 1 + .../io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt | 1 + .../io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt | 5 +++-- .../beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt | 5 +++-- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt index bd694fb..e43505b 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/Cafe.kt @@ -14,6 +14,7 @@ class Cafe protected constructor( ) : BaseTimeEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cafe_id", nullable = false) val id: Long = 0L @Column(name = "name", nullable = false) diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeImage.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeImage.kt index 716ed5f..e90c349 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeImage.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeImage.kt @@ -8,6 +8,7 @@ import javax.persistence.* class CafeImage( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cafe_image_id", nullable = false) val id: Long, @Column(name = "img_url", nullable = false) diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt index ed9d00d..fe4bfec 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/CafeMenu.kt @@ -13,6 +13,7 @@ class CafeMenu protected constructor( ) : BaseTimeEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cafe_menu_id", nullable = false) val id: Long = 0L @Column(name = "name", nullable = false) diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt index ac18c11..08dc7d3 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/MenuOption.kt @@ -11,17 +11,18 @@ class MenuOption protected constructor( ) : BaseTimeEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "menu_option_id", nullable = false) val id: Long = 0L @Column(name = "title", nullable = false) val title: String = title @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id", nullable = false) + @JoinColumn(name = "cafe_menu_id", nullable = false) var cafeMenu: CafeMenu? = null protected set - @OneToMany(mappedBy = "menuOption", fetch = FetchType.EAGER, cascade = [CascadeType.ALL]) + @OneToMany(mappedBy = "menuOption", fetch = FetchType.LAZY, cascade = [CascadeType.ALL]) val optionDetailList: MutableList = arrayListOf() companion object { diff --git a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt index 59b83f0..d19ba16 100644 --- a/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt +++ b/src/main/java/io/beaniejoy/dongnecafe/domain/cafe/entity/OptionDetail.kt @@ -12,6 +12,7 @@ class OptionDetail protected constructor( ) : BaseTimeEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "option_detail_id", nullable = false) val id: Long = 0L @Column(name = "name", nullable = false) @@ -20,8 +21,8 @@ class OptionDetail protected constructor( @Column(name = "extra_price", nullable = false) val extraPrice: BigDecimal = extraPrice - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "option_id", nullable = false) + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_option_id", nullable = false) var menuOption: MenuOption? = null protected set