首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何优雅地操作数据库?ORM了解一下

它具有强大事务支持, 关联关系, 预读和延迟加载,读取复制等功能。 Sequelize 遵从 语义版本控制。支持 Node v10 及更高版本以便使用 ES6 功能。...连接数据库 设置使用sequlize插件,并配置要连接数据库 定义Model 通过面向对象Class 和 关系型数据库表建立连接 @Column 表示数据库一列 @PrimaryKey 表示主键...缺点 无可避免,自动化意味着映射和关联管理,代价是牺牲性能。现在各种ORM框架都在尝试使用各种方法来减轻性能上损失,懒加载技术、缓存技术等。...面向对象查询语言作为一种数据库与对象之间过渡,虽然隐藏了数据层面的业务抽象,但并不能完全屏蔽数据库层设计。ORM库也不是轻量级工具,需要花很多精力学习和设置,无疑将增加学习成本。...什么是“持久化” 层 持久(Persistence),即把数据(内存对象)保存到可永久保存存储设备磁盘)。

1.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

【Node】sequelize 使用对象方式操作数据库

常用三种关联类型就 一对一,一对多,多对多 建立这种关联通常是通过外键形式,比如在 a 表 存放 b 表中有关联数据id,这样a表就和b 表数据产生了关联 1一对一 A表每一条数据 只能和...需要把两张表 model 手动关联起来,这样他才知道这两张表关系,从而可以一次性把两张表数据都查出来 比如一个人只有一个身份证 function IdCardModel(sequelize,...通过主键或者 唯一索引 比如表已经存在 id 为 1 数据,此时你插入 id 为1 数据,那么就只会进行更新,不会插入 下面介绍几个添加场景 1、限定插入字段 2、限定更新字段 3、关联表创建...不支持关联表删除,如果想完成这个操作,只能通过钩子函数方式 钩子需要在model 定义 function PersonModel(sequelize, DataTypes) { return...2、数据库自带外键约束 只要在数据库表定义了两表关联外键,那么当删除父表数据时,子表关联数据也会被自动删除。

8.1K20

Sequelize 系列教程之一对一模型关系

数据模型表关系一般有三种:一对一、一对多、多对多。Sequelize 为开发者提供了清晰易用接口来定义关系、进行表之间操作。本文我们将介绍在 Sequelize 如何定义一对一表关系。...,将从目标模型名称和目标主键名称生成 belongsTo 关系外键。...HasOne 在 target 模型插入关联键,而 BelongsTo 将关联键插入到 source 模型。...// 在target模型插入关联键 // Account实例对象将拥有getUser、setUser、createUser方法 Account.belongsTo...当然也可以为 account 表 userId 字段,增加一个 UNIQUE 唯一约束,在数据库层面保证一致性,这时就需要做好 try/catch,发生插入异常时候能够知道是因为插入了为同一用户创建了多个账号

8.3K10

sequelize常用api

sequelize-cli基本流程 sequelize规定 模型名称是单数、表名称是复数 总置文件就是用来给数据库mock添加数据文件 生成文章表模型 sequelize model:generate...findByPk ===== 通过主键id查找 let article = await Article.findByPk(99) 上面表示通过Article模型查询主键id为99这个数据,和查询单条数据区别不大...({where:{name:'小九'}}) 和上面的一样,查询这个用户是否存在,存在再进行删除,防止出现删除用户在数据库并不存在这种操作,多人操作情况下可能会出现这种情况,所以可以使用这个方法。...查询条件 上面我们已经知道了基本查询语法,但是实际业务查询可能更为麻烦,我们看看在sequelize还提供了哪些参数吧: something.findOne({ order: [ /...['Task', 'createdAt', 'DESC'], // 将使用关联名称按嵌套关联模型 createdAt 排序.

7.8K30

RestQL:现代化 API 开发方式

假设上述 60 张表,40 张表存是资源类数据,其余 20 张表为关系类数据,也就是说每张表和 20 张表都要进行关联,每个关联也需要四种 CRUD 操作,那么又要增加40 * 20 * 4 =...如果说我看得比别人远,那是因为我站在巨人肩膀上。 所以我们在现有的技术基础上抽象,把已有的东西重新组合起来,拼装成一个新工具,帮助工程师从「体力活」解脱出来,解放生产力。...上述例子还会衍生出其他数据操作,不仅仅只有 GET,这里不一一列举了。 抽象出规则 上一节,列举了要提供一个表数据访问 API,大概要实现哪些路由。...所有不以_开头键,都会被放进sequelize#query()where参数。...通过 restql 参数 在使用sequelize定义关联时,我们可以设定restql参数,实现访问控制。

1.6K50

Sequelize 系列教程之多对多模型关系

它具有强大事务支持,关联关系、读取和复制等功能。在阅读本文前,如果你对 Sequelize 还不了解,建议先阅读 Sequelize 快速入门 这篇文章。...数据模型表关系一般有三种:一对一、一对多、多对多。Sequelize 为开发者提供了清晰易用接口来定义关系、进行表之间操作。本文我们将介绍在 Sequelize 如何定义多对多表关系。...,则可以在定义关联之前为连接表定义一个模型,然后再说明它应该使用该模型进行连接,而不是创建一个新关联: const User = sequelize.define('user', {}) const...删除任何先前定义主键属性 - 表将由两个表组合唯一标识,并且没有其他主键列。...参考资源 Sequelize 和 MySQL 对照 Sequelize 中文文档 - 关联

12.6K30

【融职培训】Web前端学习 第8章 egg基础教程4 sequelize

简单说,ORM是通过使用描述对象和数据库之间映射元数据,将程序对象自动持久化到关系数据库。那么,到底如何实现持久化呢?...一旦出现业务需求变更,就必须修改持久化层接口 持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾相关程序代码,增加了软件维护难度。...;//数据库字段类型,一对多 const Clazz = app.model.define('clazz', { //sequelize会自动创建主键 name: STRING...app.model.Students.belongsTo(app.model.Clazz, { //设置外键 13 foreignKey: 'clazz_id',//关联外键...14 as: 'clazz'//将关联数据显示到该字段上 15 }) 16 } 17 18 return Students; 19 } 四、

1.3K20

Web前端学习 第8章 egg基础教程4 sequelize

简单说,ORM是通过使用描述对象和数据库之间映射元数据,将程序对象自动持久化到关系数据库。那么,到底如何实现持久化呢?...一旦出现业务需求变更,就必须修改持久化层接口 持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾相关程序代码,增加了软件维护难度。...;//数据库字段类型,一对多 const Clazz = app.model.define('clazz', { //sequelize会自动创建主键 name: STRING...app.model.Students.belongsTo(app.model.Clazz, { //设置外键 13 foreignKey: 'clazz_id',//关联外键...14 as: 'clazz'//将关联数据显示到该字段上 15 }) 16 } 17 18 return Students; 19 } 四、

1.2K10

MySQL数据库基础练习系列47、权限管理系统

一列都是不可再分最小数据单元(也称为最小原子单元)。 解释: 在第一范式,主要关注是列原子性。...也就是说,表一列都应该只包含一个值,而不能包含集合、数组或其他复合数据类型。 例如,如果有一个“地址”列,它包含了街道、城市、省份和国家等信息,那么这就违反了第一范式。...应该将这个“地址”列拆分成多个独立列,“街道”、“城市”、“省份”和“国家”。 第二范式(2NF, Second Normal Form) 定义: 满足1NF。...在第二范式,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表。 如果表一列只与复合主键一部分有关,那么它就不应该存在于这个表,而应该被分离出去形成另外一张新表。...它主要关注于消除传递依赖,即非主键列不应该依赖于主键某一部分,而应该直接依赖于整个主键。 如果存在传递依赖,那么应该考虑将这个非主键列分离出去,形成表,并通过主键或外键与原表进行关联

10010

浅谈MVC--Node如何使用ORM?

在正常开发,大部分都会使用MVC为主要系统架构模式。而Model一般包含了复杂业务逻辑以及数据逻辑,因为Model逻辑复杂度,所以我们有必要降低系统耦合度。...循环读取结果集数据,然后根据数据进行业务逻辑处理。 如果还有进一步需求,组装新sql语句进行执行。 执行结束关闭数据库连接。...参数3:对选填参数配置 这里对于Sequelize数据类型直接贴下文档中提供: ?...数据类型定义需要注意一点,如果我们有插入操作,Sequelize默认会增加createdAt字段和updateAt字段,所以说如果我们不需要这两个字段我们可以在参数3选填参数添加timestamps为false...findByPk():通过id查询对应数据,id一般为主键,所以只会返回一条数据,而且参数只能传入id。

2.3K20

MySQL数据库基础练习系列1、学生信息管理系统

每张表都有相应主键和外键约束,以确保数据完整性和准确性。这些表之间通过外键相互关联形成了学生信息管理系统基本数据结构。...每一列都是不可再分最小数据单元(也称为最小原子单元)。 解释: 在第一范式,主要关注是列原子性。...也就是说,表一列都应该只包含一个值,而不能包含集合、数组或其他复合数据类型。 例如,如果有一个“地址”列,它包含了街道、城市、省份和国家等信息,那么这就违反了第一范式。...在第二范式,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表。 如果表一列只与复合主键一部分有关,那么它就不应该存在于这个表,而应该被分离出去形成另外一张新表。...它主要关注于消除传递依赖,即非主键列不应该依赖于主键某一部分,而应该直接依赖于整个主键。 如果存在传递依赖,那么应该考虑将这个非主键列分离出去,形成表,并通过主键或外键与原表进行关联

6610

活字格性能优化技巧(1)——如何利用数据库主键提升访问性能

数据库主键:指的是一个列或多列组合,其值能唯一地标识表每一行,通过它可以强制表实体完整性。主键主要是用与其他表外键关联,以及本记录修改与删除。...除了能够保证实体完整性,主键还能加速数据库操作速度。 数据库外键:外键是用于建立和加强两个表数据之间链接一列或多列。通过将保存表主键一列或多列添加到另一个表,可创建两个表之间链接。...数据库索引:在关系数据库,索引是一种单独、物理对数据库表中一列或多列值进行排序一种存储结构,它是某个表中一列或若干列值得集合和相应指向表物理标识这些值得数据页逻辑指针清单。...在实际使用过程中大家要主要:数据库每张表只能有一个主键,不可能有多个主键主键主要作用是保证数据唯一性和完整性,同时通过主键检索表能够增加检索速度。 我们来一起看看如何在活字格中使用主键。...到这里我们就为大家讲完了利用数据库主键提升访问性能第一部分,在第二部分我们会继续为大家介绍如何在大规模数据量场景下提升数据访问效率。

1.1K20

MySQL数据库基础练习3、订单管理系统

订单信息表:存储订单基本信息,订单号、客户ID、订单总金额等。 订单明细表:存储订单每个产品详细信息,产品ID、数量、单价等。...每一列都是不可再分最小数据单元(也称为最小原子单元)。 解释: 在第一范式,主要关注是列原子性。...也就是说,表一列都应该只包含一个值,而不能包含集合、数组或其他复合数据类型。 例如,如果有一个“地址”列,它包含了街道、城市、省份和国家等信息,那么这就违反了第一范式。...在第二范式,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表。 如果表一列只与复合主键一部分有关,那么它就不应该存在于这个表,而应该被分离出去形成另外一张新表。...它主要关注于消除传递依赖,即非主键列不应该依赖于主键某一部分,而应该直接依赖于整个主键。 如果存在传递依赖,那么应该考虑将这个非主键列分离出去,形成表,并通过主键或外键与原表进行关联

7110

MySQL数据库基础练习系列15、留言板系统

下面我将详细解释这三个范式: 第一范式(1NF, First Normal Form) 定义: 列不可分割,即数据库表一列都是不可分割原子数据项。...每一列都是不可再分最小数据单元(也称为最小原子单元)。 解释: 在第一范式,主要关注是列原子性。...也就是说,表一列都应该只包含一个值,而不能包含集合、数组或其他复合数据类型。 例如,如果有一个“地址”列,它包含了街道、城市、省份和国家等信息,那么这就违反了第一范式。...在第二范式,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表。 如果表一列只与复合主键一部分有关,那么它就不应该存在于这个表,而应该被分离出去形成另外一张新表。...它主要关注于消除传递依赖,即非主键列不应该依赖于主键某一部分,而应该直接依赖于整个主键。 如果存在传递依赖,那么应该考虑将这个非主键列分离出去,形成表,并通过主键或外键与原表进行关联

10810

Mysql 复习总结

>1000; 4 group by 分组  一般配合统计函数一起使用            max min avg sum count 5 having 表达式          数据...:  client 声明与事实不符  result 与客户端页面不符时候  collation 校准集 触发器 应用场景: 1 当想一个表添加或者删除数据,需要相关表中进行同步操作...new 来表示 行一列值 用 new.列名来表示 对于 insert 删除行用 old 来表示 行一列值 用 old.列名来表示 对于 update 修改前行用 old...来表示 修改后行用 new  行一列值 用 old.列名来表示 清空表 truncate 表名;  事务  start transaction  sql语句  commit... 索引名(列名)  / primary key  : alter table member add index tel(tel);  主键索引  alter table 表名 add

70720

基于 Egg.js 框架 Node.js 服务构建之用户管理设计

类似于 J2EE DAO 设计模式,将程序数据对象自动地转化为关系型数据库对应表和列,数据对象间引用也可以通过这个工具转化为表。...id 设计, 需要通过字段 primaryKey:true 指定为主键。...MySQL 里面主键设计主要有两种方式:自动递增;UUID。...:搜索数据库多个元素,返回数据和总数; findAll:在数据库搜索多个元素; 复杂过滤/ OR / NOT 查询; 使用 limit(限制),offset(偏移量),order(顺序)和 group...(组)操作数据集; count:计算数据库中元素出现次数; max:获取特定表格特定属性最大值; min:获取特定表格特定属性最小值; sum:特定属性值求和; create:创建数据库 Model

9.3K40
领券