小编Sup*_*rst的帖子

数据库中的合格关系

在关系数据库中,我可以有一个表Person和一个表Hobby.每个人都可以拥有零,一个或多个爱好,而且我还想记录每个人的爱好优先级.

我可以创建一个关系表用2个外键PersonFKHobbyFK,和一个普通的列Priority.

在datomic中,为了建模一个简单的n:m关系(没有优先级),我可能会创建一个带有基数的类型属性ReferenceMany,我将其用于Person实体.

但是,我怎么会去排位是相对于能够存储的优先级?是否必须类似于关系情况,即通过为该关系创建新的实体类型?还是有更好的方法吗?使用一些元数据设施或什么?

many-to-many data-modeling datomic

8
推荐指数
1
解决办法
762
查看次数

懒散地将序列的多个连续项目折叠为单个项目的最佳方法

[注意:标题和文本都经过大量编辑,以便更清楚地表明我不是特别在字符串之后,而是在一般序列之后,以及对它的延迟处理]

使用字符序列/字符串作为示例,假设我想要转换字符串

"\ ta\r \n\t\t\t\r \n \n \n\r \n \n \n \n"

"asdf"

更一般地说,我想将序列中的所有连续空格(或任何其他任意项目集合)转换为单个项目,并且懒得.

我已经提出了以下分区 - /mapcat组合,但想知道是否有更容易或更好的方法(可读性,性能,任何东西)来完成同样的事情.

(defn is-wsp?
  [c]
  (if (#{\space \tab \newline \return} c) true))

(defn collapse-wsp
  [coll]
  (mapcat
   (fn [[first-elem :as s]]
     (if (is-wsp? first-elem) [\space] s))
   (partition-by is-wsp? coll)))
Run Code Online (Sandbox Code Playgroud)

在行动:

=> (apply str (collapse-wsp "\t    a\r          s\td  \t \r \n         f \r\n"))
" a s d f "
Run Code Online (Sandbox Code Playgroud)

更新:我使用字符串/字符序列/ wsp作为示例,但我真正想要的是任何类型的序列上的泛型函数,它会折叠任意数量的连续项,这些项是预定义项集的一部分,由一些单个项预定义项目.我特别感兴趣的是知道是否有更好的partition-by/mapcat替代品,如果可以针对'string'特殊情况进行优化,那就更好了.

更新2:

这是一个完全懒惰的版本 - 上面的一个并不是完全懒惰的,我担心,除了它正在做多余的is-wsp?检查.我概括了参数名称等,所以它看起来不像是一个你可以通过String.whatever()调用轻松替换的东西 - 它是关于任意序列的.

(defn lazy-collapse
  ([coll is-collapsable-item? collapsed-item-representation] …
Run Code Online (Sandbox Code Playgroud)

clojure

5
推荐指数
1
解决办法
592
查看次数

标签 统计

clojure ×1

data-modeling ×1

datomic ×1

many-to-many ×1