文档DB中每个集合应该有一个实体吗?
考虑我在下图中有外键关系:

我应该为员工创建两个集合,为公司创建其他集合.或者我应该将它们存储在一个集合中?
我在这里读到,在documentdb中,存储过程触发器等的范围都在一个集合中.因此,通过将不同的实体拆分为单独的集合,我开箱即用.
因此,将这两个类转储为单个实体并不是更好:
{
"Id": 1001,
"Industry": "Software",
"Employees": [
{
"Id": 10011,
"Name": "John Doe",
"CompanyId": 1001
},
{
"Id": 10012,
"Name": "Jane Doe",
"CompanyId": 1001
}
]
}
Run Code Online (Sandbox Code Playgroud)
在DocumentDB中实现相关实体的标准做法是什么?
我正在学习DocumentDb中的数据建模.这是我需要一些建议的地方
请看下面我的文档是什么样的.
我可以采取两种方法,既有利也有弊.
场景1:
如果我通过将项目团队成员信息(即姓名,电子邮件等)保存在与项目相同的文档中来保持数据非规范化(请参阅下面的文档),我可以在一个查询中获取我需要的信息但是当Jane Doe结婚,她的姓氏改变了,我必须更新Projects系列中的很多文件.我还必须非常小心地确保包含员工信息的文档的所有集合也得到更新.例如,如果我在Projects集合中更新Jane Doe的名字但忘记更新TimeSheets集合,那我就麻烦了!
场景2:
如果我保持数据有些规范化并且只在项目文档中保留EmployeeId,那么每当我想获得项目列表时,我就可以运行三个查询:
然后我可以组合我的应用程序中的所有数据.
这里的问题是DocumentDb现在似乎有很多限制.我可能正在阅读项目团队中数百名员工的数百个项目.看起来没有有效的方法来获取其Id出现在我的第二个查询中的所有员工信息.请再次注意,我可能需要在此处提取数百个员工信息.如果以下SQL查询是我用于员工数据的,我可能需要运行几次相同的查询以获取我需要的所有信息,因为我认为我不能拥有数百个OR语句:
SELECT e.Id, e.firstName, e.lastName, e.emailAddress
FROM Employees e
WHERE e.Id = 1111 OR e.Id = 2222
Run Code Online (Sandbox Code Playgroud)
我知道DocumentDb仍在预览中,其中一些限制将得到修复.话虽如此,我该如何处理这个问题?如何有效地存储/管理和检索我需要的所有项目数据 - 包括项目团队信息?方案1是更好的解决方案还是方案2还是有更好的第三种选择?
这是我的文档的样子.一,项目文件:
{
id: 789,
projectName: "My first project",
startDate: "9/6/2014",
projectTeam: [
{ id: 1111, firstName: "John", lastName: "Smith", position: "Sr. Engineer" },
{ id: 2222, firstName: "Jane", lastName: "Doe", position: "Project Manager" }
]
}
Run Code Online (Sandbox Code Playgroud)
这里有两个员工文档,它们位于Employees集合中:
{
id: 1111,
firstName: "John",
lastName: "Smith",
dateOfBirth: "1/1/1967',
emailAddresses: …Run Code Online (Sandbox Code Playgroud) 我在 documentdb 上执行其他 SQL 有效的自联接查询时遇到问题。
因此,以下查询有效:
SELECT * FROM c AS c1 WHERE c1.obj="car"
但是这个简单的自连接查询不会:SELECT c1.url FROM c AS c1 JOIN c AS c2 WHERE c1.obj="car" AND c2.obj="person" AND c1.url = c2.url,出现错误,Identifier 'c' could not be resolved。
似乎documendb 支持文档内的自联接,但我问的是集合级别。
看了官方的syntax doc,了解到集合名称基本是推断出来的;我尝试c明确更改为我的收藏名称和根,但都没有奏效。
我错过了一些明显的东西吗?谢谢!