Strapi之表设计(下) | 青训营笔记

638 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

前言

strapi是一款非常优秀的Headless CMS框架,它提供了非常多的数据库可供选择,但又做了充足的工作,使得各个数据库的使用差异都被抹平了。

不仅如此,strapi在一些经典的数据库类型上,增加了自己的理解。除了常规的text、number、boolean类型,它还为联表查询设计了一种更为方便的Relation类型。基于这种类型,我们可以清晰的明白各个表之间的关联性。这为初学者也提供了很多方便。

当然,本文讲述的重点是Component类型和Dynamic Zone,数据类型在笔者前几篇均有讲述,本文旨在重点讲述Component类型的使用。但在这之前,我们需要讲述Strapi里面的singleType和collectionType。

singleType VS collectionType

我们不从原理上讲解他们的区别,因为在实际使用时,我们不需要关心这些。我们先从字面意思看这两者。collection表示集合,说明他有很多条记录。single代表单个,也就是一条记录。

在使用上,我们经常使用singleType作为我们的配置数据。他们不需要设置多个,只需要一条数据即可。

Component

顾名思义,他就是组件的意思。简单理解,他就是对常规类型的一种封装。使得它可以包含多种类型。他的出现,给数据类型提供了更多扩展类型。我们可以通过这种方式,搭积木一样的搭出我们想要的类型。

常规用法

他的实际方式不是建一张数据表,因此,你可以认为他的成本较低。那么,当我们遇到一些需要使用数据库,但不想要建一张数据表这样耗费很多成本的方式,那么就可以尝试使用component类型。例如,我们需要一些全局配置存储在数据库。但是全局配置,基本都是很少的几条数据,不值得为他们创造很多张表。那么我们就可以使用component的方式把他们全部都组合在一起。 image.png 上面这张图就很清晰的显示了如何将一些不值得建表的类型封装成Component,然后再放入一张singleType的表中。 除了一些配置项我们需要使用component,一些字段,我们仍需要component来封装使用,这样能够提供更加清晰实用的使用。

缺陷

  • Relation类型会做限制。
  • 一个组件不相当于表,无法通过api获取。

Dynamic Zone

这个是基于component的类型。它提供一个动态选择组件。例如,在一个需要大部分相同字段,但部分字段有所区别的情况。这种情况,原本需要自己去增加一个判断字段或者直接建两个表。但现在不一样,我们可以针对不同的部分创建两个组件。他们都属于一个dynamic zone类型的字段。 当然,一条记录可以同时使用这两个组件。 image.png

引用

www.youtube.com/watch?v=u4p…