【发布时间】:2026-01-09 05:20:04
【问题描述】:
我正在尝试 NoSql,但在探索过程中,我无法思考如何处理参考数据。 (我习惯于传统的数据库,表格数据库)说,我有一个有学生和要求的学校实体。现在,学生可以注册到学校并可以在以后遵守要求。因此,学校会寻找一名学生并检查他遵守了哪些要求。
在传统数据库上,我会做类似的事情。
+---------+ +---------------+ +--------------------+ +---------+
| School | | Requirement | | StudentRequirement | | Student |
+---------+ +---------------+ +--------------------+ +---------+
| Id (PK) | | Id (PK) | | Id (PK) | | Id (PK) |
| Name | | Name | | StudentId (FK) | | Name |
+---------+ | SchoolId (FK) | | RequirementId (FK) | +---------+
+---------------+ | HasComply |
+--------------------+
我将创建 4 个实体,Requirement 与 Student 具有多对多关系。所以无论我是编辑还是删除Requirement,我都可以只看中间表。
流程类似于:
// EnrollStudentToASchool
// AssignAllRequirementsToNewStudent
然后在我的代码中的某个地方,如果创建了新需求
// IfNewRequirement
// AddNewRequirementToStudent
现在,在 NoSql 中,就我而言,我使用的是 mongodb,一种 doc 类型的数据存储。我在某处读到数据应该是内联的。比如:
{
Id: 1,
School: 'Top1 Foo School',
Requirements:
[
{ Id: 1, Name: 'Req1' },
{ Id: 2, Name: 'Req2' }
],
Students:
[
{
Id: 1,
Name: 'Student1',
Requirements:
[
{ Id: 1, Name: 'Req1', HasComply: false },
{ Id: 2, Name: 'Req2', HasComply: true },
]
}
]
},
{
Id: 2,
School: 'Top1 Bar School',
Requirements: [],
Students: []
}
我的文档的根是School,与上面的流程相同:
// EnrollStudentToASchool
// AssignAllRequirementsToNewStudent
// IfNewRequirement
// AddNewRequirementToStudent
但如果学校决定编辑Requirement 的名称或删除Requirement。
应该怎么做?我应该循环我所有的学生并编辑/删除要求吗?或者我做错了。
请指教。
【问题讨论】: