我正在处理一组数据(圣经),其中包含重复出现的字段(书籍、章节等...),并试图决定如何构建它。
这是我正在查看的两种设计的示例。一个比另一个更有用/合适/有益吗?
表格设计:
class Bible
{
public string Version { get; set; }
public string Book { get; set; }
public int Chapter { get; set; }
public int Verse { get; set; }
public string Text { get; set; }
}
很明显,表设计中存在大量的内存浪费(因为有重复的数据)。每个条目的版本都相同,大多数条目将重复本书,较少条目将重复章节。对于每个记录,只有诗句和文本是唯一的。另一方面,这就是数据库永远工作的方式(除非你走关系路线)。抓取数据 super 容易。
列表设计:
class Verse
{
public int Number { get; set; }
public string Text { get; set; }
}
class Chapter
{
public int Number { get; set; }
public List<Verse> Verses { get; set; }
}
class Book
{
public string Name { get; set; }
public List<Chapter> Chapters { get; set; }
}
class Bible
{
public string Version { get; set; }
public List<Book> Books { get; set; }
}
从内存的角度来看,这要简洁得多,但是您可以使用 foreach
来查找您需要查找的所有内容。我不确定 LINQ 是否也适用于多维(也许它很棒,但我只在平面数据上使用过它)。
大家怎么看?是否有时每一个都是一个明显的选择,或者一个总是将成为默认选择?
最佳答案
第二个是所有默认操作的更好选择。您的表构造就是这样,一个平面表。它缺少所有数据库功能,例如使用索引进行快速查找。
在第二个版本中,您可以找到一本书,然后将所有章节都包含在其中。在表格版本中,无论你做什么,你都必须横穿你的整个数据结构。
表格版本有冗余数据并且使用起来比较慢。对于真实的数据模型来说,这似乎是双赢的。
关于c# - 模型设计为数据库表还是多维列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40531028/