我认为这个问题没有唯一的正确答案……但我建议你考虑以下因素……你决定使用关系数据库(我认为这是完全可以的!)……那么有人可能会争辩说,首先你的问题是与ER-modeling等相关的,而不是真正与Clojure相关。:-)
...我的意思是什么?嗯,你已经提到了ORM...自从你做Java以来,关系型和面向对象的世界存在着“阻抗不匹配”问题,很多时候,这会导致代码非常混乱/令人头疼等各种问题。
好吧...但是,当你选择ORM时,会付出巨大的代价(我认为)...也就是说,如果你不仔细考虑你的做法,例如Hibernate,可能会给出非常疯狂的东西/查询...例如在愚蠢地获取某种树结构时,生成的SQL可能相当荒谬...显然,Hibernate非常强大...你可以集成非常复杂的缓存等等...然而...要想做好Hibernate,其实并不那么容易/直接...我感觉...
所以...即使是在做Java时,我也建议首先考虑使用Spring JDBC数据访问...因为...正如我说的,JPA无疑增加了相当多的复杂性...(所以我们问问自己是否真的需要JPA)
...总之...我想说的是...关系数据库很棒...SQL很棒...PostgreSQL也很棒!!!...许多编程语言的问题在于,与关系技术交互往往非常痛苦...所以你开始建立各种工具,如ORM等,以使生活更加可忍受...(所以我们在谈论治疗,而不是治愈)
...现在我想论证的是,对于Clojure来说,整个不匹配问题要小得多,因为Clojure不是建立在Person类等之上,而是拥有一些强大的集合,这使得你可以轻松去操作。
...所以让我们使这个问题更具体一些...我已经使用Clojure(script)构建了这个闪存卡SAP。
...现在...我对很多事情都不是很满意...例如,我非常想从Bootstrap切换到Bulma等...这是我迄今为止做的第一个非简单规模的Clojure项目...因此,显然我犯了很多错误...我将尽可能进行重构/改进...不过,主要问题是我对PostgreSQL关系型数据库的部分最不担心。
....我使用了luminus模板来设置PostgreSQL项目...该设置包括hugsql(一个用于拥抱SQL的Clojure库)....然后你可以在完全不接触任何应用程序编程语言的情况下进行DDL/模式操作...你的PostgreSQL查询...存储过程等...多棒啊!!....另外,比如说我想从Clojure切换到Java/Node等...由于使用hugsql你只是在操作SQL...以及非常少的元配置,这些配置以注释的形式存在...从这些注释中,你可以得到可以在运行查询时使用的Clojure函数...你可以以map的形式将这些参数传递给这些预处理语句...并得到一个记录的map输出,或者多个记录的map序列...以及null,表示没有记录...我想...
……在进行转换等操作时,您拥有所有基本的但强大的Clojure函数,使得对映射和序列的处理变得轻而易举。此外,在转换类型时总会有一些琐碎的事情,比如从Postgres到Java,从Java到JS。但如果你使用Luminus,你将直接获得这些实用程序。例如,在我的闪卡应用中,有很多时间戳……(……你是何时回答某些卡片正确的,何时留下评论等等。)……日期类型总是有些棘手……java.sql、java.util、joda等等。但在制作这个应用时,我真的没有必要担心这些……Luminus会为你处理所有这些事情。此外,使用优秀的clj(script)时间库……(https://github.com/dm3/clojure.java-time / https://github.com/andrewmcveigh/cljs-time)……你可以编写与时间相关的代码,并且它们可以在中间件以及前端上运行(……有一些小的例外。)……(……Luminus提供了所需的transit-adapter?(不确定是否真的叫这个名字)……等等!)。
……无论如何,我采用了基于KISS原则的策略,我对此非常满意。你自己做出判断吧……:-)