Skip to content
This repository has been archived by the owner on Jun 2, 2024. It is now read-only.

Commit

Permalink
refactor: normalize database structure (#1376)
Browse files Browse the repository at this point in the history
XadillaX authored and fengmk2 committed Sep 4, 2018

Unverified

This commit is not signed, but one or more authors requires that any commit attributed to them is signed.
1 parent 3141437 commit 26d7147
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
Original file line number Diff line number Diff line change
@@ -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',
@@ -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',
},
@@ -260,10 +260,10 @@ module.exports = function (sequelize, DataTypes) {
indexes: [
{
unique: true,
fields: ['name', 'date']
fields: ['name', 'date'],
},
{
fields: ['date']
fields: ['date'],
}
],
classMethods: {
53 changes: 28 additions & 25 deletions models/module.js
Original file line number Diff line number Diff line change
@@ -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) {
@@ -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'
},
@@ -57,6 +55,7 @@ module.exports = function (sequelize, DataTypes) {
},
description: {
type: DataTypes.LONGTEXT,
comment: 'module description',
},
package: {
type: DataTypes.LONGTEXT,
@@ -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: {
25 changes: 21 additions & 4 deletions models/module_abbreviated.js
Original file line number Diff line number Diff line change
@@ -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'
},
@@ -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: {
14 changes: 7 additions & 7 deletions models/module_deps.js
Original file line number Diff line number Diff line change
@@ -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',
},
@@ -46,10 +46,10 @@ module.exports = function (sequelize, DataTypes) {
indexes: [
{
unique: true,
fields: ['name', 'deps']
fields: ['name', 'deps'],
},
{
fields: ['deps']
fields: ['deps'],
}
],
classMethods: {
16 changes: 9 additions & 7 deletions models/module_keyword.js
Original file line number Diff line number Diff line change
@@ -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';
*/

@@ -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',
@@ -49,10 +51,10 @@ module.exports = function (sequelize, DataTypes) {
indexes: [
{
unique: true,
fields: ['keyword', 'name']
fields: ['keyword', 'name'],
},
{
fields: ['name']
fields: ['name'],
}
],
classMethods: {
17 changes: 9 additions & 8 deletions models/module_log.js
Original file line number Diff line number Diff line change
@@ -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';
*/

@@ -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: {
12 changes: 6 additions & 6 deletions models/module_maintainer.js
Original file line number Diff line number Diff line change
@@ -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';
*/

@@ -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',
}
@@ -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'),
Loading

0 comments on commit 26d7147

Please sign in to comment.