我今天来是因为我必须从SQL(使用实体框架)迁移到MongoDb,但是,编程方面的数据库方面是我不是专家的领域,我想为演进做出最佳选择我正在研究的程序。
让我说我有这个数据库模式(一个主意,而不是实际情况):
所以我有一所学校。在这所学校,我有课,那些课有学生。外键是斜体字段。
它应该在C#中给出类似的内容:
public class SchoolEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; } = new Guid();
public string Name { get; set; }
[InverseProperty("School")]
public virtual ICollection<ClassTeachingEntity> ClassTeachings { get; set; }
}
public class ClassTeachingEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; } = new Guid();
public Guid SchoolId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
[ForeignKey("SchoolId")]
public virtual SchoolEntity School { get; set; }
[InverseProperty("ClassTeaching")]
public virtual ICollection<StudyingEntity> StudyingEntities { get; set; }
}
public class StudyingEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; } = new Guid();
[Index("UniqueStudyingRelation", Order = 1, IsUnique = true)]
public Guid UserId { get; set; }
[Index("UniqueStudyingRelation", Order = 2, IsUnique = true)]
public Guid ClassTeachingId { get; set; }
[ForeignKey("UserId")]
public virtual UserEntity User { get; set; }
[ForeignKey("ClassTeachingId")]
public virtual ClassTeachingEntity ClassTeaching { get; set; }
}
public class UserEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; } = new Guid();
public string Firstname { get; set; }
public string Lastname { get; set; }
[InverseProperty("User")]
public virtual ICollection<StudyingEntity> StudyingEntities { get; set; }
}
我的问题是,首先,当前结构是否良好? (我没有设计它,它是我来之前就已经意识到的,我比数据库专家更像是一个初学者)
第二个问题是,我是否必须从四个不同的表中仅创建一个文档?因为据我所知,在mongodb中,这是一个JSON逻辑,因此我可以存储嵌套对象吗?
我不知道此信息是否重要,但是我将在mongodb(而不是C#)中使用Go。
感谢您的反馈
答案 0 :(得分:3)
如果我正确理解您的问题,则必须将现有的C#+ SQL程序迁移到GO + Mongo堆栈。您正在尝试提出类似is the current structure good
之类的技术问题来解决它。
这里缺少东西。
每种技术都只是解决业务问题的方法。这是什么业务问题?您的问题不能解释这一点。
在进入技术方面之前,请尝试获取以下问题的答案:
无论如何,请谨慎尝试将RDBMS和ORM模式应用于mongo DB。这是非常不同的数据存储类型(文档DB),RDBMS模型不能仅复制到其中。
答案 1 :(得分:2)
1-当前的结构看起来还可以。当然,这取决于您的具体情况,但这似乎很好。
2-您可以,但不必。当您的数据没有关系时,仅拥有一个文档是有意义的。就您而言,将它们分开可能更有意义,否则您可能会有很多重复的条目。您可以使用 $ lookup 聚合在文档之间执行联接。
请小心 $ lookup 。我上一次阅读有关内容的信息时,如果将您的数据分片,则Mongo不支持此操作。