3

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

该程序可以有无限量的数据,但这些数据只能由使用该应用程序的单个用户使用。每次关闭应用程序时,我都需要保存数据,并且需要在应用程序启动时加载。

我看过数据库,但不确定哪个最适合我的需要。另外,我想知道根据上述规范我是否需要一个数据库,也许我应该只使用实现序列化和反序列化的二进制文件/XML 文件。

请指出我正确的方向!

谢谢, OC

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

4

4 回答 4

6

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

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

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

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

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

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

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

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

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

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

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

于 2010-08-18T16:34:51.617 回答
4

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

于 2010-08-18T16:32:35.387 回答
2

就我个人而言,它更多的是关于数据而不是使用应用程序的用户数量。

想想你的数据,它复杂吗?如果您要实际创建一个数据库,那么它的对象有多大,而不是行数......有多少表等等......

想想未来,虽然只有一个用户,但我想数据还是会增加,每次会节省多少数据?

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

请记住,如果您想保持资源有限,总有 SQL 精简版。

于 2010-08-18T16:32:11.310 回答
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

于 2010-08-18T16:34:33.497 回答