其他 #440
Updated by Junyi Zhang 10 months ago
*Background*
# New requirement for v4.0 OTS
See: OneDrive\赤蓝商贸(上海)有限公司\Shanghai Group - IT\开发相关\OTS V4\开发需求
*Task Details*
* *Rule (v4.0)*
# %{color:red}DONE%: ENGINE = MyISAM -> InnoDB
## 修改date/datetime的值 0000-0000-000 -> null (遇到在修改)
<pre>
sample:
1. 查询所有默认值为0000-00-00 / 0000-00-00 00:00:00的表
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT
FROM information_schema.columns
WHERE column_default = '0000-00-00'
AND table_schema = 'redblue_ots4.0';
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT
FROM information_schema.columns
WHERE column_default = '0000-00-00 00:00:00'
AND table_schema = 'redblue_ots4.0';
2. 修改列:允许为null,默认值为null
ALTER TABLE `ots_product_discount`
CHANGE COLUMN `date_start` `date_start` DATE NULL DEFAULT NULL AFTER `price`,
CHANGE COLUMN `date_end` `date_end` DATE NULL DEFAULT NULL AFTER `date_start`;
Note: 已修改的表
ots_zone_to_geo_zone (如果数据是 0000-00-00 00:00:00的话,需要修改成有效的 datetime,然后执行以上SQL)
ots_return
ots_product
ots_product_special
ots_product_discount
ots_coupon
</pre>
## 修改表(一个一个执行)的ENGINE = MyISAM -> InnoDB
<pre>
sample:
1. 先查需要修改的表
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;')
FROM information_schema.tables
WHERE table_schema = 'redblue_ots4.0'
AND engine = 'MyISAM';
2. MyISAM -> InnoDB
ALTER TABLE `ots_order_status` ENGINE=InnoDB;
</pre>
# %{color:red}DONE%: Don’t need to specify the length or precision for your *numeric* data. (遇到在修改)
<pre>
SELECT table_name, column_name, data_type, numeric_precision, numeric_scale
FROM information_schema.columns
WHERE table_schema = 'redblue_ots4.0'
AND data_type IN ('tinyint','int', 'bigint', 'decimal', 'numeric', 'float', 'double')
AND (numeric_precision IS NOT NULL OR numeric_scale IS NOT NULL);
</pre>
# %{color:red}DONE%: Set the default text type obviously -> utf8mb4_general_ci
<pre>
1. 查询表COLLATE为'utf8mb3_general_ci'的表
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'redblue_ots4.0'
AND table_collation = 'utf8mb3_general_ci';
2. 修改:utf8mb3_general_ci -> UTF8MB4_GENERAL_CI
ALTER TABLE `ots_unit_class`
CONVERT TO CHARACTER SET utf8mb4
COLLATE UTF8MB4_GENERAL_CI;
</pre>
# %{color:red}TO-DO%: 需要维护v3数据库
* *Record all SQL changes (v4)*: ENGINE = MyISAM -> InnoDB
|. Issue |. SQL |
| #441 | <pre>
ALTER TABLE `ots_order_status`
ADD COLUMN `code` INT NOT NULL AFTER `name`,
ADD COLUMN `hex` VARCHAR(32) NOT NULL DEFAULT '' AFTER `code`,
ALTER TABLE ots_order_status
ADD COLUMN status TINYINT NOT NULL DEFAULT '1' AFTER hex;
ALTER TABLE ots_order_status
ADD COLUMN shipped TINYINT NOT NULL DEFAULT '0' AFTER hex,
ADD COLUMN sort_order INT NOT NULL DEFAULT (0) AFTER shipped;
</pre> |
| #454 |
<pre>
CREATE TABLE `ots_unit_class` (
`unit_class_id` INT NOT NULL AUTO_INCREMENT,
`status` TINYINT(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`unit_class_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4_general_ci;
CREATE TABLE `ots_unit_class_description` (
`unit_class_id` INT NOT NULL AUTO_INCREMENT,
`language_id` INT NOT NULL,
`title` VARCHAR(32) NOT NULL,
`unit` VARCHAR(4) NOT NULL,
PRIMARY KEY (`unit_class_id`, `language_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4_general_ci;
---------------------------------------------------------
ALTER TABLE `ots_manufacturer`
ADD COLUMN `status` TINYINT NOT NULL DEFAULT (0) AFTER `manufacturer_id`,
ADD COLUMN `country_id` INT NOT NULL AFTER `name`,
ADD COLUMN `zone_id` INT NOT NULL AFTER `country_id`,
ADD COLUMN `address_1` VARCHAR(128) NOT NULL DEFAULT '' AFTER `zone_id`,
ADD COLUMN `address_2` VARCHAR(128) NOT NULL DEFAULT '' AFTER `address_1`,
DROP COLUMN `image`;
ALTER TABLE `ots_manufacturer`
ADD COLUMN `city` VARCHAR(128) NOT NULL DEFAULT '' AFTER `zone_id`;
DROP TABLE `ots_manufacturer_to_store`;
ALTER TABLE `ots_category`
DROP COLUMN `image`,
DROP COLUMN `top`,
DROP COLUMN `column`;
ALTER TABLE `ots_category_description`
DROP COLUMN `meta_title`,
DROP COLUMN `meta_description`,
DROP COLUMN `meta_keyword`;
DROP TABLE `ots_category_filter`;
DROP TABLE `ots_category_to_layout`;
DROP TABLE `ots_category_to_store`;
---------------------------------------------------------
DROP TABLE `ots_option`;
CREATE TABLE `ots_option` (
`option_id` INT NOT NULL AUTO_INCREMENT,
`et_option_id` INT NOT NULL DEFAULT '0',
`type` VARCHAR(32) NOT NULL,
`option_delivery_min` INT NOT NULL DEFAULT '0',
`option_delivery_max` INT NOT NULL DEFAULT '0',
`delivery` TINYINT NOT NULL DEFAULT '0',
`extra` TINYINT NOT NULL DEFAULT '0',
`sort_order` INT NOT NULL,
PRIMARY KEY (`option_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
DROP TABLE `ots_option_description`;
CREATE TABLE `ots_option_description` (
`option_id` INT NOT NULL,
`language_id` INT NOT NULL,
`name` VARCHAR(128) NOT NULL,
`short_text` TEXT NOT NULL,
`description` TEXT NOT NULL,
PRIMARY KEY (`option_id`, `language_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
DROP TABLE `ots_option_value`;
CREATE TABLE `ots_option_value` (
`option_value_id` INT NOT NULL AUTO_INCREMENT,
`et_option_value_id` INT NOT NULL DEFAULT '0',
`option_id` INT NOT NULL,
`image` VARCHAR(255) NOT NULL,
`class` VARCHAR(45) NOT NULL DEFAULT '',
`option_value_price` VARCHAR(255) NULL DEFAULT NULL,
`color_id` INT NULL DEFAULT NULL,
`option_type` ENUM('fixed','percent','formula') NOT NULL DEFAULT 'fixed',
`option_value_startcost_price` VARCHAR(255) NULL DEFAULT NULL,
`option_value_startcost_type` ENUM('fixed','percent','formula') NOT NULL DEFAULT 'fixed',
`option_value_startcost_quantity` INT NOT NULL,
`option_value_startcost_quantity_display` TINYINT NOT NULL DEFAULT '1',
`option_value_delivery_min` INT NOT NULL DEFAULT '0',
`option_value_delivery_max` INT NOT NULL DEFAULT '0',
`branding` TINYINT NOT NULL DEFAULT '0',
`branding_group_id` INT NOT NULL DEFAULT '0',
`design_type` ENUM('upload','proof','online') NULL DEFAULT NULL,
`sort_order` INT NOT NULL,
PRIMARY KEY (`option_value_id`),
INDEX `option_id` (`option_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
DROP TABLE `ots_option_value_description`;
CREATE TABLE `ots_option_value_description` (
`option_value_id` INT NOT NULL,
`language_id` INT NOT NULL,
`option_id` INT NOT NULL,
`delivery_service` VARCHAR(128) NOT NULL,
`name` VARCHAR(128) NOT NULL,
`video_id` VARCHAR(64) NOT NULL,
`addition` VARCHAR(50) NOT NULL,
`startcost` VARCHAR(255) NOT NULL,
`text` TEXT NOT NULL,
PRIMARY KEY (`option_value_id`, `language_id`),
INDEX `option_id` (`option_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
CREATE TABLE `ots_branding_group` (
`branding_group_id` INT NOT NULL AUTO_INCREMENT,
`image` VARCHAR(255) NOT NULL DEFAULT '',
`display` TINYINT NOT NULL DEFAULT '0',
`status` TINYINT NOT NULL DEFAULT '1',
`sort_order` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`branding_group_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
CREATE TABLE `ots_branding_group_description` (
`branding_group_id` INT NOT NULL,
`language_id` INT NOT NULL,
`title` VARCHAR(64) NOT NULL,
`description` TEXT NOT NULL,
PRIMARY KEY (`branding_group_id`, `language_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
ALTER TABLE ots_option AUTO_INCREMENT = 10000;
ALTER TABLE ots_option_value AUTO_INCREMENT = 1000000;
---------------------------------------------------------
DROP TABLE `ots_product_attribute`;
DROP TABLE `ots_product_filter`;
DROP TABLE `ots_product_recurring`;
DROP TABLE `ots_product_related`;
DROP TABLE `ots_product_reward`;
DROP TABLE `ots_product_special`;
DROP TABLE `ots_product_to_download`;
DROP TABLE `ots_product_to_layout`;
DROP TABLE `ots_product_to_store`;
DROP TABLE `ots_product`;
CREATE TABLE `ots_product` (
`product_id` INT NOT NULL AUTO_INCREMENT,
`et_product_id` INT NOT NULL,
`model` VARCHAR(64) NOT NULL,
`quantity` INT NOT NULL DEFAULT '0',
`product_group_id` INT NOT NULL DEFAULT '0',
`tax_class_id` INT NOT NULL,
`date_available` DATE NULL DEFAULT NULL,
`date_unavailable` DATE NULL DEFAULT NULL,
`weight` DECIMAL(15,8) NOT NULL DEFAULT '0.00000000',
`weight_class_id` INT NOT NULL DEFAULT '0',
`length` DECIMAL(15,8) NOT NULL DEFAULT '0.00000000',
`width` DECIMAL(15,8) NOT NULL DEFAULT '0.00000000',
`height` DECIMAL(15,8) NOT NULL DEFAULT '0.00000000',
`length_class_id` INT NOT NULL DEFAULT '0',
`unit_class_id` INT NOT NULL DEFAULT '0',
`unit_price` TINYINT(1) NOT NULL DEFAULT '1',
`delivery_min` INT NOT NULL DEFAULT '0',
`delivery_max` INT NOT NULL DEFAULT '0',
`minimum` INT NOT NULL DEFAULT '1',
`sort_order` INT NOT NULL DEFAULT '0',
`status` TINYINT NOT NULL DEFAULT '0',
`date_added` DATETIME NOT NULL,
`date_modified` DATETIME NOT NULL,
PRIMARY KEY (`product_id`),
UNIQUE INDEX `product_id` (`product_id`),
INDEX `model` (`model`),
INDEX `sort_order` (`sort_order`),
INDEX `status` (`status`),
INDEX `date_available` (`date_available`),
INDEX `date_unavailable` (`date_unavailable`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB
AUTO_INCREMENT=90000 AUTO_INCREMENT=100000
;
DROP TABLE `ots_product_description`;
CREATE TABLE `ots_product_description` (
`product_id` INT NOT NULL,
`language_id` INT NOT NULL,
`name` VARCHAR(255) NOT NULL,
`short_name` VARCHAR(100) NOT NULL,
`declaration_name` VARCHAR(255) NOT NULL,
`description` TEXT NOT NULL,
PRIMARY KEY (`product_id`, `language_id`),
INDEX `name` (`name`),
INDEX `product_id` (`product_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `ots_product_to_manufacturer` (
`product_id` INT NOT NULL,
`manufacturer_id` INT NOT NULL,
`default` TINYINT(1) NOT NULL DEFAULT '0',
`declaration_price` DECIMAL(15,4) NOT NULL DEFAULT '0.0000',
`price_calculation` TINYINT NOT NULL DEFAULT '0',
`price` DECIMAL(15,4) NOT NULL DEFAULT '0.0000',
`price_type` ENUM('fixed','percent','formula') NOT NULL DEFAULT 'fixed',
`price_label` ENUM('min','max') NOT NULL DEFAULT 'max',
`campaign_price` VARCHAR(255) NOT NULL,
`campaign_type` ENUM('fixed','percent') NULL DEFAULT 'percent',
`campaign_end` DATE NULL DEFAULT NULL,
`campaign_base` TINYINT NOT NULL DEFAULT '0',
`price_min` DECIMAL(15,2) NOT NULL DEFAULT '0.00',
`price_min_branding` DECIMAL(15,2) NOT NULL DEFAULT '0.00',
`price_min_type` TINYINT NOT NULL DEFAULT '0',
`formula` VARCHAR(255) NOT NULL DEFAULT '',
`depth_enable` TINYINT NOT NULL DEFAULT '0',
`depth_max` INT NOT NULL DEFAULT '0',
`depth_min` INT NOT NULL DEFAULT '0',
`height_enable` TINYINT NOT NULL DEFAULT '0',
`height_max` INT NOT NULL DEFAULT '0',
`width_enable` TINYINT NOT NULL DEFAULT '0',
`height_min` INT NOT NULL DEFAULT '0',
`width_max` INT NOT NULL DEFAULT '0',
`width_min` INT NOT NULL DEFAULT '0',
`length_enable` TINYINT NOT NULL DEFAULT '0',
`length_min` INT NOT NULL DEFAULT '0',
`length_max` INT NOT NULL DEFAULT '0',
`startcost_enabled` TINYINT NOT NULL DEFAULT '0',
`startcost_price` DECIMAL(15,4) NOT NULL DEFAULT '0.0000',
`startcost_type` ENUM('fixed','percent','formula') NOT NULL DEFAULT 'fixed',
`startcost_quantity` INT NOT NULL DEFAULT '0',
`startcost_dependant_option_enabled` TINYINT NOT NULL DEFAULT '0',
`startcost_dependant_option_id` INT NOT NULL DEFAULT '0',
`startcost_dependant_option_value_id` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_id`, `manufacturer_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `ots_product_to_manufacturer_description` (
`product_id` INT NOT NULL,
`manufacturer_id` INT NOT NULL,
`language_id` INT NOT NULL,
`startcost` VARCHAR(255) NOT NULL,
PRIMARY KEY (`product_id`, `manufacturer_id`, `language_id`),
INDEX `product_id` (`product_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `ots_product_group` (
`product_group_id` INT NOT NULL AUTO_INCREMENT,
`prefix` VARCHAR(20) NOT NULL,
`sort_order` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_group_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB
AUTO_INCREMENT=1000
;
CREATE TABLE `ots_product_group_description` (
`product_group_id` INT NOT NULL,
`language_id` INT NOT NULL,
`name` VARCHAR(64) NOT NULL,
PRIMARY KEY (`product_group_id`, `language_id`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
DROP TABLE `ots_product_option`;
CREATE TABLE `ots_product_option` (
`product_option_id` INT NOT NULL AUTO_INCREMENT,
`product_id` INT NOT NULL,
`manufacturer_id` INT NOT NULL,
`option_id` INT NOT NULL,
`value` TEXT NOT NULL,
`required` TINYINT NOT NULL,
`status` TINYINT NOT NULL DEFAULT '1',
`hidden` TINYINT NOT NULL DEFAULT '0',
`display` TINYINT NOT NULL DEFAULT '1',
`connect` TINYINT NOT NULL DEFAULT '0',
`color_type` TINYINT NOT NULL DEFAULT '0',
`color_display` TINYINT NOT NULL DEFAULT '0',
`color_preview` TINYINT NOT NULL DEFAULT '1',
`surface_id` TINYINT NOT NULL DEFAULT '0',
`product_image_id` INT NOT NULL DEFAULT '0',
`sort_order` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_option_id`),
INDEX `option_id` (`option_id`),
INDEX `product_id` (`product_id`),
INDEX `manufacturer_id` (`manufacturer_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB
AUTO_INCREMENT=1000000
;
CREATE TABLE `ots_product_option_description` (
`product_option_description_id` INT NOT NULL AUTO_INCREMENT,
`product_option_id` INT NOT NULL,
`product_id` INT NOT NULL,
`language_id` INT NOT NULL,
`name` VARCHAR(100) NOT NULL DEFAULT '',
`description` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`product_option_description_id`),
INDEX `product_id` (`product_id`),
INDEX `language_id` (`language_id`),
INDEX `product_option_id` (`product_option_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB ENGINE=InnoDB
AUTO_INCREMENT=10000000
;
DROP TABLE `ots_product_option_value`;
CREATE TABLE `ots_product_option_value` (
`product_option_value_id` INT NOT NULL AUTO_INCREMENT,
`product_option_id` INT NOT NULL,
`product_id` INT NOT NULL,
`manufacturer_id`
`option_id` INT NOT NULL,
`option_id`
`manufacturer_id` INT NOT NULL,
`option_value_id` INT NOT NULL,
`quantity` INT NOT NULL,
`subtract` TINYINT NOT NULL,
`price` VARCHAR(255) NOT NULL DEFAULT '0.0000',
`type` ENUM('fixed','percent','formula') NOT NULL,
`price_prefix` VARCHAR(1) NOT NULL,
`points` INT NOT NULL,
`points_prefix` VARCHAR(1) NOT NULL,
`minimum` INT NOT NULL DEFAULT '1',
`weight` DECIMAL(15,8) NOT NULL,
`weight_prefix` VARCHAR(1) NOT NULL,
`default` TINYINT NOT NULL DEFAULT '0',
`extra_option_enabled` TINYINT NOT NULL,
`dependant_option_enabled` TINYINT NOT NULL DEFAULT '0',
`dependant_option_id` INT NOT NULL DEFAULT '0',
`dependant_option_value_id` INT NOT NULL DEFAULT '0',
`product_price_enabled` TINYINT NOT NULL,
`delivery_enabled` TINYINT NOT NULL,
`delivery_max` INT NOT NULL,
`startcost_enabled` TINYINT NOT NULL,
`startcost_price` VARCHAR(255) NOT NULL DEFAULT '0.0000',
`startcost_type` ENUM('fixed','percent','formula') NOT NULL,
`startcost_quantity` INT NOT NULL,
`startcost_dependant_option_enabled` TINYINT NOT NULL DEFAULT '0',
`startcost_dependant_option_id` INT NOT NULL DEFAULT '0',
`startcost_dependant_option_value_id` INT NOT NULL DEFAULT '0',
`startcost_product_price_enabled` TINYINT NOT NULL DEFAULT '0',
`info_enabled` TINYINT NOT NULL,
`image_layer` VARCHAR(255) NOT NULL DEFAULT '',
`image_layer_color_id` INT NOT NULL DEFAULT '0',
`image_z_index` TINYINT NOT NULL DEFAULT '0',
`image_hover` VARCHAR(255) NOT NULL DEFAULT '',
`image_hover_description` VARCHAR(255) NOT NULL DEFAULT '',
`product_effect_id` INT NULL DEFAULT NULL,
`logoarea_enabled` TINYINT NOT NULL,
`surface_id` TINYINT NOT NULL DEFAULT '0',
`branding_id` TINYINT NOT NULL DEFAULT '0',
`logotype_id` INT NOT NULL DEFAULT '0',
`status` TINYINT NOT NULL DEFAULT '1',
`default_pantone_color_id` INT NOT NULL DEFAULT '0',
`sort_order` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_option_value_id`),
INDEX `product_option_id` (`product_option_id`),
INDEX `product_id` (`product_id`),
INDEX `manufacturer_id` (`manufacturer_id`),
INDEX `option_id` (`option_id`),
INDEX `option_value_id` (`option_value_id`),
INDEX `sort_order` (`sort_order`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB
AUTO_INCREMENT=1000000
;
CREATE TABLE `ots_product_option_value_description` (
`product_option_value_description_id` INT NOT NULL AUTO_INCREMENT,
`product_option_value_id` INT NOT NULL,
`product_id` INT NOT NULL,
`language_id` INT NOT NULL,
`startcost` VARCHAR(255) NOT NULL DEFAULT '',
`custom_option_title` VARCHAR(128) NULL DEFAULT '',
PRIMARY KEY (`product_option_value_description_id`),
INDEX `product_id` (`product_id`),
INDEX `language_id` (`language_id`),
INDEX `product_option_value_id` (`product_option_value_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB ENGINE=InnoDB
AUTO_INCREMENT=10000000
;
CREATE TABLE `ots_product_discount` (
`product_discount_id` INT NOT NULL AUTO_INCREMENT,
`product_id` INT NOT NULL,
`manufacturer_id` INT NOT NULL,
`quantity` INT NOT NULL DEFAULT '0',
`quantity_type` ENUM('normal','extra') NOT NULL DEFAULT 'normal',
`priority` INT NOT NULL DEFAULT '1',
`type` ENUM('fixed','percent','formula') NOT NULL DEFAULT 'fixed',
`position` INT NOT NULL DEFAULT '0',
`price` VARCHAR(255) NOT NULL DEFAULT '0.0000',
`price_base` TINYINT NOT NULL DEFAULT '0',
`date_start` DATE NULL DEFAULT NULL,
`date_end` DATE NULL DEFAULT NULL,
`discount_price` VARCHAR(255) NOT NULL,
`discount_type` ENUM('fixed','percent') NOT NULL DEFAULT 'fixed',
PRIMARY KEY (`product_discount_id`),
INDEX `product_id` (`product_id`),
INDEX `manufacturer_id` (`manufacturer_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB
AUTO_INCREMENT=10000000
;
CREATE TABLE `ots_product_option_value_discount` (
`product_option_value_discount_id` INT NOT NULL AUTO_INCREMENT,
`product_option_value_id` INT NOT NULL,
`quantity_type` ENUM('normal','extra') NOT NULL DEFAULT 'normal',
`price` VARCHAR(255) NOT NULL DEFAULT '0.0000',
`price_base` TINYINT NOT NULL DEFAULT '0',
`type` ENUM('fixed','percent','formula') NOT NULL,
`position` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_option_value_discount_id`),
INDEX `product_option_value_id` (`product_option_value_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB
AUTO_INCREMENT=100000000
;
CREATE TABLE `ots_product_extra_option` (
`product_extra_option_id` INT NOT NULL AUTO_INCREMENT,
`product_option_value_id` INT NOT NULL,
`product_id` INT NOT NULL,
`manufacturer_id` INT NOT NULL,
`option_id` INT NOT NULL,
`required` TINYINT NOT NULL DEFAULT '0',
`color_type` TINYINT NOT NULL DEFAULT '0',
`color_display` TINYINT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_extra_option_id`),
INDEX `product_option_value_id` (`product_option_value_id`),
INDEX `option_id` (`option_id`),
INDEX `product_id` (`product_id`),
INDEX `manufacturer_id` (`manufacturer_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB
AUTO_INCREMENT=1000000
;
CREATE TABLE `ots_product_extra_option_value` (
`product_extra_option_value_id` INT NOT NULL AUTO_INCREMENT,
`product_extra_option_id` INT NOT NULL,
`option_value_id` INT NOT NULL,
`product_id` INT NOT NULL,
`manufacturer_id` INT NOT NULL,
`option_id` INT NOT NULL,
`default` TINYINT NOT NULL DEFAULT '0',
`price` VARCHAR(255) NOT NULL DEFAULT '0.00',
`type` ENUM('fixed','percent','formula') NOT NULL DEFAULT 'fixed',
`default_pantone_color_id` INT NOT NULL DEFAULT '0',
`sort_order` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_extra_option_value_id`),
INDEX `product_extra_option_id` (`product_extra_option_id`),
INDEX `option_value_id` (`option_value_id`),
INDEX `sort_order` (`sort_order`),
INDEX `manufacturer_id` (`manufacturer_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=INNODB ENGINE=InnoDB
AUTO_INCREMENT=10000000
;
DROP TABLE `ots_product_to_category`;
CREATE TABLE `ots_product_to_category` (
`product_id` INT NOT NULL,
`category_id` INT NOT NULL,
`sort_order` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_id`, `category_id`),
INDEX `category_id` (`category_id`),
INDEX `product_id` (`product_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
DROP TABLE `ots_product_image`;
CREATE TABLE `ots_product_image` (
`product_image_id` INT NOT NULL AUTO_INCREMENT,
`default` TINYINT NOT NULL DEFAULT '0',
`default_category` TINYINT NOT NULL DEFAULT '0',
`default_category_hover` TINYINT NOT NULL DEFAULT '0',
`product_id` INT NOT NULL,
`image` VARCHAR(255) NULL DEFAULT NULL,
`zoom` FLOAT NOT NULL DEFAULT '1.00',
`layer_image` VARCHAR(255) NULL DEFAULT NULL,
`layer_z_index` TINYINT NOT NULL DEFAULT '0',
`displacement_image` VARCHAR(255) NULL DEFAULT NULL,
`transform` TEXT NULL DEFAULT NULL,
`color_id` INT NULL DEFAULT NULL,
`type` TINYINT NOT NULL DEFAULT '0',
`sort_order` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_image_id`),
INDEX `product_id` (`product_id`),
INDEX `color_id` (`color_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1000000
;
CREATE TABLE `ots_product_image_description` (
`image_description_id` INT NOT NULL,
`product_image_id` INT NOT NULL,
`product_id` INT NOT NULL,
`language_id` INT NOT NULL,
`title_text` VARCHAR(255) NULL DEFAULT NULL,
`alt_text` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`image_description_id`),
INDEX `product_id` (`product_id`),
INDEX `product_image_id` (`product_image_id`),
INDEX `language_id` (`language_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `ots_product_option_value_hover_description` (
`product_option_value_hover_description_id` INT NOT NULL AUTO_INCREMENT,
`product_option_value_id` INT NOT NULL,
`product_id` INT NOT NULL,
`language_id` INT NOT NULL,
`description` TEXT NOT NULL,
PRIMARY KEY (`product_option_value_hover_description_id`),
INDEX `product_id` (`product_id`),
INDEX `language_id` (`language_id`),
INDEX `product_option_value_id` (`product_option_value_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1000000
;
CREATE TABLE `ots_product_option_value_layer_image` (
`product_option_value_layer_image_id` INT NOT NULL AUTO_INCREMENT,
`product_id` INT NOT NULL,
`product_option_value_id` INT NOT NULL,
`product_image_id` INT NOT NULL DEFAULT '0',
`image_layer` VARCHAR(255) NOT NULL DEFAULT '',
`image_layer_color_id` INT NOT NULL DEFAULT '0',
`image_z_index` TINYINT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_option_value_layer_image_id`),
INDEX `product_option_value_id` (`product_option_value_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=10000000
;
CREATE TABLE `ots_product_square_meter_discount` (
`product_square_meter_discount_id` INT NOT NULL AUTO_INCREMENT,
`product_id` INT NOT NULL,
`manufacturer_id` INT NOT NULL,
`quantity` DECIMAL(15,2) NOT NULL DEFAULT '0.00',
`type` ENUM('fixed','percent','formula') NOT NULL DEFAULT 'fixed',
`price` VARCHAR(255) NOT NULL DEFAULT '0.0000',
`position` INT NOT NULL DEFAULT '0',
PRIMARY KEY (`product_square_meter_discount_id`),
INDEX `product_id` (`product_id`),
INDEX `manufacturer_id` (`manufacturer_id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1000000
;
</pre> |
* *Record all SQL changes (v3)*
|. Issue |. SQL |
| #441 | <pre>CREATE TABLE `t_user_order_product` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
`order_product_id` INT NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `order_product_id` (`order_product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;</pre> |
| #441 | <pre>ALTER TABLE `t_user_search`
ADD COLUMN `is_default` TINYINT NOT NULL DEFAULT '0' AFTER `search_data`;</pre> |
*v4 coding standard:*
# Git提交
#xxx(redmine number): xxx(redmine title) - xxx(任意:补充内容)
# 代码规范
2.1: 结构:Public -> Protected -> Private
2.2: 其他代码规范同SBX
# 数据层规范(Model)
3.1: 数据库操作只应出现在model或者system中。
3.2: v3/v4的model分为两个文件,比如: order.php, order_v3.php
# 前台代码
twig, js, css (js, css尽量写在单独的css文件中)
# 后台代码
MVCL (L:en,cn)
# 注释
## 类名:
<pre>
/**
* xxx
*
* @copyright RedBlue-OTS 2024
* @version v4
*
*/
</pre>
## 函数名:参数类型 + 返回值类型
<pre>
/**
* xxx
*
* @param xxx $xxx
* @param xxx $xxx
* @return xxx
*/
</pre>
*Output*
* Report and Solution
*Others*