将电子表格用作数据库:一个很酷的想法

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 $200 免费积分!

电子表格一直以来都是数据库的一个强有力(即使是相当直观的)类比。数据库具有,这就像一个单独的电子表格。想象一个用于跟踪婚礼 RSVP 的电子表格。在顶部,列标题如姓名、姓氏、地址和出席?这些标题也是数据库表中的。然后,该电子表格中的每个人实际上都是一行,这在数据库表中也是一行(或条目、项目,甚至元组,如果你真的很有学问)。

越来越普遍的是,这不再需要是一个类比。我们可以完全按照字面意思使用电子表格 UI 作为我们的实际数据库。这很有意义,因为它不仅仅是将数据库数据视为电子表格,而是将电子表格类似的功能作为应用程序中与数据库类似的功能同等重要的功能。

使用电子表格,重点可能是查看整体并以这种方式理解事物。浏览、排序、直接在 UI 中输入和编辑数据,以及创建有用的可视化输出。

使用数据库,你不会真正直接查看它——你会查询它并使用结果。数据输入和编辑是通过代码和 API 完成的。

这并不是说你不能直接查看数据库。像 Sequel Pro(以及许多其他!)这样的数据库工具提供了一个界面,用于以电子表格类似的格式查看表

令人高兴的是,电子表格数据库的概念可以共存,同时提供两全其美。至少,在一定程度上。

我们之前在 CSS-Tricks 上讨论过 Airtable,它是一个非常好的例子。

Airtable 将它们称为基座,虽然你可以以各种有用的方式查看其中的数据(日历!图库!看板!),但主要的视图可能是电子表格。

如果你只使用 Airtable 作为电子表格,它仍然非常不错。UI 做得非常好。像过滤和排序这样的功能感觉是真正的同等重要功能,以至于其他电子表格技术没有做到这一点几乎让人觉得奇怪。甚至字段类型也感觉实用而现代。

此外,由于基座中存在各种不同的视图,以及更酷的是,它们提供的用于使视图更像仪表板的所有“块”,因此它是一个强大的工具。

但我想说的是,你也可以像数据库一样使用你的 Airtable 基座,因为你自动拥有对基座的读/写 API 访问权限。

很酷的是,这些 API 文档使用你自己的基座中的数据来演示 API。

我在我的文章 如何将 Airtable 用作前端开发人员 中更多地谈论了这一点。从读取数据的角度来看,这种 API 访问非常棒,可以做一些事情,例如 将其用作博客的数据源。Robin 提取数据来构建他自己的基于 React 的界面。我喜欢它有一个 GraphQL 界面,虽然它是第三方。

写入访问权限可以说更有用。我们在 CodePen 上使用它来进行类似 CRM 的工作,方法是将数据发送到一个包含所有我们需要的信息的 Airtable 基座中,然后直接使用 Airtable 来可视化事物并执行我们想要的操作。

Airtable 的替代方案?

曾经有 Fieldbook,但它 关闭了

RowShare 看起来奇怪地相似(虽然功能稍微少一些),但它似乎没有 API,因此它并不完全适合这种跨越数据库/电子表格差距的需求。 更新:显然它 确实有 API,我只是无法在以注销用户身份浏览网站时找到任何链接。

Zoho Creator 确实有 API 和内置的有趣的可视化功能,这实际上看起来非常酷。看起来他们的一些营销是围绕着这样的理念:如果你需要构建一个 CRUD 应用程序,你可以使用它来完成,而无需任何编码——我认为他们认为这很有说服力。

Actiondesk 看起来很有趣,因为它属于对电子表格功能的现代化演绎。

虽然它与数据库相连,因为它看起来可以从 MySQL 或 PostgreSQL 这样的东西中提取数据,但它似乎没有类似数据库的读/写 API。

我们可以直接使用 Google 表格吗?

天空最大的电子表格工具当然是 Google 的电子表格,因为它非常好、免费且熟悉。它更像是 Excel 的浏览器移植版,所以我可能会争辩说,它与数字极客的传统联系比它对电子表格或数据存储工具的任何新颖尝试更密切。

Google 表格有 API。他们相当重视它,因为它已经是 v4 版本,并有 大量文档和指南查看一个关于从 Slack 向其写入数据的实用小教程。 据我所知,问题在于 API 奇怪、复杂且难以使用,就像表格本身一样。叫我胆小鬼吧,但是 这个快速入门 让人有点眼花缭乱。

如果要保持所有数据都在 Google 表格中并像数据库一样使用它,那么最引人注目的方法似乎是Sheetsu

呃。Sheetsu 已死。Richard O’Dwyer 写信告诉我,他有一个替代服务:sheet2api。我将用它替换下面的屏幕截图和链接。

它处理连接/身份验证到表格,然后为你提供干净易懂的数据 API 端点。

此 API 的 URL 以及 文档

此外,还有一些有趣的功能,比如为你提供一个表单 UI,以便可能比处理电子表格本身更容易(或更公开)地输入数据。

还有 Sheetrock.js,这是一个开源库,可以帮助访问表格的 API,但它已经好几年没有更新了,所以我不知道它的状态。

我并没有说这个想法完全取代了传统的数据库。

一方面,数据库的关系部分(例如 MySQL)是一个非常重要的方面,我认为电子表格并不总是能够很好地处理它。

假设你的数据库中有一个员工表,该表中的每一行都列出了他们工作的部门。


ID  Name                  Department
--  --                    --
1   Chris Coyier          Front-End Developer
2   Barney Butterscotch   Human Resources   

在电子表格中,这些部门名称可能只是字符串。但在数据库中,在一定规模下,这可能并不明智。相反,你会拥有另一个部门表,并将两个表通过外键关联起来。这正是 这份经典解释文档 中所描述的。

要查找特定员工部门的名称,无需将员工部门的名称放入员工表中。相反,员工表包含一列,该列保存员工部门的部门 ID。这被称为部门表的外键。外键引用包含相应主键的表的特定行。


ID  Name                  Department
--  --                    --
1   Chris Coyier          1
2   Barney Butterscotch   2 

ID  Department            Manager    
--  --                    --
1   Front-End Developers  Akanya Borbio
2   Human Resources       Susan Snowrinkle

公平地说,电子表格也可以具有关系功能(Airtable 就可以),但它可能不像某些数据库那样是基本的一级公民。

也许更重要的是,数据库很大程度上是开源技术,由庞大的技术生态系统支持。你可以在各种不同的托管平台和硬件上托管你的 PostgreSQL 或 MySQL 数据库(或者所有大型数据库玩家的数据库)。有各种用于监控、保护、优化和备份它的工具。此外,如果你接近突破数万行规模的临界点,我认为电子表格已经跟不上。

选择专有数据托管者主要是为了在一定程度上实现便利性和花哨的 UX。我非常喜欢它。