平面文件数据库示例

时间:2010-01-08 23:32:49

标签: database-design data-access-layer flat-file

我想看一些简单的平面文件数据库的例子,以及如何通过数据层访问它们。我以前写过并从平面文件中读取,但我还没有创建过使用文本文件访问应用程序数据的数据层。

如果可能的话,很高兴看到一个教程的数据层使用了一个简单的自定义平面文件数据库。将自定义业务对象保存在XML中然后上传它们的示例将很好,因为XML非常流行并且易于使用。

我也很感激能够讨论有关平面文件数据库设计等最佳实践的网站链接。

我的目标是提供一个解决方案,用于在用户的计算机上存储简单数据,并且不需要安装任何特殊软件(如SQL Server等),以便从存储位置获取数据。

我知道这是一个非常普遍的问题,但任何可以指出我正确方向的建议都是值得欢迎的。

8 个答案:

答案 0 :(得分:4)

由于当今大量的类似技术,您的定义可能有点混乱,可以理解。

XML不是flat file format(或平面文件数据库),但是通过阅读你的目标,它听起来像你真正想要的是一个自包含的关系数据库,而不是一个实际的平面文件。

与其他人一样,我强烈建议SQLite用于此目的。有各种平台的绑定,.NET有System.Data.SQLite,它在一个文件中既是数据库提供者又是引擎。

使用SQLite的两大好处是实际数据库完全自包含在由应用程序控制的单个文件中,并且它支持标准的SQL DDL和DML命令(即SELECT,INSERT,UPDATE,DELETE,CREATE DATABASE / TABLE等)。

对于单个用户应用程序,SQLite是存储应用程序数据和设置的绝佳(最佳方式之一)方法。最近有has been discsussion它甚至可以支持更小规模的多用户应用程序。

但是,如果您能够访问/使用数据库服务器,那么Oracle,MySQL,SQL Server等仍然是多用户应用程序(甚至是小规模应用程序)的首选。

另外,不要忘记数据库的选择不是互斥的。

您可能拥有在多台用户计算机上安装了富客户端UI的多用户应用程序。这里的中央数据库应该是一个多用户数据库,如MySQL。但在富客户端UI中,SQLIte非常适合存储每个用户设置,或者在无法访问数据库时提供离线支持。

答案 1 :(得分:1)

biggy是我过去使用过的。它在平面文件中保存为JSON,您可以在Github上找到它

答案 2 :(得分:0)

CSVINIXML等文字格式可用于存储结构化数据,但IMO不能灵活或高效地用作数据库。

我建议SQLite作为一个很好的选择。它是一个非常强大,轻量级和独立的数据库引擎。

答案 3 :(得分:0)

你可以吃蛋糕并吃掉它:

SQLite是一个SQL数据库,由单个文件组成,无需安装,它具有多种语言的绑定,可在各种平台上运行。

在您提及的情况下,没有必要在平面文件之上编写您自己的数据层。事实上,除非你想要学习练习,否则我建议不要这样做。

答案 4 :(得分:0)

有几个可用的嵌入式数据库,您的用户根本不必担心。

SQLLite是常见的,流行的,跨平台的等等。取决于您的实现语言。如果您使用Java,那么有几个,例如Derby。 .NET不是我的ballywick,但我想那里有一些东西。 MS至少有一个可以自由使用的桌面嵌入式SQL引擎,你可以使用它。

编写自己的练习可能是一项有趣的练习,但是这个轮子已经完成,使用现有数据库比从头开始更简单,更有效。您的用户不会受此影响,因此,如果这是主要驱动因素,则没有理由不使用可用的产品/项目。

答案 5 :(得分:0)

Perl中有DBD::CSV模块可以加载csv文件并使用SQL语句查询它们。但是为了你的目标,我认为你最好调查SQLite,这是一个没有服务器的正常关系数据库。

答案 6 :(得分:0)

为什么不将应用程序与简单的数据库引擎捆绑在一起,而不是重新发明数据库?数据库有多种尺寸,并非都是巨大的: - )

如果您想重新发明轮子,查看简单的开源数据库引擎的源代码应该指向正确的方向。

答案 7 :(得分:0)

我同意许多意见,建议最好使用现有的数据库引擎。但是,试图真正回答这个问题:

  • 一种非常常见的平面文件数据库格式是Xbase(文件通常带有.dbf扩展名)。您可以谷歌搜索“xbase”和“dbf”并找到大量信息和任意数量的驱动程序。如果你真的感兴趣,你应该能够提取相当多的提示和技巧。
  • 如果您想使用系统中非常可能的那个,可以使用ODBC“Microsoft Text Driver”。如果您的计算机上有任何Microsoft数据访问内容,则可能有该驱动程序。我不确定,但它可能安装了MDAC。该驱动程序将读取和写入逗号分隔的文本文件(以及其他格式)。