RavenDB文档结构与关系模式

时间:2012-11-27 17:55:58

标签: ravendb

我最近开始使用RavenDB。

以下是关系数据库中的传统示例:

EmployeeType

ID:1 TYPE:DEV ID:2 TYPE:QA

员工

NAME:FRED TYPEID:1
姓名:JACK TYPEID:2

根据我对RavenDB的理解,该类型将包含在员工中:

员工

姓名:FRED TYPE:DEV
姓名:杰克类型:QA

那么是否需要EmployeeType表?

如果没有,如果您要显示员工类型的下拉列表,您是否只需从员工中选择不同(类型)?

如果您要执行上述操作,如何在不输入新员工(或编辑现有员工)的情况下添加新员工类型?或者你只是在代码中保留一个列表?

最后,如果员工类型的文本发生了变化,那么您似乎需要更新所有员工记录。如果有100,000个员工记录怎么办?

我是Raven(文档数据库)的新手,所以有任何见解可以帮助我更好地掌握不同的范例。

1 个答案:

答案 0 :(得分:3)

  

那么是否需要EmployeeType表?

将满足下一个问题的要求。此外,这种类型的参考数据可以只存储在单个文档中,而不是文档集合中。您还可以维护一个硬编码列表,一起绕过数据库。

  

如果没有,如果您要显示员工类型的下拉列表,   你会从Employee中选择distinct(Type)吗?

没有。从员工类型文档中选择。从员工表中选择不同将告诉您记录的员工类型,而不是可用的员工类型。

  

最后,如果员工类型的文本发生了变化,那么似乎就是这样   就像你需要更新所有员工记录一样。如果   有100,000个员工记录?

您正面临着关系数据库和文档数据库之间的有效权衡。你有几个选择。您可以通过指向员工类型文档集合的ID从员工文档中引用员工类型。通过这种方式,您可以在一个位置更改员工类型名称。但是,权衡是RavenDB需要包含(加入)这两个文档来返回一个类型的员工。另一种方法是避免员工类型ID并将类型直接存储在员工文档中,并且当需要更改名称时,您将在所有文档中运行更新。从RavenDB文档中查看here