Ich versuche NoSQL und während der Erkundung kann ich nicht in den Kopf, wie man mit Referenzdaten umgehen. (Ich bin an die traditionelle Datenbank gewöhnt, die tabellarische) Sagen Sie, ich habe eine Schuleinheit mit Schülern und Anforderungen. Jetzt kann der Student an einer Schule eingeschrieben werden und kann die Anforderungen später erfüllen. Also würde die Schule nach einem Schüler suchen und prüfen, welche Anforderungen er erfüllt hat.Denken NoSQL auf Referenzdaten
Auf traditionelle Datenbank würde ich etwas wie tun.
+---------+ +---------------+ +--------------------+ +---------+
| School | | Requirement | | StudentRequirement | | Student |
+---------+ +---------------+ +--------------------+ +---------+
| Id (PK) | | Id (PK) | | Id (PK) | | Id (PK) |
| Name | | Name | | StudentId (FK) | | Name |
+---------+ | SchoolId (FK) | | RequirementId (FK) | +---------+
+---------------+ | HasComply |
+--------------------+
würde ich 4 Entities erstellen, und die Requirement
hat eine viele-zu-viele-Beziehung zu einem Student
. Also, ob ich eine Requirement
editiere oder entferne, kann ich nur auf die Zwischentabelle schauen.
Eine Strömung so etwas wie:
// EnrollStudentToASchool
// AssignAllRequirementsToNewStudent
Dann irgendwo in meinem Code, wenn eine neue Anforderung
// IfNewRequirement
// AddNewRequirementToStudent
Jetzt erstellt wurde, in NoSQL und in meinem Fall habe ich mongodb bin mit einem doc type Datenspeicher Ich habe irgendwo gelesen, dass Daten inline sein sollten. Etwas wie:
{
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: []
}
Die Wurzel meines Dokuments wird die School
, gleiche Strömungs oben:
// EnrollStudentToASchool
// AssignAllRequirementsToNewStudent
// IfNewRequirement
// AddNewRequirementToStudent
Aber im Falle von, sagen wir, die Schule den Namen des Requirement
zu bearbeiten beschlossen oder entfernen a Requirement
.
Wie soll es gemacht werden? Sollte ich alle meine Schüler wiederholen und die Anforderungen bearbeiten/entfernen? Oder vielleicht mache ich alles falsch.
Bitte beraten.
Lassen Sie mich wissen, wenn ich Sie richtig verstehe. Du hast 2 Kollektionen erstellt, nämlich 'school' und' student'. Du hast den Schülern die Schuldetails irgendwie eingegliedert, also keine extra Rundreise. Jetzt, wenn eine Anforderung von einer Schule hinzugefügt/aktualisiert/entfernt wurde, müssen alle Schüler- und Schulaufzeichnungen wiederholt werden. Richtig? By the way, vielen Dank für die Mühe, die visuelle Beziehung –
@BoyPasmo ja das ist richtig! Bitte schön! – profesor79
Auch ich merke auf der visuellen Darstellung, dass Sie die "Anforderungen" an "Student" eingebettet haben. Ist es keine extra Hin- und Rückfahrt? Wenn Sie dies in einer C# -Klasse darstellen würden. 'öffentliche Klasse Student {public int Id {get; einstellen; } öffentliche Zeichenkette Name {get; einstellen; } public string Schulname {get; einstellen; } public ICollection Anforderungen {get; einstellen; }} 'Ist das nicht ein Design-Geruch? Oder gibt es vorher eine Art Konfiguration oder Mapping? –