数据库是我的C#应用​​程序的数据存储的正确选择吗?

时间:2010-08-18 16:24:40

标签: c# database data-storage

我正在开发一个C#应用程序,并希望确保我选择适合这些规范的数据存储的最佳选择。

程序可以拥有无​​限量的数据,但该数据仅供使用该应用程序的单个用户使用。每次关闭应用程序时,我都需要保存数据,并且需要在应用程序启动时加载它。

我查看了数据库,但不确定哪种数据库最适合我的需求。另外,我想知道在给定上述规范的情况下是否需要数据库,也许我应该使用实现序列化和反序列化的二进制文件/ XML文件。

请指出正确的方向!

谢谢, OC

编辑:我忘记包含的一个重要因素是必须允许一个用户保存他/她输入的所有条目并将其导出到可在应用程序/用户之间轻松共享的外部文件

4 个答案:

答案 0 :(得分:5)

在不了解您的特定应用程序的功能的情况下,很难(对我们而言)说出数据库是否是正确的选择。 但是,您可以使用一些经验法则来帮助您做出决定。

在以下情况下,数据库可能是一个不错的选择:

  • 多个用户可以使用该数据。
  • 当可能必须正确存储的并发活动时。
  • 当收集的数据不是一次都需要加载到内存中时。
  • 当您希望能够以复杂的方式查询或报告数据时。
  • 当您希望使用标准工具对存储的数据保持透明时。
  • 当更改主要是本地化而不是要求重建整个数据存储区时。
  • 当您的数据适用于关系(而不是分层表示)时。

在以下情况下,数据库可能不是最佳选择:

  • 您只为单个用户提供服务。
  • 并发活动很少,保存更改时必须重新创建整个数据模型。
  • 当数据非常少时,它将一次性加载到内存中。
  • 当您的数据是分层的或难以建立关系时。
  • 当您的应用程序面向文档时,文档(文件)将发送给其他用户。
  • 当您存储的数据中散布着大量二进制数据时。
  • 当您想避免依赖第三方工具或服务时。
  • 当数据模型的结构可能经常变化时。

这些都是经验法则......没有一个条件决定是否使用数据库。您必须检查所有注意事项,并确定使用数据库是否会给您足够的好处 - 或者不是。

在许多环境中(例如iPhone),平台上直接提供内置数据库层。还有一些工具(如NSCoreData)可以帮助您克服对象关系建模(ORM)阻抗不匹配。在这种情况下,使用数据库进行非常简单的数据存储可能会很有意义。

还有一些开源数据持久层(NHiberante,DB4O和其他)有助于简化数据库作为持久性存储的使用...如果可以使用它们,可以改变方程式,转而支持使用数据库。

当您需要支持查询或搜索功能时,数据库可以大大简化您的应用程序的开发。关系数据库支持查询语言(SQL),这使得从数据库中识别和检索结果的工作变得更加容易。让数据库完成繁重工作可以节省大量时间 - 因为数据库专门用于正确有效地执行查询操作。但是,这是以精心设计的关系数据结构为代价的 - 您必须创建它。

一个重要的考虑因素是用户是否将使用您的应用程序共享他们创建/使用的数据。如果您的应用程序更面向文档(想想Word,Excel,Powerpoint),那么基于文件的序列化模型可能更合适。如果您的应用程序的数据不会被共享 - 那么数据库可能是有意义的。

另一个重要因素是您希望数据的开放程度。数据库将信息存储在定义良好的结构(表)中,这使您(和您的用户)更容易直接访问和检查数据。像XML这样的存储格式也允许这样做,但程度稍低。

答案 1 :(得分:4)

像MySQL或SQL Server这样的成熟客户端/服务器数据库可能对单个用户来说太过分了。但是你可能会从SQLiteSQL Server CE这样的嵌入式/基于文件的引擎中获得一些用处,特别是如果你想对数据做更多的事情,而不仅仅是通过ID查找单个记录。如果您自己完成数据存储,则必须编写大量代码才能获得满足特定条件的记录,而且我保证您不会像以此为生的人那样做好。

答案 2 :(得分:2)

就我而言,个人对数据的了解多于使用应用程序的用户数量。

想想你的数据,它是否很复杂?如果你真的要创建一个数据库,它在对象方面有多大,而不是行数...有多少表等...

考虑未来,虽然它只有一个用户,但我认为数据仍然会增加,每次会保存多少数据?

数据库方法无疑会加速您的开发 - 您的数据将比XML文件具有更好的完整性。我讨厌亲自使用文件......过去我曾经历过数据丢失等文件的经历。

请记住,如果您希望保持资源有限,则始终存在SQL Compact Edition。

答案 3 :(得分:1)

如果您在存储库中实现存储功能1)2),您可以从存储到文件开始,然后在以后确定需要这样做的情况下移动到数据库存储

1)http://martinfowler.com/eaaCatalog/repository.html
2)https://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/10/08/the-repository-pattern.aspx