Sequelize 虚拟主键与 id 主键

面试官:小伙子,你的数组去重方式惊艳到我了

在 Sequelize 中,每个模型都应该有一个主键来标识一条数据。Sequelize 默认使用 id 字段作为主键,但是也可以使用自己的主键。除了自己设定主键之外,在 Sequelize 中还有一种被称为“虚拟主键”的概念。

什么是虚拟主键

虚拟主键实际上就是没有真正的主键字段,但是我们仍然可以操作它。在 Sequelize 中,虚拟主键可以由其中的一个或多个字段组成。这些字段的组合值将唯一标识一条数据。虚拟主键通常在没有自然主键(如 id)的情况下使用。

虚拟主键的优点

无需创建一个额外的 id 列

使用虚拟主键可以避免创建一个额外的 id 列,这可以节省数据库空间和查询时间。在某些数据表中,这个额外列可能是不必要的。

可以使用自己的列作为主键

如果你不想使用 Sequelize 默认的 id 列作为主键,你可以使用自己的列来创建一个虚拟主键。

可以定义更复杂的主键

如果数据表没有一个天然主键,那么使用虚拟主键可以非常方便地定义更复杂的主键。

什么情况下使用虚拟主键

当你的数据表没有一个比其他字段更为适合的主键时,你可以使用虚拟主键。例如,你可能需要将用户表分为多个租户,每个租户可能都有一个唯一的用户编号。在这种情况下,你可以使用组合字段作为虚拟主键。

如何在 Sequelize 中使用虚拟主键

创建带有虚拟主键的模型

----- --------- - ---------------------
----- --------- - --- --------------------- ----------- ----------- -
  ----- ------------
  -------- -------
---

----- ---- - ------------------------ -
  ------ -
    ----- -----------------
    ------- ----
  --
  --------- ----------------
-- -
  -------- -
    -
      ------- -----
      ------- --------- -----------
    -
  --
  ----------- -----
---

----------------- -------

在上面的代码中,我们使用了 emailusername 作为虚拟主键。这个虚拟主键由这两个字段的组合值唯一标识一条记录。

使用虚拟主键进行查询

------------------ -
  ----------- --------- -----------
------------ -- -
  ---------------------------- --------
---

在上面的代码中,我们使用 findByPk 方法来查找一条用户记录。用于查找的参数为 '1',这里的 '1' 表示我们要查找主键为 '1' 的记录。虚拟主键的查找方式和普通主键查找方式一样。在我们的模型中,虚拟主键由 emailusername 组成,参数 '1' 表示我们要查找 emailusername 均为 1 的记录。

使用虚拟主键进行更新

---------------------- ---------------- -
  ------ -
    ------ -------------------
    --------- ---------------
  -
-------------- -- -
  --------------------
---

在上面的代码中,我们使用 update 方法来更新用户记录。在使用虚拟主键进行更新时,我们要传递所有虚拟主键字段的值。

结论

使用虚拟主键可以使表结构更灵活,而不需要依赖自增的 id 等方式。当你面临没有自然主键的表时,使用虚拟主键会非常有用。现在你可以使用虚拟主键操作 Sequelize 中的数据表了。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66fbbb08447136260161418e


