Skip to content

Commit

Permalink
refactor: normalize database structure (#1376)
Browse files Browse the repository at this point in the history
  • Loading branch information
XadillaX authored and fengmk2 committed Sep 4, 2018
1 parent 3141437 commit 26d7147
Show file tree
Hide file tree
Showing 15 changed files with 255 additions and 165 deletions.
177 changes: 113 additions & 64 deletions docs/db.sql

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions models/download_total.js
Expand Up @@ -18,7 +18,7 @@
// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',
// `gmt_create` datetime NOT NULL COMMENT 'create time',
// `gmt_modified` datetime NOT NULL COMMENT 'modified time',
// `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
// `name` varchar(214) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
// `date` int unsigned NOT NULL COMMENT 'YYYYMM format',
// `d01` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '01 download count',
// `d02` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '02 download count',
Expand Down Expand Up @@ -52,14 +52,14 @@
// `d30` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '30 download count',
// `d31` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '31 download count',
// PRIMARY KEY (`id`),
// UNIQUE KEY `name_date` (`name`, `date`)
// KEY `date` (`date`)
// UNIQUE KEY `uk_name_date` (`name`, `date`),
// KEY `idx_date` (`date`)
// ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='module download total info';

module.exports = function (sequelize, DataTypes) {
return sequelize.define('DownloadTotal', {
name: {
type: DataTypes.STRING(100),
type: DataTypes.STRING(214),
allowNull: false,
comment: 'module name',
},
Expand Down Expand Up @@ -260,10 +260,10 @@ module.exports = function (sequelize, DataTypes) {
indexes: [
{
unique: true,
fields: ['name', 'date']
fields: ['name', 'date'],
},
{
fields: ['date']
fields: ['date'],
}
],
classMethods: {
Expand Down
53 changes: 28 additions & 25 deletions models/module.js
Expand Up @@ -16,26 +16,24 @@

/*
CREATE TABLE IF NOT EXISTS `module` (
`id` INTEGER NOT NULL auto_increment ,
`author` VARCHAR(100) NOT NULL,
`name` VARCHAR(100) NOT NULL,
`version` VARCHAR(30) NOT NULL,
`description` LONGTEXT,
`package` LONGTEXT,
`dist_shasum` VARCHAR(100),
`dist_tarball` VARCHAR(2048),
`dist_size` INTEGER UNSIGNED NOT NULL DEFAULT 0,
`publish_time` BIGINT(20) UNSIGNED,
`gmt_create` DATETIME NOT NULL,
`gmt_modified` DATETIME NOT NULL,
PRIMARY KEY (`id`)
)
COMMENT 'module info' ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
CREATE UNIQUE INDEX `module_name_version` ON `module` (`name`, `version`);
CREATE INDEX `module_gmt_modified` ON `module` (`gmt_modified`);
CREATE INDEX `module_publish_time` ON `module` (`publish_time`);
CREATE INDEX `module_author` ON `module` (`author`);
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`gmt_create` datetime NOT NULL COMMENT 'create time',
`gmt_modified` datetime NOT NULL COMMENT 'modified time',
`author` varchar(100) NOT NULL COMMENT 'module author',
`name` varchar(214) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
`version` varchar(30) NOT NULL COMMENT 'module version',
`description` longtext COMMENT 'module description',
`package` longtext CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT 'package.json',
`dist_shasum` varchar(100) DEFAULT NULL COMMENT 'module dist SHASUM',
`dist_tarball` varchar(2048) DEFAULT NULL COMMENT 'module dist tarball',
`dist_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'module dist size',
`publish_time` bigint(20) unsigned COMMENT 'module publish time',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`name`,`version`),
KEY `idx_gmt_modified` (`gmt_modified`),
KEY `idx_publish_time` (`publish_time`),
KEY `idx_author` (`author`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='module info';
*/

module.exports = function (sequelize, DataTypes) {
Expand All @@ -46,7 +44,7 @@ module.exports = function (sequelize, DataTypes) {
comment: 'first maintainer name'
},
name: {
type: DataTypes.STRING(100),
type: DataTypes.STRING(214),
allowNull: false,
comment: 'module name'
},
Expand All @@ -57,6 +55,7 @@ module.exports = function (sequelize, DataTypes) {
},
description: {
type: DataTypes.LONGTEXT,
comment: 'module description',
},
package: {
type: DataTypes.LONGTEXT,
Expand All @@ -65,36 +64,40 @@ module.exports = function (sequelize, DataTypes) {
dist_shasum: {
type: DataTypes.STRING(100),
allowNull: true,
comment: 'module dist SHASUM',
},
dist_tarball: {
type: DataTypes.STRING(2048),
allowNull: true,
comment: 'module dist tarball',
},
dist_size: {
type: DataTypes.INTEGER,
allowNull: false,
defaultValue: 0,
comment: 'module dist size',
},
publish_time: {
type: DataTypes.BIGINT(20),
allowNull: true,
comment: 'module publish time',
}
}, {
tableName: 'module',
comment: 'module info',
indexes: [
{
unique: true,
fields: ['name', 'version']
fields: ['name', 'version'],
},
{
fields: ['gmt_modified']
fields: ['gmt_modified'],
},
{
fields: ['publish_time']
fields: ['publish_time'],
},
{
fields: ['author']
fields: ['author'],
}
],
classMethods: {
Expand Down
25 changes: 21 additions & 4 deletions models/module_abbreviated.js
@@ -1,9 +1,25 @@
'use strict';

/*
CREATE TABLE IF NOT EXISTS `module_abbreviated` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`gmt_create` datetime NOT NULL COMMENT 'create time',
`gmt_modified` datetime NOT NULL COMMENT 'modified time',
`name` varchar(214) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
`version` varchar(30) NOT NULL COMMENT 'module version',
`package` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'the abbreviated metadata',
`publish_time` bigint(20) unsigned COMMENT 'the publish time',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`name`,`version`),
KEY `idx_gmt_modified` (`gmt_modified`),
KEY `idx_publish_time` (`publish_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='module abbreviated info';
*/

module.exports = function (sequelize, DataTypes) {
return sequelize.define('ModuleAbbreviated', {
name: {
type: DataTypes.STRING(100),
type: DataTypes.STRING(214),
allowNull: false,
comment: 'module name'
},
Expand All @@ -19,20 +35,21 @@ module.exports = function (sequelize, DataTypes) {
publish_time: {
type: DataTypes.BIGINT(20),
allowNull: true,
comment: 'the publish time',
}
}, {
tableName: 'module_abbreviated',
comment: 'module abbreviated info',
indexes: [
{
unique: true,
fields: ['name', 'version']
fields: ['name', 'version'],
},
{
fields: ['gmt_modified']
fields: ['gmt_modified'],
},
{
fields: ['publish_time']
fields: ['publish_time'],
},
],
classMethods: {
Expand Down
14 changes: 7 additions & 7 deletions models/module_deps.js
Expand Up @@ -18,18 +18,18 @@
CREATE TABLE IF NOT EXISTS `module_deps` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`gmt_create` datetime NOT NULL COMMENT 'create time',
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
`deps` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '`name` is deped by `deps`',
`name` varchar(214) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
`deps` varchar(214) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'which module depend on this module',
PRIMARY KEY (`id`),
UNIQUE KEY `module_deps_name_deps` (`name`,`deps`),
KEY `deps` (`module_deps_deps`)
UNIQUE KEY `uk_name_deps` (`name`,`deps`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='module deps';
*/

module.exports = function (sequelize, DataTypes) {
return sequelize.define('ModuleDependency', {
name: {
type: DataTypes.STRING(100),
type: DataTypes.STRING(214),
allowNull: false,
comment: 'module name',
},
Expand All @@ -46,10 +46,10 @@ module.exports = function (sequelize, DataTypes) {
indexes: [
{
unique: true,
fields: ['name', 'deps']
fields: ['name', 'deps'],
},
{
fields: ['deps']
fields: ['deps'],
}
],
classMethods: {
Expand Down
16 changes: 9 additions & 7 deletions models/module_keyword.js
Expand Up @@ -19,11 +19,11 @@ CREATE TABLE IF NOT EXISTS `module_keyword` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`gmt_create` datetime NOT NULL COMMENT 'create time',
`keyword` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'keyword',
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
`description` longtext,
`name` varchar(214) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
`description` longtext COMMENT 'module description',
PRIMARY KEY (`id`),
UNIQUE KEY `keyword_module_name` (`keyword`,`name`),
KEY `name` (`name`)
UNIQUE KEY `uk_keyword_module_name` (`keyword`,`name`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='module keyword';
*/

Expand All @@ -32,15 +32,17 @@ module.exports = function (sequelize, DataTypes) {
keyword: {
type: DataTypes.STRING(100),
allowNull: false,
comment: 'keyword',
},
name: {
type: DataTypes.STRING(100),
type: DataTypes.STRING(214),
allowNull: false,
comment: 'module name',
},
description: {
type: DataTypes.LONGTEXT,
allowNull: true,
comment: 'module description',
}
}, {
tableName: 'module_keyword',
Expand All @@ -49,10 +51,10 @@ module.exports = function (sequelize, DataTypes) {
indexes: [
{
unique: true,
fields: ['keyword', 'name']
fields: ['keyword', 'name'],
},
{
fields: ['name']
fields: ['name'],
}
],
classMethods: {
Expand Down
17 changes: 9 additions & 8 deletions models/module_log.js
Expand Up @@ -15,15 +15,15 @@
*/

/*
CREATE TABLE IF NOT EXISTS `module_log` (
CREATE TABLE IF NOT EXISTS `module_log` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`gmt_create` datetime NOT NULL COMMENT 'create time',
`gmt_modified` datetime NOT NULL COMMENT 'modified time',
`username` varchar(100) NOT NULL,
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
`log` longtext,
`username` varchar(100) NOT NULL COMMENT 'which username',
`name` varchar(214) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
`log` longtext COMMENT 'the raw log',
PRIMARY KEY (`id`),
KEY `module_log_name` (`name`)
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='module sync log';
*/

Expand All @@ -35,19 +35,20 @@ module.exports = function (sequelize, DataTypes) {
comment: 'user name'
},
name: {
type: DataTypes.STRING(100),
type: DataTypes.STRING(214),
allowNull: false,
comment: 'module name',
},
log: {
type: DataTypes.LONGTEXT
type: DataTypes.LONGTEXT,
comment: 'the raw log',
}
}, {
tableName: 'module_log',
comment: 'module sync log',
indexes: [
{
fields: ['name']
fields: ['name'],
}
],
classMethods: {
Expand Down
12 changes: 6 additions & 6 deletions models/module_maintainer.js
Expand Up @@ -19,10 +19,10 @@ CREATE TABLE IF NOT EXISTS `module_maintainer` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`gmt_create` datetime NOT NULL COMMENT 'create time',
`user` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'user name',
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
`name` varchar(214) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'module name',
PRIMARY KEY (`id`),
UNIQUE KEY `module_maintainer_user_name` (`user`,`name`),
KEY `name` (`name`)
UNIQUE KEY `uk_user_module_name` (`user`,`name`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='private module maintainers';
*/

Expand All @@ -34,7 +34,7 @@ module.exports = function (sequelize, DataTypes) {
comment: 'user name'
},
name: {
type: DataTypes.STRING(100),
type: DataTypes.STRING(214),
allowNull: false,
comment: 'module name',
}
Expand All @@ -45,10 +45,10 @@ module.exports = function (sequelize, DataTypes) {
indexes: [
{
unique: true,
fields: ['user', 'name']
fields: ['user', 'name'],
},
{
fields: ['name']
fields: ['name'],
}
],
classMethods: require('./_module_maintainer_class_methods'),
Expand Down

0 comments on commit 26d7147

Please sign in to comment.