我是 Raven DB 的新手,也是 No SQL DB 概念的新手。我试图摆脱 RDB 附带的一些概念。曾经的概念是,如果某个记录在某处用作外键,则 RDB 不会让我删除主记录。
假设我不想删除一个类别并且该类别的 ID 正在某些产品中使用,那么 RDB 不会让我删除该记录。这非常有用,因为我不必担心意外删除记录。如何将相同的概念应用于 Raven DB?我想使用像 RDB 这样的规范化结构,因为我计划将 Raven DB 与一些 RDB 结合使用。我想保持安全,以防万一,这样我就不会因为尝试新概念而陷入困惑。
希望我说得有道理,
任何帮助将不胜感激!
最佳答案
RavenDB 中没有外键约束这样的概念。真的,没有外键。您在文档中所拥有的只是一个字符串,可用于获取另一个文档。我们称之为关系,但它是一个松散的术语。没有什么可以将这些文档链接在一起并阻止您进行删除操作。
在您描述的场景中,您仍然可以加载产品。但是,如果您尝试使用该产品的类别 ID 加载类别,则会得到一个空值。
你必须自己维护这些关系。唯一可用的帮助程序是 Cascade Delete Bundle - 但您仍然必须连接每个实体以进行级联。它不会像使用基于 sql 外键的级联删除那样自动执行。
关于nosql - RavenDB 中的关系数据库删除概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14276274/