数据模型概述
数据模型是什么
数据模型是一个用于组织和管理数据的工具,工作在云数据库之上。它可以帮助我们更好地理解和操作数据,提高开发效率和数据质量。
云开发数据模型为开发者提供了更加高级的查询、校验等功能,提供了多端 SDK 可供调用,同时可以一键生成可编辑的管理应用。同时内置集成了 CMS 管理端、AI 智能分析能力,方便各种角色的用户进行数据管理和分析。
以下是数据模型的一些核心特点:
- 数据校验:自动检查数据是否正确,避免错误。
- 关联关系处理:自动处理数据之间的关系,简化操作。
- 自动生成代码:根据数据模型快速生成代码,提高开发速度。
- CMS 管理端:提供简单易用的数据管理界面,方便非技术人员操作。
- 自动生成应用代码:提供快速从模型生成可编辑的管理应用
- AI 智能分析:利用 AI 分析数据,发现有价值的信息。
- 高级查询支持:支持复杂的查询操作,满足各种需求。
数据模型和数据库的关系
数据模型是对数据库的抽象,它定义了数据模型的结构、字段、约束和关系。数据模型提供了一种统一的方式来描述和操作数据,简化了数据操作和查询。数据模型能力即为开发中常用的对象关系映射 ORM。
数据模型和数据库是关联关系,一个数据模型,对应了数据库中的一个集合(非结构化数据库)或表(结构化数据库)。
使用数据模型,不代表被限制为仅能使用数据模型。在使用数据模型的同时,如果需要有更复杂、或数据模型无法很好完成的操作,也可以通过数据库的原生方法,直接操作数据库完成数据读写。
相对于传统开发框架中的 ORM,云开发数据模型除 ORM 相关的 SDK 操作数据的能力外,额外整合了数据管理界面、用户及权限体系、内容管理以及进一步的基于数据模型的应用生成、数据分析等更多能力。更多优势点可以查看 “为什么要使用数据模型”。
如何启用数据模型
可访问微信云开发云后台-数据模型,选择【新建模型】,可以选择 3 种方式:
- 对接已有数据库表并生成数据模型:对接已经有的数据库表或集合,并生成数据模型;这种情况可以对接存量已经在使用的云数据库(文档型)的集合,或者自有 MySQL 数据库的表,生成集合,对已有的数据库集合或表没有影响,对存量数据也没有影响,仅是生成模型,为后续的进一步开发提供模型可用的方法。
- 创建数据库并配置数据模型:选择创建新的数据库表或集合,并同时配置模型结构;这种情况下,会在选择的数据库上新建集合或表(根据选择的云数据库类型或选择自有数据库),并创建出数据模型;创建后可以使用数据模型方法进行数据读写,也可以使用数据库方法进行数据读写。
- 导入存量内容管理CMS:从存量的云开发CMS中导入模型,主要用于存量 CMS 的迁移,通过使用新版本的内容管理,获取到持续更新和迭代升级的 CMS 能力。
创建模型后即可使用数据模型提供的各项能力。
为什么要使用数据模型
使用数据模型可以提高开发效率、降低维护成本、增强数据安全性,并拥有强大的数据分析和管理能力。
数据校验和类型检查
数据模型可以自动处理数据的校验和类型检查,确保数据的准确性和一致性。这有助于在数据输入、更新和查询过程中避免错误,提高数据质量。
首先,我们在云后台的数据模型中定义一个简单的文章数据模型 post
我们定义了两个属性:title
(字符串类型)、body
(字符串类型)
接下来,我们尝试插入一个包含错误类型数据的对象:
使用 create() 方法创建新文章:
try {
const { data } = await models.post.create({
data: {
title: "你好,世界👋",
body: 123456, // 这里故意设置为字符串类型,而非对象 ID 类型
},
});
// 返回创建的文章 id
console.log(data);
// { id: "7d8ff72c665eb6c30243b6313aa8539e"}
} catch (error) {
console.error("Error:", error);
}
在这个例子中,我们故意将 body
属性的值设置为数字类型 123456,而不是正确的文本类型。当我们尝试插入这条数据时,数据模型会检测到类型不匹配,并抛出一个错误。输出结果如下:
Error: WxCloudSDKError: 【错误】数据格式校验失败。根因:[#/body: expected type: String, found: Integer],原因:字段[正文], 标识[body], 类型不匹配:期望类型:字符串。,解决步骤:请按照原因修改数据类型。 errRecord:{"title":"你好,世界👋","body":123456}【操作】调用 post.create
这个错误提示表明,数据模型成功地检测到了类型错误,并阻止了错误数据的插入。这有助于确保数据的准确性和一致性。
自动处理关联关系
数据模型能够自动处理实体之间的关联关系,如一对一、一对多和多对多等关系。这使得在数据库设计和操作时能够更加方便地管理这些关系,提高数据处理的效率。
我们可以使用嵌套查询数据库中的多个表中读取相关数据 ,例如文章及其评论
例如通过 select
来指定查询结果中返回关联字段及其内部的特定字段。
const { data } = await models.post.list({
// 只查询必要的字段
select: {
_id: true,
title: true,
updatedAt: true,
comments: {
_id: true,
createdAt: true,
comment: true,
},
},
filter: {
where: {},
},
getCount: true, // 开启用来获取总数
});
// 返回查询到的数据列表 `records` 和 总数 `total
// 返回的内容明显是经过了数据库的过滤,只返回了_id, title, updatedAt三个字段
console.log(data);
// {
// records: [
// {
// _id: '9FSAHWM9VV',
// comments: [
// {
// createdAt: 1718096509916,
// comment: '11',
// _id: '9FSAJF3GLG',
// },
// ],
// title: 'Bonjour le Monde👋',
// updatedAt: 1718096503886,
// },
// {
// _id: '9FSAHWM9VU',
// comments: [],
// title: '你好,世界👋',
// updatedAt: 1718096503886,
// },
// {
// _id: '9FSAHWM9VT',
// comments: [],
// title: 'Hola Mundo 👋',
// updatedAt: 1718096503886,
// },
// {
// _id: '9FSAHWM9VS',
// comments: [],
// title: 'Hello World👋',
// updatedAt: 1718096503886,
// },
// ],
// }
自动生成 CRUD 代码
通过数据模型,可以自动生成针对小程序/web/云函数等多端的增删改查(CRUD)代码。这大大减少了开发人员的工作量,提高开发效率。
例如使用 upsert() 方法创建或更新文章内容:
const post = {
title: "Hello World",
body: "Hello World",
_id: "foo",
};
const { data } = await models.post.upsert({
create: post,
update: post,
filter: {
where: {
_id: {
$eq: post._id,
},
},
},
});
console.log(data);
// 新增时返回
// {
// "count": 0,
// "id": "foo"
// }
// 更新时返回
// {
// "count": 1,
// "id": ""
// }
自带 CMS 管理端
数据模型提供了自带的内容管理系统(CMS),非技术人员也能轻松地进行数据管理和维护,降低运营成本。
一键生成可编辑的管理端代码
数据模型支持一键生成可编辑的管理端,采用低代码技术可视化修改和定制开发,使得开发者无需手动编写管理界面,进一步提高开发效率
一键 AI 智能分析数据
数据模型可以使用 AI 来对数据进行智能分析。有助于从海量数据中提取有价值的信息,为决策提供有力支持。
同步兼容数据库的使用接口
在使用数据模型可进行数据读写操作的同时,也能直接使用数据库提供的接口进行操作。这有助于开发者快速迁移到数据模型,并减少开发成本。