我是Raven DB的新手,也是No SQL DB概念的新手。我试图摆脱RDB带来的一些概念。一旦概念是如果某个记录在某处被用作外键,RDB就不会让我删除主记录。
假设我不想删除一个类别,并且该类别的ID正在某些产品中使用,那么RDB将不允许我删除该记录。这非常有用,因为我不必担心意外删除记录。如何将相同的概念应用于Raven DB?我想使用像RDB这样的规范化结构,因为我计划将Raven DB与一些RDB结合使用。为了以防万一,我希望保持安全,这样我就不会因为尝试新概念而陷入混乱。
希望我有道理,
非常感谢任何帮助!
答案 0 :(得分:3)
RavenDB中没有外键约束这样的概念。真的,没有外键。文档中的所有内容都是一个字符串,可用于获取另一个文档。我们称之为关系,但这是一个松散的术语。没有任何内容可以将这些文档链接在一起并阻止您进行删除。
在您描述的方案中,您仍然可以加载产品。但是如果您尝试使用该产品的类别ID加载类别,则会得到null。
你必须自己维护这些关系。唯一可用的帮助是Cascade Delete Bundle - 但您仍然必须连接每个实体以进行级联。它不会像使用基于sql外键的级联删除那样自动执行。