数据库设计-范式

范式是符合某一种级别的关系模式的集合。关系型数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd 范式(BCNF)、第四范式(4NF)和第五范式(5NF)。
范式越高,冗余最低,一般到三范式即可,再往上,表越多,可能导致查询效率下降。所以有时为了提高运行效率,可以让数据冗余

阅读更多

git操作失败小结

git process semms to be running in this repository

Git 提交的过程中突然显示 Another git process semms to be running in this repository, e.g. an editor opened by ‘git commit’. Please make sure all processes are terminated then try again. If it still fails, a git process remove the file manually to continue…
即是 git 被另外一个程序占用。

原因在于 Git 在使用过程中遭遇了奔溃,部分被上锁资源没有被释放导致的。

解决方案:进入项目文件夹下的 .git 文件中(显示隐藏文件夹或 rm .git/index.lock)删除 index.lock 文件即可。

阅读更多

Chrome下载文件出错

使用谷歌浏览器下载文件时发生浏览器崩溃,页面提示:
ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION

原因:

加载的资源名含有半角逗号(,)或者别的特殊符号

解决办法:

  1. 替换半角逗号等特殊符号
  2. 服务器端函数响应中若设置了“content-disposition”响应头,filename参数使用双引号包裹。
阅读更多

ES6中Map和Object的区别

JavaScript 的对象(Object)和 Map,本质上是键值对的集合(Hash 结构)

ES6 中 Map 相对于 Object 对象有几个区别:

  • 对象(Object)和只能用字符串和 Symbol 当作键,Map 的 key 可以是任何基本类型或者对象
  • Map 可以通过 size 获取到长度,Object 获取长度的比较复杂
  • Map 具有 Symbol.iterator 属性,可通过 for…of 循环遍历

Map 转为对象:

  • 如果所有 Map 的键都是字符串或者 Symbol,它可以无损地转为对象。
  • 如果有非字符串的键名,那么这个键名会被转成字符串,再作为对象的键名。
阅读更多

MySQL批量删除大量数据

公司线上的 MySQL 数据库每半年都需要删除大量的无效数据,只保留部分数据,因为历史遗留问题有几个表需要清理二三亿条数据,少的也有几千万,任务非常艰巨。

阅读更多

在koa中使用装饰器

在使用 koa 开发的过程中,经常会忘记把 controller 的方法加到 router 中去,期望使用 decorator 实现路由配置及一些参数校验。

阅读更多

JavaScript装饰器

随着 ES6 里引入了类,目前 ECMAScript 有一个提案,引入了装饰器(Decorator)函数来标注极或修改类及其成员。
装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。 装饰器使用 @expression 这种形式,expression 求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。

关于装饰器的详细介绍请参阮一峰的《ECMAScript 6 入门》一书

阅读更多