猜你喜欢

  • React 中如何处理事件

    React 是一个流行的前端框架,它通过组件的形式来构建用户界面。在 React 中,事件处理是构建交互应用程序的基本方法之一。本文将介绍 React 中的事件处理机制,包括绑定和解绑事件处理器、事件...

    18 天前
  • Headless CMS 入门:使用 Github 作为文件存储

    什么是 Headless CMS Headless CMS 是指不带前端(Head)的内容管理系统(CMS),它允许开发者通过 API 或者其他编程接口来获取内容和数据,而不局限于特定的前端框架或库。

    18 天前
  • 如何在 Mocha 测试中 mock 掉全局变量?

    在前端开发中,Mocha 是一个广泛使用的 JavaScript 测试框架。这个框架让编写测试变得非常容易,可以帮助我们更轻松地验证代码的正确性。在进行测试时,如果我们想 mock 掉全局变量,那么该...

    18 天前
  • 如何计算响应式设计中的 breakpoints?

    响应式设计是现代前端开发中不可或缺的一部分。随着设备的多样化和屏幕大小的不同,为了让网站在不同的设备和屏幕上都展现良好的体验,我们需要在设计和开发时考虑响应式设计。

    18 天前
  • Redux 架构的优缺点概述

    随着 Web 应用不断复杂化,前端开发者们又开始对应用状态管理产生了更高的需求。而在这种情况下,Redux 架构应运而生。Redux 是一个用于 JavaScript 应用的可预测的状态容器,通过约定...

    18 天前
  • Kubernetes 存储卷概述及使用详解

    在 Kubernetes 中,存储卷是非常重要的概念之一。它允许容器之间和容器与 Pod 的通信,同时也提供了可持续化存储的功能。本文将介绍 Kubernetes 存储卷的基础知识以及如何在应用程序开...

    18 天前
  • ES10 防止拷贝对象改变引用之术

    在前端开发中,拷贝对象是一个很常见的操作。然而,当我们改变一个已经拷贝过的对象时,有时候我们会发现原始对象也跟着改变了,这是因为 JavaScript 中的对象是引用类型,拷贝对象只是复制了指针而已。

    18 天前
  • Express.js 的视图引擎比较 —— 选择正确的选项

    在使用 Express.js 时,选择合适的视图引擎能够帮助我们提高开发效率,打造出更加优雅的界面。本文将介绍 Express.js 中常用的视图引擎,包括 EJS、Handlebars、Pug、Nu...

    18 天前
  • ESLint 检查 React 项目时,如何忽略 JSX 中的 htmlFor、className 属性

    ESLint 是一个非常强大的 JavaScript 代码检查工具,它可以在代码编写过程中提示和修复错误、警告以及代码风格问题。如果你正在使用 React 开发应用程序,你肯定会在 JSX 中使用 h...

    18 天前
  • GraphQL 错误类型及其解决办法

    GraphQL 是一种新兴的 API 查询语言,越来越多的公司将其用于前端开发。相比传统 RESTful API,GraphQL 有着更好的性能、更灵活的数据获取方式以及更好的类型检查功能。

    18 天前
  • Hapi vs Koa:哪个适合你?

    前端开发的世界中有许多不同的 Node.js 框架,每个框架都有它独特的特性和功能。其中比较受欢迎的有 Hapi 和 Koa 两个框架,它们都提供了简单、灵活和易于使用的 API。

    18 天前
  • 解决 Docker 内部访问外网速度慢的问题

    在使用 Docker 进行前端开发时,我们可能会遇到 Docker 容器内部访问外网速度慢的问题。这个问题可以通过一些方法和技巧解决,本文将介绍其中的一些。 问题背景 在 Docker 环境中执行 n...

    18 天前
  • 如何使用 ECMAScript 2015(ES6)中的解构赋值

    在现代的前端开发中,ES6已经成为了必备的技能之一。其中,解构赋值是ES6中非常实用的一个特性,它允许你从数组或对象中快速取出值并赋给变量,提升了开发效率和可读性。

    18 天前
  • 让你的 Jest 测试覆盖率更准确的方法

    Jest 是一个非常受欢迎的 JavaScript 测试框架,它提供简单易用的 API,可以用于测试前端和后端 JavaScript 应用程序。一个好的测试套件应该覆盖尽可能多的代码,以确保应用程序的...

    18 天前
  • Enzyme + React Native: 如何测试使用 React Navigation 的应用

    Enzyme + React Native: 如何测试使用 React Navigation 的应用 React Native 是一个强大的跨平台应用开发框架,而 React Navigation 则...

    18 天前
  • AngularJS+cordova 打造高性能 SPA 应用

    在移动互联网时代,越来越多的用户对响应速度、用户体验和性能苛刻要求高的体验,特别是在单页面应用(SPAs)场景下,要求更高的网页性能已经成为了关键因素之一。 本文将介绍如何使用 AngularJS 和...

    18 天前
  • CSS Grid 如何实现悬浮回到顶部布局?

    在现代网页设计中,悬浮回到顶部的布局是一个非常流行的特性,它可以帮助用户快速回到页面开头,提升页面的使用体验。在本文中,我们将介绍如何使用 CSS Grid 实现悬浮回到顶部的布局。

    18 天前
  • 如何使用 Cypress 测试您的单页面应用程序

    在开发单页面应用程序时,测试是不可或缺的一部分。因为单页面应用程序通常依赖于 JavaScript 和 Ajax,所以测试的质量和完整性对于保证项目稳健运行至关重要。

    18 天前
  • 如何在 Headless CMS 中一键生成静态网站

    什么是 Headless CMS? Headless CMS(无头 CMS)是一种新兴的内容管理系统。与传统 CMS 不同,Headless CMS 只负责内容管理,并不关心展示方式。

    18 天前
  • Next.js 导出静态文件时无法加载动态内部链接的解决方法

    前言 Next.js 是一款基于 React 的 SSR 框架,它能够将 React 组件在服务端进行渲染,并生成完整的 HTML 静态页面。在构建静态网站时,Next.js 是一个很好的选择。

    18 天前

相关推荐

    暂无文章