最近在设计科室的医学服务中台,最开始想设计得扩展性比较好。例如,设计成动态table的范式,用户可以自己添加字段,这样就可以像excel那样,什么时候想增加一列,用户(或者说管理员)就可以给你加一列,比如今天想算Centiloid,明天可以用户自己加一个CenTauR,后天再加个别的。

但是这样在开发的层面上就很难做,因为太灵活了:后端没法确定表的字段、没法做校验;前端能做的事情也不多,需要后端返回渲染的schema然后前端读取出来直接渲染(有点服务端渲染那意思)。换言之,开发这东西约等于开发一个在线版本的excel软件(笑

中间一度想尝试一下supabase这样的工具,database as backend:这看上去挺符合要求的,因为用户可以在dashboard里动态增加表,假如科室新开了别的业务,可以很容易地扩展。

但仔细想一下,真的容易扩展吗?

本质上,选择supabase这种解决方案指向的核心是把“医生变成运维”,而不是让自己成为运维,对吗?虽然动态增加一张CenTauR表很容易,但是你还是不得不要求一帮医生来设计RLS、视图、触发器、edge function、storage等等。而且有时候你也不得不去重写前端代码,来渲染这些新表。

supabase真正的优势其实并不在数据层面的扩展,而是backend as a service,也就是说帮你把storage、authentication这些东西包圆了,而不是在数据库层面上给你无穷无尽的扩展性。

所以,本质上做科室内部工具,运维只能是我自己,不可能让医生做,医生只可能是用户。所以与其考虑扩展性,更应该有限考虑的是如何充分利用AI编码软件、如何功能上进行快速扩展,而运维只可能是自己。